Понятно что всё это вкусовщина, но google trens показывает для языка последние 5 лет стабильный достаточно ровный график. Почему язык остался нишевым, на люителя?
Что мешает ему активно разиваться и постепенно отнимать долю, например в веб-разработке у php, python, других сервеных языков? Ведь он достаточно высокоуровневый, а такие языки обычно дружелюбны к новичкам, которым пофигу на их остальные недостатки.
1. А что мешает другим языкам активно развиваться и отнимать нишу у Ruby?
2. У PHP есть задел - его много.
3. У Python и Go и Java есть задел - у него поддержка Google.
4. У Javascript на бекенде есть задел - много фронтендеров. У Javascript на фронтенде есть задел - он незаменим.
5. Ruby развивается, по сути, одним человеком.
6. Ruby - медленный.
7. Новички обычно не такие умные, чтобы искать то, что дружелюбно. Новички выбирают то, о чем на каждом углу судачат или на что много предложений работы.
Я пропущу плюсы Ruby, такие как сообщество, невероятную продуманность и элегантность, и приступлю сразу к минусам.
1) Ruby медленный (до версии 2.0 был самым медленным в мире).
2) Ruby - представитель write-only языков (т.е. читать его на порядки сложнее, нежели писать на нём).
3) Он не предназначен для разработки надёжных решений корпоративного уровня .
3.1) Нет хотя бы минимальной типизации.
3.2) Доступен глобальный манки-патчинг.
4) Ruby переусложнённый язык (например у него целых 4 способа сконкатенировать строчку) и каждая версия добавляет сахару.
5) Statefull (в отличие от того же PHP, который Stateless)
Всё это вместе и плюсы (ну кроме 1го пункта) и минусы одновременно, но в целом эти особенности как и удерживают свою нишу, так и не позволяют в неё влиться новым участникам.
Плюсанул, так как ответ насыщен конкретными утверждениями.
Вопросы есть, однако ) Не обессудьте - чиркните ответ.
3.2) - что это и как?
4) - что за 4 способа?
5) - это как?
Касательно пунктов
1. Хотя язык и медленнее некоторых других, он находится в той же весовой категории, что и Python (CPython). На Ruby многие задачи можно решать достаточно эффективно даже несмотря на то что он "медленный". Результаты по производительности и потреблению памяти разных языков могут меняться в зависимости от версии используемого интерпретатора/компилятора. В Ruby основной интерпретатор - это реализация MRI (также CRuby).
2. Сомнительный пункт.
читать его на порядки сложнее
Это больше зависит от стиля написания. Чаще код наоборот получается довольно лаконичным и не требуется листать кучу кода чтобы понять о чём речь.
3. Почему не подходит? Очень даже подходит. Особенно благодаря лаконичности языка и набору средств.
3.1 Кому нужен производительный язык с синтаксисом как у Ruby, с опциональной типизацией, пусть попробует компилятор Crystal.
3.2 манки-патчинг - тут согласен, это bad practices. Но это как макросы в Си или использование GoTo - всегда найдутся как сторонники, так и противники.
4. Наличие сахара не делает язык переусложнённым автоматически. Благодаря этому разнообразию/выразительности многим нравится писать именно на Ruby.
5. Нужны пояснения...
Подытожив, любые возможности языка нужно использовать с умом.
> PHP это не помешало.
> Минимальную типизацию в него запилили уже когда PHP был в каждой бочке затычкой.
awdemme: тайп-хинт типизация в пыхе была ещё с версии 5.х, с версии 7.0 её только распростронили для скаляров. Тут лучше подойдёт сравнение с питоном, где её завезли только недавно.
> Basecamp смеется над вами.
И github, да. Два проекта, которые остались на рубях после выхода из стадии стартапов, остальные переехали на другие языки. В моём тезисе подразумеваются так же отсутствие, например, нормального полиморфизма (интерфейсы, вы хде?), слабой связанности за счёт DI (+ авторвайринг и двойная диспатчеризация), что вытекает из отсутствия типизации и прочих. Т.е. данный тезис стоит читать между строк.
> В серьезных выскоконагруженных системах обработчик написанный на PHP не перезапускают на каждый запрос.
> Это удел мелких сайтиков.
awdemme: Ты не поверишь, но нихрена нет. В рантайме пых используется крайне редко и только для таких вещей, где без него не обойтись, например внутри Ratchet (аналог Eventmachine, но на пыхе). В остальных случаях - fcgi fpm (multiprocess) или mod apache (multithread + multiprocess).
тайп-хинт типизация в пыхе была ещё с версии 5.х, с версии 7.0 её только распростронили для скаляров. Тут лучше подойдёт сравнение с питоном, где её завезли только недавно.
PHP уже был самым распространенным когда он был еще версии 4.
Ты не поверишь, но нихрена нет. В рантайме пых используется крайне редко и только для таких вещей, где без него не обойтись, например внутри Ratchet (аналог Eventmachine, но на пыхе). В остальных случаях - fcgi fpm (multiprocess) или mod apache (multithread + multiprocess).
Результаты по производительности и потреблению памяти разных языков могут меняться в зависимости от версии используемого интерпретатора/компилятора.
И не только. Разные варианты реализации одного и того же в ruby могут кардинально отличаться по скорости тоже (даже на порядки), хотя бы та же конкатенация строк. Поэтому при сравнении надо это учитывать.
И github, да. Два проекта, которые остались на рубях после выхода из стадии стартапов, остальные переехали на другие языки.
Это просто 2 самых известных. Об остальных мы просто не знаем.
С учетом малой распространенности языка - "двойка" вполне нормальная цифра.
А переход на другие языки - это всего лишь возможность это сделать во время масштабного рефакторига, который в свою очередь стал возможен, когда проекты получили значительные инвестиции.
Выбор языка не всегда обусловлен проблемами Ruby (уж кто кто, а github более чем нагруженный проект).
Кирилл Несмеянов: Когда у тебя проект масштаба github, нельзя взять да просто "переехать" на другой язык. Они, скорее всего, просто переписали критичные к производительности микросервисы на другие языки. А Ruby вряд ли куда-то делся.
Небось и для контроля за инфаструктурой используют Chef / Puppet - инструменты, написанные на Ruby.
awdemme: лучше назовите где это используется. Я знаю только один такой сайт - Slack, и опять же это продиктовано потребностями. В остальных случаях Nginx или Apache онли, так можно не простреливать себе ноги мемликами.
В любом случае сам факт в том, что некоторые языки это позволяют. А у рубишек это было в качестве эксперимента, так же как шеринг мемори между воркерами у ActiveRecord. Т.е. в теории прикольно, а на практике я не припомню, чтобы кто использовал.
Из-за отсутствия статической типизации порой трудно вылавливаются ошибки. И эти ошибки норовят вылезти именно в промышленной эксплуатации кода, особенно при недостаточном тестировании. На их поиск иногда уходит больше времени, чем хотелось бы.
Выразительность языка Ruby может являться и большим минусом: govnokod.ru/ruby
Язык Ruby будет далеко не лучшим выбором в качестве первого языка программирования. Впрочем, это будет минусом и для многих других ЯП.
Так какой же лучше для начинающих?
Если нужен язык, который будет бить по рукам, то берите Pascal.