О Ruby
Удивляетесь, почему Ruby так популярен? Его поклонники называют его красивым, искусным языком. И в то же время они говорят, что он удобный и практичный. Что же перевешивает?
Идеалы создателя Ruby
Ruby – это тщательно сбалансированный язык. Его создатель Юкихиро Мацумото (также известный как “Matz”), объединил части его любимых языков (Perl, Smalltalk, Eiffel, Ada и Lisp) чтобы сформировать новый язык, в котором парадигма функционального программирования сбалансирована принципами императивного программирования.
Он часто повторял, что «пытается сделать Ruby естественным, но не простым» языком, который отражает жизнь.
Основываясь на этом, он добавляет:
Ruby прост на вид, но очень сложен внутри, подобно человеческому телу 1 .
Рост популярности Ruby
Со времени выпуска публичной версии в 1995 году, Ruby привлек внимание программистов со всего мира. В 2006 году Ruby завоевал массовое признание. В крупнейших городах по всему миру активно действуют группы пользователей Ruby, а конференции, посвященные Ruby, заполнены до предела.
Ruby-Talk, основная рассылка для обсуждения языка Ruby, содержала в среднем 200 сообщений ежедневно в 2006 году. В последние годы это количество уменьшилось, так как сообщество стало использовать несколько тематических рассылок вместо одной общей.
Индекс TIOBE, который измеряет рост популярности языков программирования, помещает Ruby в десятку общепризнанных языков программирования. Во многом, рост популярности языка приписывается популярности программного обеспечения, написанного на Ruby, в особенности – Ruby on Rails, фреймворку для разработки веб-приложений.
Ruby также абсолютно открыт. Открыт для бесплатного использования, изменений, копирования и распространения.
Всё в Ruby – объекты.
Вначале Matz рассматривал другие языки в поисках идеального синтаксиса. Вспоминая свои изыскания, он говорил: «Мне нужен был скриптовый язык, который был бы более мощным, чем Perl, и более объектно-ориентированным, чем Python 2 .»
В Ruby всё – объект. Для каждой частицы информации или кода могут быть определены собственные свойства и действия. В объектно-ориентированном программировании свойства называются переменными объекта, а действия – методами. Чистейший объектно-ориентированный подход Ruby может быть продемонстрирован парой строк кода, в которых производится действие над числом.
5.times print "Мы любим Ruby! Ruby – это замечательно!" >
Во многих языках числа и другие примитивные типы данных не являются объектами. Ruby под влиянием языка Smalltalk позволяет задать методы и переменные объекта всем типам данных. Это упрощает использование Ruby, так как правила применимые к объектам – применимы ко всему Ruby.
Гибкость Ruby
Ruby очень гибкий язык, так как он позволяет его пользователям свободно менять его части. Основные части Ruby могут быть удалены или переопределены по желанию. А существующие части можно изменять. Ruby старается ни в чём не ограничивать пользователя.
Например, сложение выполняется операцией плюс ( + ). Но, если вы хотите использовать для этого более читаемое слово plus – вы можете добавить такой метод прямо в Numeric , внутренний класс языка Ruby.
class Numeric def plus(x) self.+(x) end end y = 5.plus 6 # y теперь равно 11
Операторы в Ruby – синтаксический сахар для методов. Вы также можете переопределить их.
Блоки — по-настоящему выразительная конструкция
Блоки в Ruby также являются отличным источником гибкости. Программист может добавить замыкание к любому методу, описывая, как этот метод должен действовать. Замыкание — это блок, являющийся одной из наиболее популярных конструкций для пришедших в мир Ruby из мира императивных языков программирования, таких как PHP или Visual Basic.
Создание блоков было вдохновлено функциональными языками программирования. Мац (Matz) говорил, «замыканиями в Ruby я хотел отдать дань уважения культуре языка Lisp 3 .»
search_engines = %w[Google Yahoo MSN].map do |engine| "http://www." + engine.downcase + ".com" end
В коде выше блок описан внутри конструкции do . end . Метод map применяет блок кода к представленному списку слов. Многие другие методы в Ruby оставляют путь, открытый для программиста, чтобы тот написал собственный блок кода, детально говорящий методу, что тот должен сделать.
Ruby и примеси
В отличие от многих объектно-ориентированных языков, Ruby намеренно предоставляет лишь одиночное наследование. Но Ruby также предоставляет концепцию модулей (называемых «категориями» в Objective-C). Модули – это коллекции методов.
Классы могут свободно вмешивать модуль и получать все его методы. Например, любой класс, который реализует метод each , может подмешать модуль Enumerable , который добавит кучу методов использующих each для создания циклов.
class MyArray include Enumerable end
В основном, рубисты находят это более прозрачным, нежели множественное наследование, которое может быть довольно сложным и иметь какие-либо ограничения.
Визуальное представление Ruby
Так как в Ruby зачастую пунктуация встречается довольно редко и обычно в качестве ключевых слов используется английский язык, некоторые знаки препинания используются для украшения Ruby. Ruby не нуждается в объявлении переменных. В нем используются простые соглашения по именованию, для того чтобы разделить области видимости переменных.
- var — может быть локальной переменной.
- @var — переменная объекта.
- $var — глобальная переменная.
Данная символика повышает читабельность, позволяя программисту легко идентифицировать роль каждой переменной. Это также позволяет не использовать утомительное self. для каждого объекта.
Помимо основ
Ruby полон другими особенностями и конструкциями, и вот некоторые из них:
- В Ruby есть конструкции для обработки исключений, как в Java или Python, которые позволяют проще работать с ошибками.
- В Ruby представлен настоящий сборщик мусора типа mark-and-sweep (пометь и отчисти) для всех Ruby-объектов. Не нужно вручную отслеживать количество ссылок в сторонних библиотеках. Как говорит Matz, «Это полезней для вашего здоровья.»
- Писать расширения на C в Ruby проще, чем в Perl или Python при помощи очень элегантного API для вызова Ruby из C. Он включает в себя вызовы для встраивания Ruby в программное обеспечение, чтобы использовать его как скриптовый язык. Также доступен интерфейс SWIG.
- Ruby может подгружать сторонние библиотеки динамически, если позволяет операционная система.
- В Ruby реализованы независимые от операционной системы потоки. Таким образом, на любых платформах, где вы запускаете Ruby, вы также можете использовать многопоточность, не зависимо от того, поддерживает ли данная система потоки или нет. Вы можете использовать возможности многопоточности даже в MS-DOS!
- Ruby отличается высокой переносимостью: он был разработан большей частью на GNU/Linux, но работает на многих типах UNIX, macOS, Windows, DOS, BeOS, OS/2, и так далее.
Другие реализации Ruby
Ruby как язык имеет несколько разных реализаций. Данный сайт посвящен реализации MRI (“Matz’s Ruby Interpreter” – Ruby интерпретатор Матца) или CRuby, но также существует несколько других. Они бывают очень полезны в различных ситуациях, предоставляют большую интеграцию с другими языками или окружениями, или имеют возможности, которых нет в MRI.
- JRuby — это Ruby, реализованный на JVM (Java Virtual Machine), использует оптимизированный JIT-компилятор, сборщик мусора, нативные потоки, инструментальную экосистему и огромное количество библиотек JVM.
- Rubinius это — «Ruby написанный на Ruby». Реализован на основе LLVM – изящной виртуальной машине, на который созданы и другие известные языки.
- mruby — это легковесная реализация Ruby, которая может быть подключена и встроена в приложение. Возглавляет разработку mruby создатель языка Ruby, Юкихиро Мацумото (Yukihiro Matsumoto), известного под псевдонимом Мац (Matz).
- IronRuby — это реализация «тесно интегрированная с .NET Framework».
- MagLev — это «быстрая, стабильная реализация Ruby с интегрированным долговременным хранением объектов и распределенным открытым кешем”.
- Cardinal — это «компилятор Ruby для виртуальной машины Parrot» (Perl 6).
Ссылки
1 Matz, сообщение в списке рассылок Ruby-Talk, 12 мая 2000 года.
2 Matz, в Интервью с Создателем Ruby, 29 ноября 2001 года.
3 Matz, в Блоки и Замыкания в Ruby, 22 декабря 2003 года.
10 причин для перехода на Ruby
Я познакомился с Ruby сравнительно недавно, благодаря чудесному фреймворку Ruby on Rails. Я не считаю себя экспертом в Ruby, но я прочитал PickAxe, написал несколько утилит на Ruby для личного пользования, а также разрабатываю на Rails в свободное время.
Ruby на данный момент, мой основной язык. Начинал же я с TurboPascal в школе, изучал C и C++ в университете, дисертацию писал на Java, а еще я изучал PHP с нуля, так как хотел научиться делать веб-сайты быстро и легко. Думаю, что написание кода для меня это некая форма развлечения, а уж потом все остальное. В начале у меня были размышления, какой язык изучать, Python или Ruby. Я выбрал второй, так как не хотел, чтоб неправильные отступы были причиной неполадок в моем коде.
Есть целая куча введений, руководств, статьей и эссе, написанных гуру, о том, как получить максимум пользы от Ruby. Данная статья ничем таким не является.
Это более скромный, неполный перечень причин, которые могут (или не могут) побудить вас использовать Ruby, ну или в крайнем случае поиграть с ним. Предостережение: если вы используете другой язык программирования для работы или в других целях — не жалуйтесь мне, если больше не захотите им пользоваться. Именно это и произошло со мной, но для меня это не столь важно. Ruby чудесный и элегантный язык и как многие подобные вещи, он может захватить ваш разум и поломать душу.
Короче, вы — предупреждены.
Зачем изучать Ruby?
1.Вы получаете все удобства (удовольствия) без уловок.
- Исключения. Верите или нет, исключения являются одной из важнейших вещей при разработке программ любого рода. Программисты на PHP4, не знают ничего о них и будут говорить вам, что можно просто печатать(ошибки) на экран или использовать их собственный «супер-пупер» класс для обслуживания ошибок. К счастью для всех нас, Ruby поставляется с try/catch (или еще лучше begin/rescue) блоками и набором предопределенных, расширяемых Исключений, для правильной обработки ошибок.
- Пространства имен: модули Ruby делают использование пространства имен легким, это должно понравиться энтузиастам C++ и Java.
- Встроенные регулярные веражения: Для всех знатоков Perl, вы можете заключить нечто в // и оно становится регулярным выражение, готовым для сравнения (для этого используем оператор =~).
- Перегрузка операторов: Ruby позволяет определять операторы, такие как +, -, >, и т.д. для любого вашего класса.
- Пакеты: называемые «gems»(камешки), они действительно оправдывают свое название, кроме того — они работают. Пакеты поддерживают зависимости, а еще могут быть как кросс-платформенные, так и платформо-зависимыми.
- Интерактивная консоль: может использоваться для тестирования кода интерактивно, подобно консоли Python
2.Вы полюбите мелочи.
- Вы можите использовать оба оператора, if и unless в условных выражениях. Кончно же вы можите использовать if с противоположным значением выражения, но использования unless обычно приводит к меньшему числу ошибок. Кроме того, вы можите использовать оба оператора, как условные модификаторы, ставя их после выражения, а не до: order.new unless order.exists
- Можно использовать знаки вопроса и восклицания в конце имени метода. Данное соглашение не навязывается, но знак «?» используется, когда метод возвращает true или false, в то время, как знак «!» используется для методов, делающих нечто необратимое, на подобии удаления записи из базы данных, отщепления последнего символа из строки и т.п.
- Можно использовать псевдонимы (alias) для уже созданных методов. Таким образом можно получить методы exist и exists, без накладных расходов и без повторений.
- Вы можете использовать директивы attr_reader, attr_writer или attr_accessor для автоматического создания getter/setteer для членов класса.
- И еще некоторое соглашение об именах: константы, классы и модули пишут с заглавной буквы, методы и члены класса должны начинатся с маленькой буквы, глобальные переменные именуют начиная с «$», имена переменных объекта начинаются с «@», а имена переменных класса с «@@», ну и т.д.
- При вызове методов, можно не писать скобки. Можно писать write File.open(«/home/h3rald/test.txt») или просто File.open «/home/h3rald/test.txt» , что особенно удобно с методами, без аргументов.
3.Больше не нужно использовать точку с запятой.
Хотите написать следаующую инструкцию? Просто переходите на новую строку. Нажмите «Enter» и готово. В Ruby как и в Python, новая линия разделяет инструкции, так что вам не придется все время ставить точку с запятой. К сожалению это означает, что подобно фанатам C++, мы не сможем написать программу в одну строчку. Но это не так уж и плохо, правда?
4.Все является объектом, как это и должно быть.
Когда я изучал Java, мне говорили, что все является объектом.
— «Че, 14 и 374346.678 — объекты?»
— «Нет, глупыш, это числа!»
В Ruby числа, символы, булевы значения и все остальное является объектом. Серьезно. Это означает, что можно писать вещи подобно этим:
«YOU SHOULDN’T ALWAYS USE CAPITALS».lowcase # вернет «you shouldn’t always use capitals» , вместо нечто такого:
# PHP Code
strtolower(«YOU SHOULDN’T ALWAYS USE CAPITALS»)
Этим вы экономите время, экономите скобки и так более логично.
5.Все имеет значение.
Или «больше не надо использовать return для возврата значений». Если побыстрячку, то так: все инструкции в Ruby возвращают значение, даже присваивание переменных, так что вам действительно не нужно использовать ключевое слово «return» в конце методов. Значение последнего присваивания всегда будет возвращено.
6.Можете изменять окружение любым доступным способом.
- Вы изменяете исходный код класса, если вы имеете к нему доступ. Но обычно это — плохая идея, не делайте так.
- Вы наследуете свой класс от того и добавляете к нему новый метод. Обычно это — хорошая идея. Но из-за одного метода это может оказаться несколько монрообразным. Кроме того, придется немного подправить другой свой код соответственно.
- Можно просто создать метод вне класса. Это сработает, но будет не очень изящно, а еще — идет в разрез с ООП.
7.Вы не сможите получать единорогов из птиц и конец, но вы получите ослов, если захотите.
Я четко помню, как моя учительница по C++, использовала животных, для иллюстрации основных концепций объектно-ориентированного программирования — классов и наследования. Было нечто загадачно, когда объясняла нам множественное наследование, образовывая «пегаса» из «птиц» и «лошадей». Сумасшедшие вещи, Ruby не позволяет множественного наследования. Это выглядит как тренд и в конце-концов это дело вкуса. Я не в восторге от множественного наследования, так как это может привести к непредсказуемым вещам. Несмотря на это есть возможность создания нечто подобного, используя модули Ruby, так что переменные и методы одного модуля, будут добавлены в определенный класс, если модуль включен в него.
8. XML — реально ненужен.
XML — красивый, общеупотребительный, язык разметки, который может быть обработан всеми языками программирования и используется повсеместно. К сожалению, он слишком громоздкий для написания, трудный для обработки(парсинга) и, давайте будем честны — трудный для чтения в большинстве случаев. А вот взгляните на следующий фрагмент:
regexp: !ruby/regexp /a-zA-Z/
number: 4.
string: a string
Безусловно это легче и проще XML, правда? Добро похаловать в YAML, любимый (но не единственный) язык разметки Ruby, с помошью которого любой объект может быть представлен в простом, лаконичном, но полном виде.
Ruby способен работать с XML, но простота YAML подкупила многих разработчиков, которые теперь используют его вместо XML, например для файлов конфигурации (так поступили в Rails). Фрагмент, представленный выше, был получен исполнением следующего фрагмента кода:
«a string», «number» => 4.7, «regexp» => /a-zA-Z/>.to_yaml
Метод to_yaml, определен для класса Object, который является родителем для всех остальных объектов, а потому доступен для всех объектов Ruby. Это позволяет преобразовывать объекты в YAML и обратно, абсолютно прозрачно для разработчика. Круто, да?
9.Лямбда — нечто больше, чем просто греческая буковка.
Ruby позаимствовал некую магию из Lisp и Perl в объекты и блоки Proc. Proc — это «блок кода, связанный с набором локальных переменных. Однажды связанные, они могут вызываться в различных контекстах и все еще обращаться к тем переменным.». Поглядим на следующе:
def gen_times(factor)
return Proc.new <|n| n*factor >
end
times3 = gen_times(3)
times5 = gen_times(5)
times3.call(12) #=> 36
times5.call(5) #=> 25
times3.call(times5.call(4)) #=> 60
Можно было использовать ключевое слово lambda вместо Proc.new, на результат это не влияет. Это могло показаться знакомым людям, знающим Perl и Python (или Lisp). Такое можно сдалать даже на PHP, но не много людей пользуются этой возможностью.
Кроме того в Ruby широко используются блоки типа «несозданные Proc», например, для итерации по содержимому объекта и исполнения некоторого кода, подобно методу each, доступного для класса Array:
[1, 2, 4, 6, 8].each <|c| puts c*2>#=> возвратит каждый элемент, умноженный на 2
Если код не умещается на одной строчке, рекомендуется использовать конструкцию do… end, вместо использования скобок. Фаны Ruby не любят скобок.
10. Вы можете использовать Rails.
Последнее, но не по важности… Вы всегда можете использовать Rails для разработки веб-приложений. Разработка будет не настолько простой, как с PHP, но Rails были написаны на Ruby, поскольку он имет возможности, отсутствующие в других языках.
Заключение
Время вышло. Возможно вы уже задумываетесь о взгляде на Ruby, возможно вы уже пробовали его, а возможно вы просто проигнорировали его. Как бы там нибыло, в следующий раз, когда глядя на свой код, он будет казаться страшным, а размер его устрашающим — не обвиняйте меня.
Уважаемые Читатели — не забывайте, что хабраюзер, просто перевел (паршиво, да) текст. Идеологических претензий ему высказывать нет нужды.
Язык программирования Ruby
Ruby (ruby — рубин, руби) — интерпретируемый мультипарадигмальный язык программирования: динамический, объектно‑ориентированный, рефлективный, императивный, функциональный. Активно используется в веб‑разработке, в системном администрировании и в работе операционных систем (Mac OS X, Linux, BSD).
В Руби есть независимая от операционной системы реализация многопоточности, строгая динамическая типизация, сборщик мусора и многие другие возможности. Язык близок по особенностям синтаксиса к языкам Perl и Eiffel, по объектно‑ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Lisp, Dylan и Клу. Ruby разрабатывался на Linux, но работает на многих версиях Unix, DOS, Microsoft Windows, Mac OS (где по умолчанию встроен в операционную систему), BeOS, OS/2 и т. д.
Ruby начал разрабатываться в начале 1993 и вышел в свет в конце 1995, создатель Ruby — Юкихиро Мацумото (Matz):
Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно‑ориентированного сценарного языка. Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно‑ориентированный интерпретируемый язык казался многообещающим. В то время я знал Python. Но он мне не нравился потому, что я не считал его настоящим объектно‑ориентированным языком. Его OO свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно‑ориентированного программирования с пятнадцатилетним стажем, очень, очень хотелось, чтобы был истинно объектно‑ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было. Тогда я решил его создать. Прошло несколько месяцев, прежде чем интерпретатор заработал. Я добавил в мой язык то, что мне хотелось — итераторы, обработку исключений, автоматическую сборку мусора. Затем я переорганизовал свойства Perl и реализовал их как библиотеку классов. В декабре 1995 года я опубликовал Ruby 0.95.
Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении. Сам Мацумото утверждает, что целью разработки была минимизация неожиданностей при программировании для него, но после распространения языка он с удивлением узнал, что мышление программистов похоже, и для многих из них принцип «наименьшей неожиданности» совпал с его принципом.
Ruby также унаследовал идеологию языка программирования Perl в части предоставления программисту возможностей достижения одного и того же результата несколькими различными способами. Люди различны, и им для свободы необходима возможность выбирать. Одной из основных целей разработки было освобождение программистов от рутинной работы, которую вычислитель может выполнять быстрее и качественнее. Особое внимание, в частности, уделялось будничным рутинным занятиям (обработка текстов, администрирование), и для них язык настроен особенно хорошо.
В противовес машинно‑ориентированным языкам, работающим быстрее, целью этой разработки был язык, наиболее близкий к человеку. Любая работа с компьютером выполняется людьми и для людей, и необходимо заботиться в первую очередь о затрачиваемых усилиях людей. Язык позволяет максимально быстро и просто для человека выполнить задачу, хотя, возможно, это и потребует дополнительного времени работы компьютера. Принципы программирования и устройства языка иногда выделяются в термин Ruby Way: «просто, но не слишком просто», «принцип наименьшего удивления», вторичность скорости работы программы, динамичность, простые строгие правила, выполнение которых не доходит до педантизма, потребность создавать полезные и красивые программы, как причина программирования.
Ruby является мультипарадигменным языком: он поддерживает процедурный стиль (определение функций и переменных вне классов), объектно‑ориентированный (всё — объект), функциональный (анонимные функции, замыкания, возврат значения всеми инструкциями, возврат функцией последнего вычисленного значения). Он поддерживает отражение, метапрограммирование, информацию о типах переменных на стадии выполнения (динамическая идентификация типа данных).
В языке Ruby осуществлён простой и удобный механизм для расширения языка с помощью библиотек, позволяющий легко разрабатывать дополнительные библиотеки. Для управления библиотеками и программами Ruby в виде самодостаточных пакетов предназначена система управления пакетами RubyGems (англ. gems, gem — драгоценный камень). Большинство расширений распространяются под свободными лицензиями и могут быть использованы в любом проекте практически без ограничений.
Ruby on Rails
— Rails is the killer app for Ruby.
Юкихиро Мацумото, создатель языка Ruby
Наиболее популярным Ruby‑фреймворком для разработки веб‑приложений является Ruby on Rails.
Развитие языка
В 2020 году вышла 3-я версия Ruby, которую разрабатывали с целью ускорения работы и которая обеспечила трёхкратный прирост производительности за счёт использования JIT‑компиляции. Также была улучшена работа с параллелизмом (Ractor & Fiber Scheduler) и реализован опциональный механизм типизации для статического анализа (RBS & TypeProf).
Статья опубликована в 2014 и была обновлена в 2022 году
Тематические статьи
Фреймворк Ruby on Rails
Rails — это прежде всего среда разработки, которая великолепно подходит для создания любого типа веб‑приложений: систем для управления веб‑сайтами и платформ для ведения электронной торговли, программ для организации совместной работы и для веб‑сервисов для осуществления коммуникации, для учетных и ERP‑систем, статистических и аналитических систем.
Что такое Ruby on Rails?
Ruby on Rails — фреймворк для быстрой веб-разработки на языке Ruby.
Веб-разработка — создание веб-приложений — сайтов, которыми вы пользуетесь через браузер. Яндекс.Почта, Вконтакте, Facebook, GMail, Twitter, Одноклассники. Тысячи их.
Для отображения информации в веб-приложениях используют язык разметки HTML и стили CSS, без них веб-приложение не получится (ок, без CSS можно обойтись при желании). Но это не языки программирования, это просто способ показать какую-то информацию.
Если на сайте только текст, картинки и видео, которые не меняются — это, скорее всего, статический сайт. Для статических сайтов хватает только HTML и CSS.
В 99% случаев на сайте есть какие-то динамические элементы (выпадающие меню, счетчики Яндекс.Метрики или Google Analytics), которые используют JavaScript.
Что такое фреймворк?
Когда пользователь, например, регистрируется на сайте, он вписывает свои email, пароль и имя в форму, жмет кнопку «Зарегистрироваться» и в этот момент на сервер уходит запрос с этими данными. Сервер их получает, сохраняет в базу данных, формирует ссылку, например, на личный кабинет пользователя и отправляет её браузеру.
Чтобы приложение могло получать информацию от пользователя, обрабатывать её, сохранять или получать информацию в базе данных по запросу, нужен серверный язык программирования.
Ruby, Python, PHP, Node.JS, Java, Elixir, Go — серверные языки программирования. На них можно писать серверную часть веб-приложений.
Серверные части разных веб-приложений делают похожие, типовые вещи: обработать запрос от браузера, понять, что хотят, обратиться к базе данных (записать или прочитать что-то), отправить браузеру ответ.

