Библиографическое описание:

Сапего Ю., Николаев А. Б. Обзор возможностей языка программирования Ruby // Молодой ученый. — 2011. — №4. Т.3. — С. 53-55.

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, так как они содержат ссылку на один объект. То есть механизм присваивания действует одинаково для всех объектов, в отличие от языков типа CObject 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, но работает на многих версиях UnixDOSMicrosoft Windows (в частности, Win32), Mac OSBeOSOS/2 и т. д.

Список информационных источников
  1. Введение в RubyGems http://www.rubygarden.org/ruby?RubyGems

  2. Ruby http://ru.wikipedia.org/wiki/Ruby

  3. About Rubyhttp://www.ruby-lang.org/en/about/

  4. Справочник по Rubyhttp://ruby.on-page.net/

  5. Ruby-блоги http://www.rubygarden.org/

1это парадигма программирования, в которой выполнение программы представляет собой вычисление некоторого выражения, описывающего применение функций (в математическом понимании) ко входным данным

2язык программирования высокого уровня, в основу которого положен принцип описания (последовательности) действий, позволяющей решить поставленную задачу. Обычно процедурно-ориентированные языки задают программы как совокупности процедур или подпрограмм.


3 менеджер пакетов для языка программирования Руби который предоставляет стандартный формат для программ и библиотек Руби (в самодостаточном формате «gems»), инструменты, предназначенные для простого управления установкой «gems», и сервер для их распространения

Обсуждение

Социальные комментарии Cackle