Ruby Содержание История создания и развития | Хронология...


Языки программирования по алфавитуЯзыки программирования, появившиеся в 1995 годуRubyЯзыки веб-программированияСкриптовые языкиОбъектно-ориентированные языки программированияЯзыки с динамической типизациейСвободные компиляторы и интерпретаторыВысокоуровневые языки программирования


англ.рубиндинамическийрефлективныйинтерпретируемыйвысокоуровневый язык программированияоперационной системымногопоточностидинамической типизациейсборщиком мусорасинтаксисаPerlEiffelSmalltalkPythonLispDylanКлуКроссплатформеннаяинтерпретатораполностью свободнойЮкихиро Мацумото (Matz)языками программирования23 февраля1993 года1995 годуPerlсинтаксисасемантикиангл.объектно-ориентированногоинтерпретируемого языка программированиясценарного языкаPerlPythonинтерпретаторитераторыобработку исключенийсборку мусорабиблиотекуклассов1995 года1995 году1997 годукнигрусскомдистрибутивовLinuxМацумотопринципу «наименьшей неожиданности»программистPerlкомпьютерангл.объектно-ориентированный языкобъектамипримитивные типыметодвызов по соиспользованиювызов по ссылкеCObject Pascalприсваиваниемножественное наследованиепримесеймультипарадигменным языкомпроцедурныйобъектно-ориентированныйфункциональныйанонимные функциизамыканиярефлексиюметапрограммированиетипахдинамическая идентификация типа данныхсинглетонмассивамиблоков кодаСопрограммыитераторовклассИсключениястеке вызововинтерпретаторСиJRubyJava.NETIronRubyRubiniusSmalltalkBlue RubyABAPMacRubyMac OSmrubyUnixMicrosoft WindowsWindows CEDOSMac OS XOS/2AmigaBeOSSyllableAcorn RISC OSCygwinUnixInteractive Ruby Shellинтерфейсе командной строкитестироватьбраузерередакторамEmacsBredvimjEditnanoSciTEKateIDEбиблиотекойсетевыми протоколамисервераклиентаXMLXSLTYAMLPDFRSSCSVWSDLмодульного тестированияпрофилированияархивамикодировкамиматрицамиСибазам данныхRuby DBISQLiteOracle DatabaseODBCMySQLDB2MS SQLInterBaseADOORMFOXwxWidgetsC++QtKDETkGtkOpenGLтрёхмерную графикуWin32 APIImageMagickGraphicsMagickCSVPDFHTMLтранслитRubyGemsангл.репозиторийRAA2007 годахостингомRubyForgeLGPLRDocавтоматического извлечениядокументацииисходных кодовкомандной строки UnixNASANOAAMotorola























































Ruby
Ruby logo.svg
Класс языка
мультипарадигмальный: динамический,
объектно-ориентированный,
рефлективный,
императивный,
функциональный

Тип исполнения
интерпретируемый
Появился в
1995[1]
Автор
Юкихиро Мацумото

Расширение файлов

.rb, .rbw[2]
Выпуск
2.5.1[3] (28 марта 2018)
Система типов
строгая, динамическая (утиная)
Основные реализации:
Ruby MRI (англ.), JRuby,Rubinius
Испытал влияние
Perl, Smalltalk, Eiffel, Ada, Lisp[1], Python, Dylan, CLU, C++, Lua
Повлиял на
Groovy, Amber, CoffeeScript, Perl 6, Elixir, Crystal[источник не указан 1141 день]
Лицензия
Лицензия Ruby[4], Лицензия BSD или GNU GPL v2[5][6]
Сайт
ruby-lang.org