Чтобы быстрее создавать новые приложения меньшими усилиями, разработчики придумали фреймворки — специальный набор библиотек для языка программирования, которые не надо писать каждый раз заново.
Для Ruby — фреймворк Ruby on Rails, для Python — Django, для PHP — Laravel, Symfony, Yii, для Elixir — Phoenix. Для Node.JS, Go и Java монолитных фреймворков пока нет, просто используются наборы библиотек.
Отличие фреймворка от набора библиотек можно описать так: Фреймворк — это скелет, на который мы наращиваем свой код. При работе с отдельными библиотеками скелетом является наш код. Фреймворк — набор библиотек, который позволяет реализовать весь необходимый базовый функционал. Плюс важна взаимная согласованность стиля и функциональности компонентов, сквозная документация.

Для закрепления: Ruby — язык программирования, Ruby on Rails — фреймворк, написанный на Ruby.
Когда используют Ruby on Rails
Веб-приложения часто делают, чтобы заработать. Чтобы проверить бизнес-модель надо как можно быстрее показать клиентам ваш продукт и посмотреть, будут ли они им пользоваться, будут ли они за него платить. Ruby on Rails позволяет запустить первую версию приложения за 2-3 месяца.
Например, первая версия UCHI.ru, по рассказу главного разработчика, была сделана меньше, чем за месяц!
Сайт с простым функционалом на рельсах, если уметь, можно сделать за вечер. Вот видео, где автор в режиме спринта делает сайт со списком задач за 22 минуты (включая выкладывание на реальный сервер):
Какие компании используют Ruby on Rails?
На Ruby on Rails написаны GitHub, GitLab, AirBnB, Twitch, Shopify, Fiverr, Twitter. Из наших — InSales, UCHI.ru, Aviasales.
Отдельные проекты на «рельсах» есть практически в любой крупной компании, например, в Google, Apple и Сбербанке.
Перспективно ли изучать Ruby on Rails
Да, если вам нравится веб-разработка.
Ruby входит в 20 самых популярных языков программировани, а число вакансий на Rails сравнимо с числом вакансий на Django и Laravel.
При этом под «разработкой» разные люди понимают разное. Например, PHP популярен благодаря распространенным CMS-кам типа WordPress, Joomla или Drupal. Число вакансий на нем огромное, но по факту ищутся не разработчики, а веб-мастера для поддержки сайтов небольших компаний и допиливания плагин для вордпреса. Это скучная и не очень высокооплачиваемая работа.
Но большинство новичков, увидев число вакансий по PHP во время выбора, какой язык программирования изучать, выбирают его. В итоге разработчики на Ruby on Rails — всегда в дефиците, поэтому средняя зарплата Ruby-разработчика выше (как и Python-разработчиков).

