Удивляетесь, почему Ruby так популярен? Его поклонники называют его красивым, искусным языком. И в то же время они говорят, что он удобный и практичный. Что же перевешивает?
Идеи создателя Ruby

Ruby – это тщательно сбалансированный язык. Его создатель, Юкихиро Мацумото (известный как “matz”), соединил конструкции его любимых языков (Perl, Smalltalk, Eiffel, Ada и Lisp), чтобы сформировать новый язык, в котором функциональное программирование уравновешено императивным (или процедурным) программированием.
Он часто повторял, что он “старается сделать Ruby естественным, но не простым” языком в том плане, как он отображает жизнь.
Основываясь на этом, он добавляет:
Ruby прост на вид, но очень сложен внутри, подобно нашему человеческому телу[1].
Рост популярности Ruby
Со времени опубликования в 1995 году у Ruby появились преданные поклонники среди программистов всего мира. В 2006 году Ruby завоевал массовое признание. В крупных городах по всему миру активно действуют группы пользователей Ruby, а конференции, посвящённые Ruby, заполнены до предела.
Ruby-Talk, основной список рассылки для обсуждения языка Ruby в среднем достигает до 200 сообщений ежедневно.
Индекс TIOBE, который измеряет рост популярности языков программирования, помещает Ruby на 11 место среди общепризнанных языков программирования. Ссылаясь на темп его роста, предсказывается: “Есть все шансы, что Ruby войдёт в верхнюю 10-ку в ближайшие полгода.” Во многом этот рост приписывается популярности программного обеспечения, написанного на Ruby, в особенности – Ruby on Rails, платформе для разработки web-приложений[2].
К тому же Ruby абсолютно свободен. Он не только бесплатен, его можно также свободно использовать, копировать, изменять и распространять.
Всё представляется в виде объектов
В самом начале Matz рассматривал разные языки в поисках идеального синтаксиса. Вспоминая свои изыскания, он говорил: “Мне был нужен скриптовый язык, который был бы более мощным, чем Perl, и более объектно-ориентированным, чем Python3.”
В языке Ruby всё является объектами. Для каждой частицы информации или программы могут быть определены собственные свойства и действия. В объектно- ориентированном программировании свойства называются переменными экземпляра, а действия известны под названием методы. Чисто объектно-ориентированный подход в Ruby чаще всего демонстрируется фрагментом кода, в котором действие применяется к числу.
5.times { print "Мы *любим* Ruby -- он исключительный!" }
Во многих языках числа и другие примитивные типы данных – это не объекты. Под влиянием языка Smalltalk в Ruby для всех типов имеются методы и переменные экземпляра. Это облегчает использование Ruby, поскольку правила, применяемые к объектам, применяются в Ruby ко всему.
Гибкость Ruby
Ruby представляется гибким языком, так как он позволяет программистам свободно изменять его составляющие. Существенные части Ruby могут быть по желанию удалены или переопределены. А к имеющимся частям могут быть сделаны добавления. Ruby старается ни в чём не ограничивать программиста.
Например, сложение выполняется с помощью операции (+). Но, если бы вы предпочли использовать явное слово plus, вы могли бы добавить такой метод к встроенному в Ruby классу Numeric.
class Numeric
def plus(x)
self.+(x)
end
end
y = 5.plus 6
# y теперь равно 11
Операции в Ruby – это просто “подслащённый синтаксис” для методов. Вы также можете переопределить их.
Блоки, действительно выразительная конструкция
Блоки в Ruby также представляются мощным источником гибкости. Программист может присоединить к любому методу замыкание, где описывается, как должен выполняться этот метод. Замыкания называются блоками, и они стали одной из наиболее популярных возможностей для тех, кто перешёл на Ruby с других императивных языков, наподобие PHP или Visual Basic.
Идея блоков почерпнута из функциональных языков. Matz говорил: “Замыканиями в Ruby я хотел отдать дань уважения культуре языка Lisp4.”
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. В 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, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2 и т. д.
Ссылки
1 Matz, высказывание в списке рассылки Ruby-Talk, 12 мая 2000 года.
2 Обратитесь да дополнительной информацией к домашней странице Ruby on Rails.
3 Matz, в Интервью с создателем Ruby, 29 ноября 2001 года.
4 Matz, в статье Блоки и замыкания в Ruby, 22 декабря 2003 года.
