20-10-2023
Класс языка: |
мультипарадигмальный: динамический, |
---|---|
Тип исполнения: | |
Появился в: |
1995[1] |
Автор(ы): | |
Расширение файлов: |
.rb, .rbw[2] |
Релиз: |
1.9.3-p194 (20 апреля 2012[3]) |
Типизация данных: | |
Основные реализации: | |
Испытал влияние: |
Perl, Smalltalk, Eiffel, Ada, Lisp[1], Python, Dylan, CLU (англ.), C++ |
Повлиял на: | |
Лицензия |
лицензия Ruby[4] или GNU GPL v2[5][6] |
Сайт: |
www.ruby-lang.org |
Ruby (англ. ruby — рубин, произносится ['ru:bɪ] — руби) — динамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного[7][8] объектно-ориентированного программирования. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Ruby близок по особенностям синтаксиса к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Lisp, Dylan и CLU (англ.).
Кроссплатформенная реализация интерпретатора языка является полностью свободной[5].
Содержание |
Создатель Ruby — Юкихиро Мацумото (Matz) — интересовался языками программирования, ещё будучи студентом, но идея о разработке нового языка появилась позже. Ruby начал разрабатываться 23 февраля 1993 года и вышел в свет в 1995 году.
Название навеяно языком Perl, многие особенности синтаксиса и семантики из которого заимствованы в Ruby: англ. pearl — «жемчужина», ruby — «рубин».
Целью разработки было создание «настоящего объектно-ориентированного», лёгкого в разработке, интерпретируемого языка программирования. Из письма автора[9]:
Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно-ориентированного сценарного языка. Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно-ориентированный интерпретируемый язык казался многообещающим. В то время я знал Python. Но он мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно-ориентированного программирования с пятнадцатилетним стажем, очень, очень хотелось, чтобы был истинно объектно-ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было.
Тогда я решил его создать. Прошло несколько месяцев, прежде чем интерпретатор заработал. Я добавил в мой язык то, что мне хотелось — итераторы, обработку исключений, автоматическую сборку мусора. Затем я переорганизовал свойства Perl и реализовал их как библиотеку классов. В декабре 1995 года я опубликовал Ruby 0.95 в японских новостных группах. С тех пор появились сайты, списки рассылок. В списках рассылок идут жаркие обсуждения. Самый старый список сейчас содержит 14 789 писем.
В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году, однако наличие документации только на японском языке сдерживало его дальнейшее распространение. Лишь в 1997 году появилось описание Ruby на английском языке, а в 1998 году открылся форум «ruby-talk». Это положило начало росту известности языка в остальном мире. Издано несколько книг на различных языках, в том числе на русском. Сейчас Ruby входит в большинство дистрибутивов ОС Linux, доступен пользователям других операционных систем.
В списке ниже перечислены лишь наиболее крупные обновления[10].
Название версии | Дата выхода | Примечания |
---|---|---|
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 | Последняя ветка на данный момент (10 сентября 2012 года). Соответственно, модификации также выходят до сих пор. Отличия от 1.9.2 — существенны. |
Мацумото, фанат объектно-ориентированного программирования, мечтал о языке, более мощном, чем Perl, и более объектно-ориентированном, чем Python. Основное назначение Ruby — создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса.
Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении. Сам Мацумото утверждает, что целью разработки была минимизация неожиданностей при программировании для него, но после распространения языка он с удивлением узнал, что мышление программистов похоже, и для многих из них принцип «наименьшей неожиданности» совпал с его принципом.
Ruby также унаследовал идеологию языка программирования Perl в части предоставления программисту возможностей достижения одного и того же результата несколькими различными способами. Люди различны, и им для свободы необходима возможность выбирать. «Я предпочитаю обеспечить много путей, если это возможно, но поощрять или вести пользователей, чтобы выбрать лучший путь, если это возможно» [11].
Одной из основных целей разработки было освобождение программистов от рутинной работы, которую компьютер может выполнять быстрее и качественнее. Особое внимание, в частности, уделялось будничным рутинным занятиям (обработка текстов, администрирование), и для них язык настроен особенно хорошо.
В противовес машинно-ориентированным языкам, работающим быстрее, целью этой разработки был язык, наиболее близкий к человеку. Любая работа с компьютером выполняется людьми и для людей, и необходимо заботиться в первую очередь о затрачиваемых усилиях людей. Язык позволяет максимально быстро и просто для человека выполнить задачу, хотя, возможно, это и потребует дополнительного времени работы компьютера.
Принципы программирования и дизайна языка иногда выделяются в термин «Путь Ruby» (англ. Ruby Way). Хэл Фултон выделяет[12] такие принципы, как «просто, но не слишком просто», «принцип наименьшего удивления», вторичность скорости работы программы, динамичность, простые строгие правила, выполнение которых не доходит до педантизма, потребность создавать полезные и красивые программы как причина программирования. В целом они не имеют точной формулировки и иногда этот термин используется для критики [13].
Ruby — полностью объектно-ориентированный язык. В нём все данные являются объектами, в отличие от многих других языков, где существуют примитивные типы. Каждая функция — метод.
Переменные Ruby передаются по ссылке. Для программиста, привычного к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными. Например:
a = "abcdefg" b = a b #=> "abcdefg" a[3] = 'R' b #=> "abcRefg"
то есть при изменении значения переменной a, неявно изменилось и значение b, так как они содержат ссылку на один объект. То есть механизм присваивания действует одинаково для всех объектов, в отличие от языков типа C, Object Pascal, где присваивание может означать как копирование значения, так и копирование ссылки на значение.
Ruby не поддерживает Object, следовательно, любой объект может использовать определённые в нём методы (например, Object
.
Ruby является мультипарадигменным языком: он поддерживает процедурный стиль (определение функций и переменных вне классов), объектно-ориентированный (всё — объект), функциональный (анонимные функции, замыкания, возврат значения всеми инструкциями, возврат функцией последнего вычисленного значения). Он поддерживает отражение, метапрограммирование, информацию о типах переменных на стадии выполнения (см. динамическая идентификация типа данных).
{
… }
или do
… end
). Блоки могут использоваться в методах или преобразовываться в замыкания.var
— локальная переменная, @var
— переменная экземпляра (член или поле объекта класса), @@var
— переменная класса, $var
— глобальная переменная.В 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 наследуетcя от Object include Comparable # подмешивается к классу методы экземпляра mix MyModel # подмешивание без наложения имен extend MyModel # методы класса # и добавляет методы <, <=, ==, >=, > и between? # с использованием нижеопределённого # в классе <=> # @variable # переменная экземпляра @@count_obj = 0 # переменная класса для подсчёта числа созданных объектов # # конструктор для создания объектов с помощью new def initialize(name, age) # name, age - параметры метода # название переменных объекта начинается с @ @name, @age = name, age # создаём объекты и увеличиваем счётчик на 1 @@count_obj += 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[14], MagLev — другая базирующаяся на Smalltalk разработка от компании Gemstone[15], Blue Ruby — реализация Ruby для виртуальной машины ABAP[16], MacRuby — реализация для Mac OS с фокусом на максимальную интеграцию с возможностями операционной системы[17], mruby — реализация для встраивания в программы[18].
Официальный интерпретатор портирован под большинство платформ, включая Unix, Microsoft Windows (в том числе Windows CE), DOS, Mac OS X, OS/2, Amiga, BeOS, Syllable, Acorn RISC OS и другие.
Для Windows существует RubyInstaller for Windows и есть возможность запуска под Cygwin для большей совместимости с Unix[19]
С официальной версией интерпретатора 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, vim, jEdit, nano, SciTE, Kate и др.), здесь перечислены только IDE, то есть предоставляющие обширный набор функций.
Название | Лицензия | Платформы | Ссылка |
---|---|---|---|
ActiveState Komodo IDE | Проприетарная | Linux, Mac OS X, Solaris, Windows | http://activestate.com/Products/komodo_ide/ |
Arachno Ruby IDE | Проприетарная | Win 2000/XP, Linux | http://www.ruby-ide.com |
Aptana (RadRails + RDT) | GPL, APL + CPL | Java | http://www.aptana.com/ |
EasyEclipse for Ruby and Rails | Win 2000/XP, Linux, Mac OS X | http://www.easyeclipse.org/site/distributions/ruby-rails.html | |
Eclipse + RDT | EPL + CPL | Java | RDT Homepage |
Embarcadero TurboRuby | Проприетарная | Windows, OS X, Linux | http://www.embarcadero.com/products/turboruby |
FreeRIDE | Ruby License | Windows, OS X, POSIX | http://rubyforge.org/projects/freeride/ |
IntelliJ IDEA + Ruby plugin | Проприетарная (на IDEA), Apache 2.0 (на сам plugin) | Java, JRuby | Ruby plugin |
KDevelop | GNU GPL | Linux | http://kdevelop.org/ |
Komodo IDE 6 | Проприетарная | Windows, Mac, Linux | http://www.activestate.com/komodo-ide |
Mondrian Ruby IDE разработка прекращена, доступна старая версия | MIT | Ruby (+ FOX toolkit) | http://www.mondrian-ide.com/ |
NetBeans IDE (версия 6.9.1 и более ранние) | CDDL | Java | http://www.netbeans.org/features/ruby/ |
RDE | Ruby License | Windows | http://homepage2.nifty.com/sakazuki/rde_en/ |
Ruby in steel | Проприетарная | Visual Studio 2005 | http://www.sapphiresteel.com/ |
RubyMine | Проприетарная (на базе IDEA) | Java | http://www.jetbrains.com/ruby |
Visual Studio (реализация IronRuby) | Проприетарная | Windows | http://www.microsoft.com/visualstudio/en-us/products |
Xcode 3.1 | Проприетарная | Mac OS X 10.5 | http://developer.apple.com/tools/xcode/ |
Кроме мощных возможностей, встроенных в язык, Ruby поставляется с большой стандартной библиотекой. Это, прежде всего, библиотеки для работы с различными сетевыми протоколами на стороне сервера и клиента, средства для работы с различными форматами представления данных (XML, XSLT, YAML, PDF, RSS, CSV, WSDL). Кроме встроенных в язык средств отладки, с Ruby поставляются библиотеки для юнит-тестирования, профилирования. Также есть библиотеки для работы с архивами, датами, кодировками, матрицами, средства для системного администрирования, распределённых вычислений, поддержки многопоточности и т. д.
Название | Описание | Версия[20] |
---|---|---|
|
Вершина иерархии классов Ruby. | 1.0 |
|
Динамический массив для хранения произвольных объектов, индексируемый с 0. | 1.0 |
|
Объекты сохраняют контекст выполнения некоторого участка кода (значение переменных, методов и т. д.). Может позже использоваться для выполнения вычислений в этом контексте. | 1.2 |
|
Объект сохраняет адрес возврата и контекст выполнения, позволяя выполнить переход в точку создания из любого места программы (т. н. нелокальный переход). | 1.4 |
|
Обёртка вокруг указателя Си, используется в основном при написании расширений. | 1.0 |
|
Директория файловой системы. Предоставляет возможности для просмотра директорий и их атрибутов. | 1.0 |
|
Базовый класс всех исключений (образует вершину иерархии более чем 30 исключений). | 1.0 |
|
Глобальная переменная false является единственной переменной этого класса и представляет логическую ложь в булевских выражениях. |
1.0 |
|
Коллекция пар ключ-значение; порядок обхода не зависит от порядка вставки. | 1.0 |
|
Базовые возможности ввода-вывода. | 1.0 |
|
Класс для доступа к файлам. | 1.0 |
|
Результат применения регулярного выражения. Обычно используется не напрямую, а через специальные переменные $& , $' , $` , $1 , $2 и т. д. |
1.0 |
|
Метод, ассоциированный с конкретным объектом (не с классом). Может использоваться для вызова этого метода без наличия объекта. | 1.2 |
|
Класс модулей. | 1.0 |
|
Класс классов; классы в Ruby являются объектами, а Class является классом этих объектов (метаклассом). | 1.0 |
|
Единственным экземпляром класса является переменная nil . Только nil и false представляют ложь в программах. Любой другой объект представляет собой истину. |
1.0 |
|
Абстрактный класс чисел. | 1.0 |
|
Абстрактный класс целых чисел. Может трактоваться как бесконечная битовая строка для битовых операций. | 1.0 |
|
Целые числа ограниченные только количеством памяти. Конвертируется в Fixnum автоматически, если значение может быть размещено в них и наоборот. |
1.0 |
|
Целые числа, которые могут быть размещены в машинном слове (32 бита для большинства машин). Если результат операции выходит за рамки, автоматически преобразуется в Bignum. | 1.0 |
|
Числа с плавающей запятой. | 1.0 |
|
Блок кода со связанным с ним контекстом (замыкание), который может выполняться неоднократно в других контекстах. | 1.0 |
|
Интервал: множество значений, заданных с начальным и конечным элементами. | 1.0 |
|
Регулярное выражение. | 1.0 |
|
Строка байт произвольной длины. | 1.0 |
|
Предоставляет простой способ связывания атрибутов вместе без написания кода класса напрямую; генерирует специальные классы, содержащие множество переменных и методов доступа. | 1.0 |
|
Представляет имя и создаётся при использовании синтаксиса :name . Все объекты с данным именем созданные в программе — ссылки на один объект. |
1.6 |
|
Инкапсулирует информацию о потоке, включая основной поток скрипта Ruby. | 1.0 |
|
Предоставляет способ управления группой потоков. Поток может принадлежать только к одной ThreadGroup . Добавление потока к новой группе удаляет его из любой предыдущей. |
1.6 |
|
Дата и время. | 1.0 |
|
Глобальная переменная true является единственной переменной класса и представляет логическую истину в булевских выражениях. |
1.0 |
|
Метод, не связанный с конкретным объектом. Может привязываться к объекту и вызываться как Method . |
1.6 |
В языке Ruby реализован простой и удобный механизм для расширения языка с помощью библиотек, написанных на Си, позволяющий легко разрабатывать дополнительные библиотеки.[21][22]
Для унифицированного доступа к Ruby DBI (поддерживает ActiveRecord, Mongoid, DataMapper или Sequel.
Из графических библиотек следует отметить FxRuby — интерфейс к графической библиотеке wxRuby (интерфейс к кроссплатформенному пакету QtRuby/Korundum — привязка к Qt и KDE соответственно, графические библиотеки для работы с Tk и 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 — драгоценный камень).
Существует всемирный [1]. Репозиторий по состоянию на сентябрь [2], созданного специально с этой целью.
Большинство расширений распространяются под свободными лицензиями (лицензия Ruby) и могут быть использованы в любом проекте практически без ограничений.
Система RDoc предназначена для автоматического извлечения документации из исходных кодов и программ на Ruby и её дальнейшей обработки. Является стандартом де-факто для подготовки документации по программному обеспечению, написанному на Ruby.
Для доступа к документации Ruby из http://www.ruby-doc.org.
Ruby используется в NASA, NOAA (национальная администрация по океану и атмосфере), Motorola и других крупных организациях.[23] Следующие программы используют Ruby как скриптовый язык для расширения возможностей программы или написаны на нём (частично или полностью).
Портал «Свободное программное обеспечение» | |
Ruby в Викиучебнике? | |
Ruby в Викитеке? | |
В электронном формате:
В электронном формате:
Ruby (категория) | |
---|---|
IDE |
ActiveState Komodo • Eric • RubyForge • RadRails • RubyMine |
Реализации | |
Приложения | |
Библиотеки и фреймворки |
Adhearsion • Camping • eRuby (RHTML) • Hobo • Merb • Nitro • RubyCocoa • Ruby on Rails • Ramaze • Sinatra • Padrino • QtRuby |
Серверное ПО | |
Прочее |
Основные языки программирования (сравнение • IDE • история • хронология) | |
---|---|
Используемые в разработке |
Ада • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET) |
Академические | |
IEC 61131-3 |
Instruction List • ST • FBD • Ladder Diagram (LD) • SFC |
Прочие | |
Эзотерические | |
Визуальные |
Ruby.