Ruby (англ. ruby — рубин, произносится ['ru:bɪ] — ру́би) — динамический, рефлективный, интерпретируемый высокоуровневый язык программирования[7][8]. Язык обладает независимой от операционной системы реализацией многопоточности, сильной динамической типизацией, сборщиком мусора и многими другими возможностями.mw-parser-output .ts-Переход img{margin-left:.285714em}[⇨]. По особенностям синтаксиса он близок к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Lisp, Dylan и Клу.


Кроссплатформенная реализация интерпретатора языка является полностью свободной[5].




Содержание






  • 1 История создания и развития


  • 2 Хронология выхода версий


  • 3 Философия


  • 4 Семантика


  • 5 Возможности Ruby


  • 6 Примеры


    • 6.1 Контейнеры


    • 6.2 Процедурные объекты и итераторы


    • 6.3 Классы, примеси, методы, перегрузка операторов


    • 6.4 Исключения




  • 7 Реализация


    • 7.1 Интерактивный Ruby




  • 8 Поддержка интегрированных сред разработки


  • 9 Библиотеки


    • 9.1 Стандартная библиотека


    • 9.2 Расширения




  • 10 Документация


  • 11 Использование


  • 12 Разработка мобильных приложений


  • 13 См. также


  • 14 Примечания


  • 15 Литература


  • 16 Ссылки





История создания и развития |


Создатель Ruby — Юкихиро Мацумото (Matz) — интересовался языками программирования, ещё будучи студентом, но идея о разработке нового языка появилась позже. Ruby начал разрабатываться 23 февраля 1993 года и вышел в свет в 1995 году.


Название навеяно языком Perl, многие особенности синтаксиса и семантики из которого заимствованы в Ruby: англ. pearl — «жемчужина», ruby — «рубин».


Целью разработки было создание «настоящего объектно-ориентированного», лёгкого в разработке, интерпретируемого языка программирования. Из письма автора[9]:
.mw-parser-output .ts-Начало_цитаты-quote{float:none;padding:0.25em 1em;border:thin solid #eaecf0}.mw-parser-output .ts-Начало_цитаты-source{margin:1em 0 0 5%;font-size:105%}.mw-parser-output .ts-Начало_цитаты-quote .ts-oq{margin:0 -1em -0.25em}.mw-parser-output .ts-Начало_цитаты-quote .ts-oq .NavFrame{padding:0}.mw-parser-output .ts-Начало_цитаты-quote .ts-oq .NavHead,.mw-parser-output .ts-Начало_цитаты-quote .ts-oq .NavContent{padding-left:1.052632em;padding-right:1.052632em}






Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно-ориентированного сценарного языка. Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно-ориентированный интерпретируемый язык казался многообещающим. В то время я знал Python. Но он мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно-ориентированного программирования с пятнадцатилетним стажем, очень, очень хотелось, чтобы был истинно объектно-ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было.


Тогда я решил его создать. Прошло несколько месяцев, прежде чем интерпретатор заработал. Я добавил в мой язык то, что мне хотелось — итераторы, обработку исключений, автоматическую сборку мусора. Затем я переорганизовал свойства Perl и реализовал их как библиотеку классов. В декабре 1995 года я опубликовал Ruby 0.95 в японских новостных группах. С тех пор появились сайты, списки рассылок. В списках рассылок идут жаркие обсуждения. Самый старый список сейчас содержит 14 789 писем.


.mw-parser-output .ts-Конец_цитаты-source{margin:0.357143em 2em 0 0;text-align:right}



В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году, однако наличие документации только на японском языке сдерживало его дальнейшее распространение. Лишь в 1997 году появилось описание Ruby на английском языке, а в 1998 году открылся форум «ruby-talk». Это положило начало росту известности языка в остальном мире. Издано несколько книг на различных языках, в том числе на русском. Сейчас Ruby входит в большинство дистрибутивов ОС Linux, поставляется вместе с Mac OS X, доступен пользователям других операционных систем.


24 февраля 2014 года исполнился 21 год с момента анонса языка программирования Ruby. Такое событие разработчики решили отметить выпуском патча для Ruby 2.1, который назвали Ruby 2.1.1[10].



Хронология выхода версий |


В списке ниже перечислены лишь наиболее крупные обновления[11].

















































































































Название версии Дата выхода Примечания
0.06 7 января 1994 Первая версия, указанная в Changelog’ах
1.0-961225 25 декабря 1996 Данная версия следовала сразу за версией 0.99.4-961224, выпущенной накануне. Номер после числа 1.0 — дата выпуска версии. Новые версии линейки 1.0 выходили ещё год (до 1.0-971225).
1.1 alpha0 13 августа 1997 Альфа-версии выходили вплоть до 7 октября 1997 (1.1 alpha9)
1.1b0 4 декабря 1997 Следующая версия после 1.1 alpha9. 27 февраля 1998 вышла версия 1.1b9, затем вплоть до середины 1998 выходили экспериментальные выпуски с обозначением вида 1.1b9_31 (версия 1.1b9_31 была выпущена, но в документации не отмечена).
1.1c0 17 июля 1998 Данная версия следовала за версией 1.1b9_31. Модификации этой версии выходили вплоть до 26 ноября 1998 (1.1c9).
1.1d0 (pre1.2) 16 декабря 1998 Данная версия следовала за версией 1.1c9. 22 декабря 1998 была выпущена экспериментальная версия 1.1d1, завершившая данную линейку.
1.2 (stable) 25 декабря 1998 В дальнейшем выходили модификации данной версии вплоть до версии 1.2.5, выпущенной 13 апреля 1999 года. 21 июня 1999 года была выпущена версия 1.2.6, объявленная как финальная версия 1.2 (1.2 final). 15 июля 1999 года вышла переупакованная (repacked) версия 1.2.6.
1.3 (development) 24 декабря 1998 Отдельная ветка модификаций, разрабатываемая независимо от линейки 1.2 (по аналогии с ядром ОС Linux). Первая версия была объявлена как версия для разработки (development version) и следовала за версией 1.1d1. В дальнейшем последовало множество промежуточных модификаций: ruby-1.3.1-990215 — ruby-1.3.4-990625, после чего от указания даты в номере отказались и выпустили 1.3.5 — 1.4 alpha (15 июля 1999), 1.3.6 — 1.4 alpha (28 июля 1999), 1.3.7 — 1.4 beta (6 августа 1999).
1.4.0 (stable) 13 августа 1999 Данная версия появилась через несколько дней после выхода 1.3.7 — 1.4 beta. В дальнейшем выходили новые модификации вплоть до версии 1.4.6, вышедшей 16 августа 2000 года.
1.5.0 (development) 20 ноября 1999 Данная линейка предназначалась исключительно для проверки различных нововведений при разработке. Модификации данной линейки доступны исключительно в репозитории проекта и, соответственно, сборки данной версии на официальный сервер не выкладывались.
1.6.0 (stable) 19 сентября 2000 В дальнейшем выпускались модификации этой версии вплоть до версии 1.6.8 (24 декабря 2002). 21 сентября 2005 года был выпущен патч для версии 1.6.8.
1.7.0 (development) 24 февраля 2001 Данная линейка предназначалась исключительно для проверки различных нововведений при разработке. Модификации данной линейки доступны исключительно в репозитории проекта и, соответственно, сборки данной версии на официальный сервер не выкладывались.
1.8.0 (stable) 4 августа 2003 В дальнейшем последовало большое число модификаций, которые выходят до сих пор (1 января 2011 года), например, промежуточная версия 1.8.7-p330 вышла 24 декабря 2010 года.
1.9.0 (development) 25 декабря 2007 Изначально экспериментальная ветка, созданная для практической проверки ряда нововведений.
1.9.3 (stable) 31 октября 2011 Отличия от 1.9.2 — существенны.
2.0.0 (stable) 24 февраля 2013
2.1.0 (stable) 25 декабря 2013
2.2.0 (stable) 25 декабря 2014 Поддержка Unicode 7.0, добавлена сборка мусора для объектов типа Symbol.
2.3.0 (stable)
25 декабря 2015
Добавлен новый оператор «&.» для упрощения обработки значений nil при обращении к объектам. Реализована новая экспериментальная прагма frozen-string-literal, позволяющая заморозить состояние строковых литералов в исходных текстах.
2.4.0 (stable)
25 декабря 2016
Объединение Fixnum и Bignum в Integer. Поддержка изменения регистра знаков юникода для String. Улучшения хеш-таблиц (st_table). Интерактивные сессии binding.irb. Добавлен метод Regexp#match?. Оптимизация Array#max, Array#min.
2.5.0 (stable)
25 декабря 2017
В блоках do/end теперь допустимо напрямую использовать секции rescue, else и ensure.

Определён метод yield_self для выполнение операции yield с блоком в его контексте. В отличие от tap, метод возвращает результат выполнения блока.


Поддержка измерения покрытия тестовым кодом веток и методов.


Добавлены новые методы Hash#slice и Hash#transform_keys.


Включена автоматическая загрузка библиотеки pp.rb без необходимости указания в коде 'require "pp"'.


Изменён на обратный порядок вывод трассировки и сообщения об ошибке (вначале идут вызовы, начиная со старых и заканчивая свежими, а в конце выводится сообщение об ошибке).[12]




Философия |


Мацумото, фанат объектно-ориентированного программирования, мечтал о языке, более мощном, чем Perl, и более объектно-ориентированном, чем Python. Основное назначение Ruby — создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса.


Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении.


Сам Мацумото утверждает, что целью разработки была минимизация неожиданностей при программировании для него, но после распространения языка он с удивлением узнал, что мышление программистов похоже, и для многих из них принцип «наименьшей неожиданности» совпал с его принципом.


Ruby также унаследовал идеологию языка программирования Perl в части предоставления программисту возможностей достижения одного и того же результата несколькими различными способами. Люди различны, и им для свободы необходима возможность выбирать. «Я предпочитаю обеспечить много путей, если это возможно, но поощрять или вести пользователей, чтобы выбрать лучший путь, если это возможно» [13].


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


В противовес машинно-ориентированным языкам, работающим быстрее, целью этой разработки был язык, наиболее близкий к человеку. Любая работа с компьютером выполняется людьми и для людей, и необходимо заботиться в первую очередь о затрачиваемых усилиях людей. Язык позволяет максимально быстро и просто для человека выполнить задачу, хотя, возможно, это и потребует дополнительного времени работы компьютера.


Принципы программирования и устройства языка иногда выделяются в термин «Путь Ruby» (англ. Ruby Way). Хэл Фултон выделяет[14] такие принципы, как «просто, но не слишком просто», «принцип наименьшего удивления», вторичность скорости работы программы, динамичность, простые строгие правила, выполнение которых не доходит до педантизма, потребность создавать полезные и красивые программы как причина программирования. В целом они не имеют точной формулировки и иногда этот термин используется для критики [15].



Семантика |


Ruby — полностью объектно-ориентированный язык. В нём все данные являются объектами, в отличие от многих других языков, где существуют примитивные типы. Каждая функция — метод.


Ruby использует вызов по соиспользованию (call-by-sharing), хотя в сообществе Ruby часто говорят, что он использует вызов по ссылке. Для программиста, привыкшего к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными. Например:


  a = "abcdefg"
b = a
b #=> "abcdefg"
a[3] = 'R'
b #=> "abcRefg"

то есть при изменении значения переменной a неявно изменилось и значение b, так как они содержат ссылку на один объект. То есть механизм присваивания действует одинаково для всех объектов, в отличие от языков типа C, Object Pascal, где присваивание может означать как копирование значения, так и копирование ссылки на значение.


Ruby не поддерживает множественное наследование, но вместо него есть мощный механизм примесей. Все классы (напрямую или через другие классы) выведены из класса Object, следовательно, любой объект может использовать определённые в нём методы (например, class, to_s, nil?). Процедурный стиль также поддерживается, но все глобальные процедуры неявно являются закрытыми методами класса Object.


Ruby является мультипарадигменным языком: он поддерживает процедурный стиль (определение функций и переменных вне классов), объектно-ориентированный (всё — объект), функциональный (анонимные функции, замыкания, возврат значения всеми инструкциями, возврат функцией последнего вычисленного значения). Он поддерживает рефлексию, метапрограммирование, информацию о типах переменных на стадии выполнения (см. динамическая идентификация типа данных).



Возможности Ruby |



  • Имеет лаконичный и простой синтаксис, частично разработанный под влиянием Ада, Eiffel и Python.

  • Позволяет обрабатывать исключения в стиле Java и Python.

  • Позволяет переопределять операторы, которые на самом деле являются методами.

  • Полностью объектно-ориентированный язык программирования. Все данные в Ruby являются объектами в понимании Smalltalk. Например, число «1» — это экземпляр класса Integer. Единственное исключение — управляющие конструкции, которые в Ruby, в отличие от Smalltalk, не являются объектами. Также поддерживается добавление методов в класс и даже в конкретный экземпляр во время выполнения программы.

  • Не поддерживает множественное наследование, но вместо него может использоваться концепция «примесей», основанная в данном языке на механизме модулей.

  • Содержит автоматический сборщик мусора. Он работает для всех объектов Ruby, в том числе для внешних библиотек.

  • Создавать расширения для Ruby на Си очень просто частично из-за сборщика мусора, частично из-за несложного и удобного API.

  • Поддерживает замыкания с полной привязкой к переменным.

  • Поддерживает блоки кода (код заключается в {} или doend). Блоки могут использоваться в методах или преобразовываться в замыкания.

  • Целые переменные в Ruby автоматически конвертируются между типами Fixnum (32-разрядные) и Bignum (больше 32 разрядов) в зависимости от их значения, что позволяет производить целочисленные математические расчёты со сколь угодно большой точностью.

  • Не требует предварительного объявления переменных, но для интерпретатора желательно, чтобы переменным присваивалось пустое значение nil (тогда интерпретатор знает, что идентификатор обозначает переменную, а не имя метода). Язык использует простые соглашения для обозначения области видимости. Пример: просто var — локальная переменная, @var — переменная экземпляра (член или поле объекта класса), @@var — переменная класса, $var — глобальная переменная.

  • В Ruby непосредственно в языке реализованы многие шаблоны проектирования, так, например, «одиночка» (singleton) может быть (хотя и не обязан) реализован добавлением необходимых методов к одному конкретному объекту (см. ниже).

  • Может динамически загружать расширения, если это позволяет операционная система.

  • Имеет независимую от ОС поддержку невытесняющей многопоточности.

  • Перенесён на множество платформ. Он разрабатывался на Linux, но работает на многих версиях Unix, DOS, Microsoft Windows (в частности, Win32), Mac OS, BeOS, OS/2 и т. д.



Примеры |


В Ruby есть немало оригинальных решений, редко или вообще не встречающихся в распространённых языках программирования. Можно добавлять методы не только в любые классы, но и в любые объекты. Например, вы можете добавить к некоторой строке произвольный метод.


                   # всё от символа # и до конца строки - комментарий
# = является оператором присваивания,
# символы в «"» - строка, которой можно манипулировать средствами языка
str = "Привет" # здесь создаётся переменная str, типа String
# def - ключевое слово для объявления функции
def str.bye # str. указывает, кому принадлежит метод (по умолчанию Object)
# bye - имя метода, за ним может следовать необязательный, заключённый в
# круглые скобки список параметров функции
"Пока!" # из метода возвращается последнее вычисленное значение (здесь - строка)
end # ключевым словом end заканчиваются практически все инструкции Ruby
# puts - метод,
# str.bye - обращение к методу bye объекта str
# значение, полученное из метода bye, передаётся методу puts,
# который выводит на экран информацию
puts str.bye #=> Пока!

Этот пример также демонстрирует, как в Ruby можно использовать синглетон.
В этом примере синглетоном является объект str.


Любая конструкция в Ruby возвращает значение. Например:


                   # конструкция if вычисляет выражение после него, и, если оно истинно,
# возвращает результат выражения между then и else, иначе между else и end
puts( if 5 > 3 then "Одно" else "Другое" end ) #=> Одно
# происходит присваивание значения переменной var, и операция присваивания
# возвращает значение переменной var, которая выводится на экран
puts( var = 5 ) #=> 5


Контейнеры |


Работа с массивами — одна из сильных сторон Ruby. Они автоматически изменяют размер, могут содержать любые элементы, а язык предоставляет мощные средства для их обработки.


                           # создаём массив
a = [1, 'hi', 3.14, 1, 2, [4, 5] * 3]
# => [1, "hi", 3.14, 1, 2, [4, 5, 4, 5, 4, 5]]

# обращение по индексу
a[2] # => 3.14

# «разворачиваем» все внутренние массивы, удаляем одинаковые элементы
a.flatten.uniq # => [1, 'hi', 3.14, 2, 4, 5]

# пытаемся найти индекс элемента со значением 6
a.index(6) # => nil
# неудача: возвращается значение nil

# почти для всех функций предоставляется
# аналог с тем же названием, но заканчивающийся на «!»,
# который модифицирует контейнер
a.flatten! # => [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5]

# находим индекс первого элемента со значением 4
a.index(4) # => 5


Процедурные объекты и итераторы |


В языке есть 2 эквивалентных способа записи блоков кода:


 { puts "Hello, World!" }

do puts "Hello, World!" end

Сопрограммы применяются с большинством встроенных методов:


 File.open('file.txt', 'w') {|file| # открытие файла «file.txt» для записи («w» - write)
file.puts 'Wrote some text.'
} # Конструкция устраняет неопределённость с закрытием файла: закрывается здесь при любом исходе

Следующий пример показывает использование сопрограмм и итераторов для работы с массивами, который показывает краткость записи на Ruby многих достаточно сложных действий (случайно выбираем из последовательности квадратов чисел от «0» до «10» и распечатываем вместе с индексами):


# Для работы требуется Ruby 1.9
(0..10).collect{ |v| v ** 2 }.select{ rand(2).zero? }.map.with_index { |*v| v }


Классы, примеси, методы, перегрузка операторов |


Следующий пример определяет класс с именем Person, предназначенный для хранения информации об имени и возрасте некоторой персоны.


 class Person < Object       # объявление класса начинается с ключевого слова class, за которым
# следует имя, класс Person наследуется от Object
include Comparable # подмешиваются к классу методы экземпляра
mix MyModel # подмешивание без наложения имен
extend MyModel # методы класса
# и добавляет методы <, <=, ==, >=, > и between?
# с использованием нижеопределённого
# в классе <=>
#
@variable # переменная экземпляра
@@count_obj = 0 # переменная класса для подсчёта числа созданных объектов
#
# конструктор для создания объектов с помощью new
def initialize(name, age) # name, age - параметры метода
# название переменных объекта начинается с @
@name, @age = name, age # создаём объекты
@@count_obj += 1 # увеличиваем счётчик на 1
end

def <=>(person) # переопределение оператора <=>
# (это даёт возможность использовать метод sort)
@age <=> person.age # из метода возвращается последнее вычисленное выражение,
end

def to_s # для форматированного вывода информации puts
"#{@name} (#{@age})" # конструкция #{x} в 2-х кавычках замещается в Ruby значением x
end

def inspect # похож на to_s, но используется для диагностического вывода
"<#{@@count_obj}:#{to_s}>"
end
# пример метапрограммирования: добавляет методы для доступа к
# переменным объекта
attr_reader :name, :age
end
# создаём массив объектов
group = [ Person.new("John", 20),
Person.new("Markus", 63),
Person.new("Ash", 16) ]
# => [<3:John (20)>, <3:Markus (63)>, <3:Ash (16)>]
# здесь при работе с irb автоматически вызывается метод inspect
# вызываем методы массива сортировка и разворачивание его в обратном порядке
puts group.sort.reverse # Печатает:
# Markus (63)
# John (20)
# Ash (16)
# обращаемся к функции, которая была добавлена
# автоматически (используя <=>) при включении Comparable
group[0].between?(group[2], group[1]) # => true


Исключения |


Исключения возбуждаются с помощью конструкции raise (или fail), опционально могут быть добавлены текст с сообщением, тип исключения и информация о стеке вызовов:


 raise ArgumentError, "Неверный аргумент", caller # caller - метод, возвращающий текущий стек выполнения

Обрабатываются исключения с использованием конструкции rescue. Опционально можно указать тип обрабатываемого исключения (по умолчанию обрабатываются все) и получение информации. Также можно добавлять блоки else (выполняется, если исключения отсутствовали) и ensure (выполняется в любом случае).


 begin
# ...
rescue RuntimeError => e
# обрабатываем конкретный тип ошибок
puts e # напечатаем сообщение об ошибке
rescue
# можно писать rescue => e, чтобы получить объект исключения
# обрабатываем все исключения
else
# сработает, если исключений не было
ensure
# сработает в любом случае
end


Реализация |


Для Ruby существуют несколько реализаций: официальный интерпретатор, написанный на Си, JRuby — реализация для Java, интерпретатор для платформы .NET IronRuby, Rubinius — написанная в основном на Ruby и базирующаяся на идеях Smalltalk-80 VM[16], MagLev — другая базирующаяся на Smalltalk разработка от компании Gemstone[17], Blue Ruby — реализация Ruby для виртуальной машины ABAP[18], MacRuby — реализация для Mac OS с фокусом на максимальную интеграцию с возможностями операционной системы[19], mruby — реализация для встраивания в программы[20].


Официальный интерпретатор портирован под большинство платформ, включая Unix, Microsoft Windows (в том числе Windows CE), DOS, Mac OS X, OS/2, Amiga, BeOS, Syllable, Acorn RISC OS и другие. Для Windows существует специализированный установщик RubyInstaller и есть возможность запуска под Cygwin для большей совместимости с Unix[21].



Интерактивный Ruby |


С официальной версией интерпретатора Ruby поставляется командная оболочка Ruby (Interactive Ruby Shell). Запускаемая командой irb в окне терминала (интерфейсе командной строки), она позволяет тестировать код программы очень быстро (построчно):


 $ irb
irb(main):001:0> "Hello, World"
=> "Hello, World"
irb(main):002:0> 2 ** 256 # ** - оператор возведения в степень
=> 115792089237316195423570985008687907853269984665640564039457584007913129639936

Программа irb выводит результат каждой строки после символов =>. В приведённых выше примерах для наглядности применяется аннотирование — результаты строк программы записываются в комментариях после =>.
Имитацию irb можно запустить непосредственно в браузере.


В поставке дистрибутива One-Click Installer для Windows, начиная с версии 1.8.2-15, поставляется утилита fxri, которая включает в себя справочную систему (ri) и интерактивный интерпретатор (irb).



Поддержка интегрированных сред разработки |


Базовые возможности редактирования добавляются ко многим редакторам (Emacs, Bred, vim, jEdit, nano, SciTE, Kate и др.), здесь перечислены только IDE, предоставляющие обширный набор функций.















































































































Название
Лицензия
Платформы
Ссылка

ActiveState Komodo IDE

Проприетарная
Linux, Mac OS X, Solaris, Windows

[1]

Arachno Ruby IDE

Проприетарная
Win 2000/XP, Linux

[2]

Aptana (RadRails + RDT)

GPL, APL + CPL
Java

[3]

EasyEclipse for Ruby and Rails

Win 2000/XP, Linux, Mac OS X

[4]

Eclipse + RDT

EPL + CPL
Java

[5]
Embarcadero TurboRuby

Проприетарная
Windows, OS X, Linux

[6]

FreeRIDE
Ruby License
Windows, OS X, POSIX

[7]

IntelliJ IDEA + Ruby plugin

Проприетарная (на IDEA), Apache 2.0 (на сам plugin)
Java, JRuby

Ruby plugin

KDevelop

GNU GPL
Linux

[8]

Komodo Edit

Проприетарная
Windows, Mac, Linux

[9]

Mondrian Ruby IDE разработка прекращена, доступна старая версия

MIT
Ruby (+ FOX toolkit)

[10]

NetBeans IDE (версия 6.9.1 и более ранние)

CDDL
Java

[11]

RDE
Ruby License
Windows

[12]

Ruby in steel

Проприетарная
Visual Studio 2005

[13]

RubyMine

Проприетарная (на базе IDEA)
Java

[14]

Visual Studio (реализация IronRuby)

Проприетарная
Windows

[15]

Xcode 3.1

Проприетарная

Mac OS X 10.5

[16]


Библиотеки |



Стандартная библиотека |


Кроме мощных возможностей, встроенных в язык, Ruby поставляется с большой стандартной библиотекой.
Это, прежде всего, библиотеки для работы с различными сетевыми протоколами на стороне сервера и клиента, средства для работы с различными форматами представления данных (XML, XSLT, YAML, PDF, RSS, CSV, WSDL).
Кроме встроенных в язык средств отладки, с Ruby поставляются библиотеки для модульного тестирования, журналирования, профилирования. Также есть библиотеки для работы с архивами, датами, кодировками, матрицами, средства для системного администрирования, распределённых вычислений, поддержки многопоточности и т. д.




Расширения |


В языке Ruby осуществлён простой и удобный механизм для расширения языка с помощью библиотек, написанных на Си, позволяющий легко разрабатывать дополнительные библиотеки[23][24].


Для унифицированного доступа к базам данных разработана библиотека Ruby DBI (поддерживает SQLite, Oracle Database, ODBC, MySQL, DB2, MS SQL, InterBase, ADO и др.). Также существуют библиотеки для конкретных баз данных, поддерживающих специфические для них операции. Для реализации ORM существуют несколько библиотек, такие, как ActiveRecord, Mongoid, DataMapper или Sequel.


Среди графических библиотек — FxRuby (интерфейс к графической библиотеке FOX), графический пакет разработчика wxRuby (интерфейс к кроссплатформенному пакету wxWidgets на C++), QtRuby/Korundum (привязка к Qt и KDE соответственно), графические библиотеки для работы с Tk[25] и Gtk.
Также реализована библиотека для работы с OpenGL, позволяющая программировать трёхмерную графику.


Win32utils — позволяет обращаться к специфическим возможностям Win32 API.


Rmagick — библиотека для работы с изображениями, поддерживающая более 90 форматов (основана на ImageMagick и GraphicsMagick).


Библиотека Ruport (Ruby reports) предназначена для лёгкой реализации отчётов и создания диаграмм на основе данных из БД или прямо из текстовых файлов CSV. Причём результаты можно сохранять в форматах PDF, HTML, CSV и TXT.


RuTils — обработчик русского текста на Ruby. Позволяет реализовать сумму прописью и выбор числительного. Например, 231.propisju(2) => «двести тридцать одна» или 341.propisju_items(1, «чемодан», «чемодана», «чемоданов») => «триста сорок один чемодан». А также перевод в транслит и работу с датами.


Для управления библиотеками и программами Ruby в виде самодостаточных пакетов предназначена система управления пакетами RubyGems (англ. gems, gem — драгоценный камень).


Существует всемирный репозиторий программного обеспечения Ruby RAA (Ruby Application Archive).
Репозиторий по состоянию на сентябрь 2007 года насчитывает более полутора тысяч проектов.
Большое количество программного обеспечения, написанного на Ruby, пользуются хостингом проекта RubyForge,
созданного специально с этой целью. 15 мая 2014 года RubyForge закрыт, архив программ при этом останется доступен для скачивания.




FreeRIDE — IDE для Ruby, реализованная с использованием библиотеки FxRuby.


Большинство расширений распространяются под свободными лицензиями (LGPL, лицензия Ruby) и могут быть использованы в любом проекте практически без ограничений.



Документация |


Система RDoc предназначена для автоматического извлечения документации из исходных кодов и программ на Ruby
и её дальнейшей обработки.
Является стандартом де-факто для подготовки документации по программному обеспечению, написанному на Ruby.


Для доступа к документации Ruby из командной строки Unix разработана программа ri.
С её помощью можно получить информацию о модулях, классах и методах Ruby.



Использование |


Ruby используется в NASA, NOAA (национальная администрация по океану и атмосфере), Motorola и других крупных организациях[26]. Следующие программы используют Ruby как скриптовый язык для расширения возможностей программы или написаны на нём (частично или полностью).




  • RPG Maker (RPG Maker XP) — RGSS (Ruby Game Scripting System)

  • Amarok

  • SketchUp


  • Inkscape — скрипты для обработки векторных изображений

  • Metasploit


  • Chef, Puppet — системы управления конфигурациями


  • Redmine — багтрекер

  • XChat

  • Для KOffice разрабатывается проект Kross — механизм для поддержки скриптов, который включает Ruby.


  • WATIR (англ. Web Application Testing in Ruby) — свободное средство для автоматического тестирования веб-приложений в браузере.

  • Toptal используется Ruby, чтобы создать архитектуру microservices[27]

  • Vagrant

  • Travis CI

  • Github



Разработка мобильных приложений |



  • Titanium Studio — среда разработки мобильных приложений на HTML5, CSS3, Javascript, Ruby, Rails, Python, PHP

  • Ruboto — среда разработки Android приложений на Ruby

  • RubyMotion — среда разработки iOS приложений на Ruby

  • MobiRuby — инструмент разработки Android и iOS приложений на Ruby


  • Rhodes (англ.) — фреймворк для разработки Enteprise Mobility приложений для смартфонов и устройств Motorola[28]



См. также |


.mw-parser-output .ts-Родственные_проекты{background:#f8f9fa;border:1px solid #a2a9b1;clear:right;float:right;font-size:90%;margin:0 0 1em 1em;padding:.5em .75em}.mw-parser-output .ts-Родственные_проекты th,.mw-parser-output .ts-Родственные_проекты td{padding:.25em 0;vertical-align:middle}.mw-parser-output .ts-Родственные_проекты td{padding-left:.5em}























  • Interactive Ruby Shell


  • Ruby on Rails — фреймворк для создания веб-приложений


  • RubyGems — менеджер пакетов для Ruby


  • IronRuby — реализация языка программирования Ruby на платформе Microsoft .NET

  • Сравнение языков программирования



Примечания |





  1. 12 О Ruby.


  2. Расширения файлов Ruby:
    .rb — исходный код.
    .rbw — исходный код для выполнения программ с графическим интерфейсом в Windows, файлы с таким расширением будут выполнены интерпретатором rubyw без запуска консоли.



  3. Ruby 2.5.1 Released (неопр.). www.ruby-lang.org. Проверено 30 марта 2018.


  4. https://www.ruby-lang.org/en/about/license.txt


  5. 12 Лицензия Ruby (англ.) (TXT). Проверено 14 августа 2006. Архивировано 22 августа 2011 года. Перевод лицензии Ruby в Викитеке.


  6. COPYING.txt на официальном сайте Ruby.


  7. Е. А. Роганов, Н. А. Роганова. Программирование на языке Ruby. Учебное пособие (PDF, 425 Кбайт). — М.: МГИУ, 2008. — 56 с. — ISBN 978-5-2760-1495-1.


  8. Брюс Тэйт Практическое использование Rails: Часть 4. Стратегии тестирования в Ruby on Rails. 01.07.2008.


  9. Письмо Юкихиро Мацумото в рассылку ruby-talk ruby-talk:00382 от 4 июня 1999 года. Есть перевод всего письма на русский


  10. Ruby 2.1.1 is released


  11. Информация взята из сопроводительных текстовых файлов Changelog. Документы различных версий различаются между собой, порой учитывая лишь версии, относящиеся к линейке, сопровождаемой данным документом.


  12. Ruby 2.5.0 Released (неопр.). www.ruby-lang.org (25 Декабря 2017).


  13. Интервью Юкихиро Мацумото (англ.)


  14. Хэл Фултон. Программирование на языке Ruby. — 2-е изд. — М.: ДМК Пресс, 2007. — С. 24—27.


  15. 5 things I hate about Ruby (англ.) (25 октября 2005). Проверено 30 июля 2007. Архивировано 22 августа 2011 года.


  16. Rubinius Home


  17. MagLev /măg-lĕv/


  18. Blue Ruby — New Exploratory Research


  19. MacRuby


  20. mruby github repository


  21. Cygwin and Ruby Windows


  22. Из-за слабой документированности Ruby в ранних версиях информация получена напрямую из исходников (helium.ruby-lang.org/ftp://ruby (англ.) (недоступная ссылка — история ). Проверено 16 августа 2006.). Указаны только стабильные (чётные) версии.


  23. Thomas, Dave. Extending Ruby (англ.) (недоступная ссылка). Programming Ruby — The Pragmatic Programmer’s Guide. Addison Wesley Longman, Inc. Проверено 30 октября 2006. Архивировано 19 марта 2006 года.


  24. Rooney, Garrett. Extending Ruby with C (англ.). O’Reilly Media (18 ноября 2004). Проверено 30 октября 2006. Архивировано 22 августа 2011 года.


  25. Ruby/Tk Tutorial


  26. Хэл Фултон. Программирование на языке Ruby. — 2-е изд. — М.: ДМК Пресс, 2007. — С. 21.


  27. How to Set up a Microservices Architecture in Ruby: A Step by Step Guide, Toptal (March 2, 2017).


  28. Rhodes на сайте Motorola




Литература |


На русском языке


  • Д. Флэнаган, Ю. Мацумото. Язык программирования Ruby = The Ruby Programming Language / пер. с англ. Н. Вильчинский. — 1-е изд. — СПб.: Питер, 2011. — 496 с. — (Бестселлеры O’Reilly). — ISBN 978-5-459-00562-2.

  • Х. Фултон. Программирование на языке Ruby = The Ruby Way / пер. с англ. А. Слинкин. — 2-е изд. — М.: ДМК Пресс, 2007. — 688 с. — (Языки программирования). — ISBN 5-94074-357-9.

  • М. Фитцджеральд. Изучаем Ruby = Learning Ruby / пер. с англ. Н. Гаврилова. — 1-е изд. — СПб.: БХВ-Петербург, 2008. — 336 с. — ISBN 978-5-9775-0225-2.

  • Д. Х. Спольски. Лучшие примеры разработки ПО = The Best Software Writing / пер. с англ. Е. Матвеев. — СПб.: Питер, 2007. — 208 с. — (Библиотека программиста). — ISBN 5-469-01291-3.


В электронном формате:




  • Ю. Мацумото Ruby — Руководство пользователя = Ruby User’s Guide / пер. на русский Александр Мячков на OpenNET — 2005—2008.


  • К. Пайн Учись программировать = Learn to Program / пер. на русский Михаил Шохирев — 2003—2009.


  • Е. Охотников Ruby — новые грани. Из журнала RSDN Magazine № 4/2006.

  • Е. А. Роганов, Н. А. Роганова. Программирование на языке Ruby. Учебное пособие (PDF, 425 Кбайт, источник). — М.: МГИУ, 2008. — 56 с. — ISBN 978-5-2760-1495-1.


  • Образовательный ресурс, посвящённый Ruby, на сайте МФТИ.


На английском языке


  • David Thomas, Chad Fowler, Andrew Hunt. Programming Ruby: The Pragmatic Programmer’s Guide, Second Edition. — Boston: Addison-Wesley, 2004. — 864 с. — ISBN 978-0-9745-1405-5.

  • Dave Thomas, Chad Fowler, Andy Hunt. Programming Ruby 1.9: The Pragmatic Programmers’ Guide. — Dallas: Pragmatic Bookshelf, 2009. — 944 с. — ISBN 978-1-93435-608-1.

  • Yukihiro Matsumoto. Ruby in a Nutshell. — Sebastopol, CA: O’Reilly, 2001. — 224 с. — ISBN 978-0-596-00214-5.

  • Peter Cooper. Beginning Ruby. — 3-изд. — Нью-Йорк: Apress, 2016. — 476 с. — ISBN 978-1484212790. — ISBN 1484212797.

  • Malay Mandal. Ruby Recipes: A Problem-Solution Approach. — 1-е изд. — Apress, 2016. — 226 с. — ISBN 978-1484224687. — ISBN 148422468X.

  • Leonard Richardson, Lucas Carlson. Ruby Cookbook: Recipes for Object-Oriented Scripting. — 2-е изд. — Sebastopol, CA: O’Reilly_Media, 2015. — 992 с. — ISBN 978-1449373719. — ISBN 1449373712.


В электронном формате:




  • Programming Ruby. The Pragmatic Programmer’s Guide — часто упоминаемая книга по Ruby, охватывающая основные стороны программирования на этом языке.

  • The Little Book Of Ruby. 2006—2008 (PDF).



Ссылки |




  • Официальный сайт Ruby(англ.)


  • Репозиторий пакетов .gem для менеджера пакетов RubyGems.



  • Ruby в каталоге ссылок Open Directory Project (dmoz)









Popular posts from this blog

Щит и меч (фильм) Содержание Названия серий | Сюжет |...

is 'sed' thread safeWhat should someone know about using Python scripts in the shell?Nexenta bash script uses...

Meter-Bus Содержание Параметры шины | Стандартизация |...