- Ruby это динамический, рефлексивный, объектно-ориентированный язык, который сочетает синтаксис, вдохновленный особенностями Perl с Smalltalk. Rubyвозник в Японии в середине 1990х и впервые был разработан и спроектирован Юкихиро "Matz" Мацумото. Он (язык) находился главным образом под влиянием Perl, Smalltalk, Eiffel и Lisp.
- История
- Считается 24 февраля 1993 года днём создания языка Ruby. Стоит отметить, что в тот день было всего лишь придумано название для этого языка, хотя никакого кода для него не было написано. В онлайн чате между Мацумото и Keiju Ishitsuka рассматривалось два названия, это “Ruby (рубин)” и “Koral (корал)”. Было выбрано первое только потому, что это был камень по гороскопу одного из сотрудников Мацумото.
- Первый публичный релиз Ruby 0.95 был объявлен на японской внутренней телеконференции 21 декабря 1995 года. Впоследствии ещё три версии Ruby были опубликованы в течение двух дней.
- Уже на этом этапе разработки было много черт схожих с поздними релизами Ruby, включая объектно-ориентированное проектирование, классы с наследием, итераторы, замыкание, обработка исключений и сборка мусора.
- После релиза Ruby 1.3 в 1999 году заработал первый список- рассылок ruby-talk на английском языке, который сигнализировал о росте интереса к языку за пределами Японии. В сентябре 2000 была напечатана первая книга на английском по программированию на Ruby.
- Концепция языка
- Юкихиро Мацумото хотел создать новый язык, уравновешивающий функциональное1 программирование с императивным2 (процедурным) программированием. Мацумото заявил: "Мне нужен был скриптовый язык, который был более мощным, чем Perl, и более объектно-ориентированный, чем Python. Вот почему я решил разработать свой язык". Он часто говорил, что он "пытается сделать Ruby естественным, не простым", как сама жизнь.
- Мацумото говорил, что Ruby разработан для производительности программиста и для радости, следуя принципам хорошего дизайна пользовательского интерфейса. Он подчеркивал, что дизайн системы необходим для человека, а не для компьютера: «Часто люди, особенно инженеры, фокусируются на машинах. Они думают, что «делая это, машина заработает быстрее. Делая это, машина будет работать более эффективно. Делая это, машина будет делать то-то, то-то, то-то. Они фокусируются на машине. Но по факту, мы должны фокусироваться на людях, о том, как люди заботятся о создании программных приложений. Мы мастера. Они рабы».
- Мацумото описывал свой язык, как простой снаружи, но очень сложный внутри, как наше тело. Он хотел, чтобы каждый человек, который только начинал использовать Ruby, не чувствовал затруднения в освоения этого языка, он ориентировался на то, чтобы люди меньше тратили время на реализацию тех или иных программ (по сравнению с другими языками программирования), погружаясь в «дебри» кода. Правда есть в этой концепции один существенный недостаток: простая программа может использовать больше ресурсов компьютера или выполняться дольше, чем при написании подобных программ, например на Perl.
- Краткое описание
- В Ruby всё является объектом. Для каждого объекта могут быть определены собственные свойства и действия. В объектно- ориентированном программировании свойства называются переменными экземпляра, а действия над ними - методы. Чисто объектно-ориентированный подход в Ruby чаще всего демонстрируется в коде, который производит действия над числами.
5.times{print"We *love* Ruby -- it's outrageous!"}
- Во многих языках, числа и другие примитивные типы не объекты. Ruby следует влиянию Smalltalk, который дает методы и переменные экземпляра всем его типам. Это облегчает использование Ruby, т.е. правила, применяемые к объектам, применяются для всего Ruby.
- Переменные Ruby содержат не сами объекты, а ссылки на них. Присваивание — это не передача значения, а копирование ссылки на объект. Для программиста, привычного к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными. Например:
a ="abcdefg"
b = a
b #=> "abcdefg"
a[3] ='R'
b #=> "abcRefg"
- то есть при изменении значения переменной a, неявно изменилось и значение b, так как они содержат ссылку на один объект. То есть механизм присваивания действует одинаково для всех объектов, в отличие от языков типа C, Object Pascal, где присваивание может означать как копирование значения, так и копирование ссылки на значение.
- Имеются библиотеки для создания всех типом приложений: XML, GUI привязки, сетевые протоколы, библиотеки игр и многое другое. Программисты Ruby также имеют доступ к мощной программе RubyGems3. Сопоставимый с CPAN Perl, RubyGems позволяет легко импортировать библиотеки других программистов вашу программу.
- Ruby рассматривается как гибкий язык, так как позволяет пользователям свободно изменять его части. Любые части языка могут быть удалены или переопределены, а также может что-то добавлено, по желанию. Ничто не ограничивает деятельность программиста.
- Например, сложение выполняется с помощью операции (+). Но, если бы вы предпочли использовать явное слово plus, вы могли бы добавить такой метод к встроенному в Ruby классу Numeric.
-
class
Numeric
def plus(x)
self.+(x)
end
end
y=5.plus6
# y is now equal to 11 - Операции в Ruby – это просто “подслащённый синтаксис” для методов. Вы также можете переопределить их.
- Блоки в Ruby также представляются мощным источником гибкости. Программист может присоединить к любому методу замыкание, где описывается, как должен выполняться этот метод. Замыкания называются блоками, и они стали одной из наиболее популярных возможностей для тех, кто перешёл на Ruby с других императивных языков, наподобие PHP или Visual Basic.
- Идея блоков почерпнута из функциональных языков. Matz говорил: “Замыканиями в Ruby я хотел отдать дань уважения культуре языка Lisp.”
-
search_engines=
%w[Google Yahoo MSN].mapdo|engine|
"http://www."+engine.downcase+".com"
end - В приведённом выше коде, блок описан в конструкции do…end. Метод map применяет этот блок к имеющемуся списку слов.
- В отличие от многих объектно-ориентированных языков в Ruby не поддерживается множественное наследование, но вместо него может использоваться концепция «примесей», основанная в данном языке намеханизме модулей. Модули – это собрания методов.
- Классы могут “подмешать” какой-нибудь модуль, получая все его методы. Например, любой класс, который реализует метод each, может “подмешать” модуль Enumerable, который добавит ему целую кучу методов, использующих each для организации циклов.
-
class
MyArray
includeEnumerable
end - Как правило, Ruby-сты видят в этом гораздо больше ясности, чем способ множественного наследования, которое является сложным и запутанным.
- Хотя в Ruby часто используется очень ограниченный набор знаков пунктуации и обычно отдаётся предпочтение английским ключевым словам, некоторые знаки препинания используются для украшения Ruby. Но тем не менее имеет лаконичный и простой синтаксис, частично разработанный под влиянием Ада, Eiffel и Python.
- Ruby не требует объявления переменных. Он использует простые соглашения об именах для обозначения видимости переменных.
- var может быть локальной переменной;
- @var является переменной экземпляра (член или поле объекта класса);
- @@var — переменная класса;
- $var является глобальной переменной.
- Эти префиксы переменных улучшают читабельность, позволяя программисту легко определять роль каждой переменной. Также становится ненужным использовать надоедливый префикс self. перед каждой переменной экземпляра.
- Содержит автоматический сборщик мусора.
- Стоит отметить, что Ruby является многоплатформленным языком. Он разрабатывался на Linux, но работает на многих версиях Unix, DOS, Microsoft Windows (в частности, Win32), Mac OS, BeOS, OS/2 и т. д.
-
- Список информационных источников
- Введение в RubyGems http://www.rubygarden.org/ruby?RubyGems
- Ruby http://ru.wikipedia.org/wiki/Ruby
- About Rubyhttp://www.ruby-lang.org/en/about/
- Справочник по Rubyhttp://ruby.on-page.net/
- Ruby-блоги http://www.rubygarden.org/
1это парадигма программирования, в которой выполнение программы представляет собой вычисление некоторого выражения, описывающего применение функций (в математическом понимании) ко входным данным
2язык программирования высокого уровня, в основу которого положен принцип описания (последовательности) действий, позволяющей решить поставленную задачу. Обычно процедурно-ориентированные языки задают программы как совокупности процедур или подпрограмм.
3 менеджер пакетов для языка программирования Руби который предоставляет стандартный формат для программ и библиотек Руби (в самодостаточном формате «gems»), инструменты, предназначенные для простого управления установкой «gems», и сервер для их распространения