Ruby — лучший язык для новичков
Руби — отличный выбор для первого языка программирования.
Частенько, когда люди выбирают язык для начала карьеры разработчика, возникает ощущение, что они действуют так, как будто отправляют на обучение своего ребенка или сотрудника. Мотивация, от которой зависит успех обучения, абсолютно не учитывается.
Меж тем, учить язык именно вам и количество вакансий не будет мотивировать вас учиться, если вам не нравится сам процесс разработки на выбранном языке. Будет играть роль, насколько вам понятен синтаксис, насколько вам нравится, как устроен язык, насколько он кажется вам логичым и эстетичным.
На руби писать в разы приятнее, чем на PHP. Вот пример короткой программы Ruby и на PHP:
PHP
$fruits = ["banana", "apple", "cherry"]; foreach ($fruits as $fruit) < echo $fruit . "\n"; >
Ruby
fruits = %w(banana apple cherry) fruits.each do |fruit| puts fruit end
Ruby-сообщество повернуто на правильном и понятном коде, который легко поддерживать. И язык Ruby и фреймворк Ruby on Rails закладывают в изучающего основы современного программирования и веб-разработки. Изучая их вы скорее поймете и научитесь правильным принципам разработки.
Даже если потом придётся перейти на другой язык программирования — заложенная база на эталонных примерах поможет гораздо быстрее освоить более сложный и менее выразительный язык или фреймворк.
При этом, если вы освоили эти принципы, найти работу на Ruby будет в разы проще, т.к. хороших Ruby on Rails разработчиков всегда не хватает.
Подробнее про это — в этом видео:
Чем руби отличается от PHP, Python
Технически эти языки очень похожи — высокоуровневые, динамические, интерпретируемые. Но это только формальная сторона.
Python, как и руби — мощный современный язык. По сравнению с руби он, на наш вкус, немного сложнее для понимания продвинутых тем, не обладает таким изящным синтаксисом и такой дружелюбной к новичкам экосистемой, как Ruby.
Зато он популярен в областях, не связанных с web — машинное обучение, аналитика, научные вычисления. Python вам очень пригодится для машинного обучения. Или как универсальный язык, если вы уже владеете программированием.
PHP изначально не проектировался как полноценный язык программирования. Это отразилось и на надежности, и на безопасности, и на популярности языка.
Пик его развития давно прошел, и сейчас ни передовые компании (вроде гугла, эппла, амазона), ни передовые стартапы (те самые, в кремниевой долине) его практически не используют.
Ruby изначально проектировался как «лучший друг программиста». На нем легко и принято писать, можно создавать сложные приложения. Но так исторически сложилось, что он используется больше всего именно в веб-разработке.
С Ruby вы быстрее и легче всего дойдете с нуля до работающего веб-приложения и правильного понимания основ программирования.
Изучаешь руби?
Заходи в дружелюбный чат, задавай вопросы, делись опытом.