Ruby
| Файл:Ruby-logo-R.svg | |
| Семантика: | |
|---|---|
| Тип исполнения: | |
| Появился в: |
1995 г. |
| Автор(ы): | |
| Последняя версия: |
1.9.1 |
| Типизация данных: |
динамическая с явным приведением типов |
| Основные реализации: | |
| Испытал влияние: | |
| Повлиял на: | |
Ruby (англ. «Рубин», читается ['ɹu:bɪ]) — динамический, рефлективный, интерпретируемый язык высокого уровня для быстрого и удобного объектно-ориентированного программирования. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Ruby близок по особенностям синтаксиса к языкам Perl и Эйфель, по объектно-ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Лисп, Dylan и CLU.
Кроссплатформенная реализация интерпретатора языка является полностью свободной.[1]
История создания и развития
Создатель Ruby — Юкихиро Мацумото (Matz) — интересовался языками программирования, ещё будучи студентом, но идея о разработке нового языка появилась позже. Ruby начал разрабатываться 24 февраля 1993 года и вышел в свет в 1995 году.
Название навеяно языком Перл, многие особенности синтаксиса и семантики из которого заимствовано в Ruby: англ. pearl — «жемчужина», англ. ruby — «рубин».
Целью разработки было создание «настоящего объектно-ориентированного», лёгкого в разработке, интерпретируемого языка программирования. Из письма автора[2]:
Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно-ориентированного сценарного языка. Я знал Перл (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно-ориентированный интерпретируемый язык казался многообещающим. В то время я знал Python. Но он мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно-ориентированного программирования с пятнадцатилетним стажем, очень, очень хотелось, чтобы был истинно объектно-ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было.
Тогда я решил его создать. Прошло несколько месяцев, прежде чем интерпретатор заработал. Я добавил в мой язык то, что мне хотелось — итераторы, обработку исключений, автоматическую сборку мусора. Затем я переорганизовал свойства Перла и реализовал их как библиотеку классов. В декабре 1995 года я опубликовал Ruby 0.95 в японских новостных группах. С тех пор появились сайты, списки рассылок. В списках рассылок идут жаркие обсуждения. Самый старый, ruby-list, сейчас содержит 14789 писем.
В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году, однако наличие документации только на японском языке сдерживало его дальнейшее распространение. Лишь в 1997 году появилось описание Ruby на английском языке, а в 1998 году открылся форум «ruby-talk». Это положило начало росту известности языка в остальном мире. Издано несколько книг на различных языках, в том числе на русском. Сейчас Ruby входит в большинство дистрибутивов ОС GNU/Linux, доступен пользователям других операционных систем.
Философия
Мацумото, фанат объектно-ориентированного программирования, мечтал о языке, более мощном, чем Перл, и более объектно-ориентированном, чем Python. Основное назначение Ruby — создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса.
Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако, в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении. Сам Мацумото утверждает, что целью разработки была минимизация неожиданностей при программировании для него, но после распространения языка он с удивлением узнал, что мышление программистов похоже и для многих их принцип «наименьшей неожиданности» совпал с его принципом.
Ruby также унаследовал идеологию языка программирования Перл в части предоставления программисту возможностей достижения одного и того же результата несколькими различными способами. Люди различны, и им для свободы необходима возможность выбирать. «Я предпочитаю обеспечить много путей, если это возможно, но поощрять или вести пользователей, чтобы выбрать лучший путь, если это возможно».[3]
Одной из основных целей разработки было освобождение программистов от рутинной работы, которую компьютер может выполнять быстрее и качественнее. Особое внимание, в частности, уделялось будничным рутинным занятиям (обработка текстов, администрирование), и для них язык настроен особенно хорошо.
В противовес машинно-ориентированным языкам, работающим быстрее, целью этой разработки был язык, наиболее близкий к человеку. Любая работа с компьютером выполняется людьми и для людей, и необходимо заботиться в первую очередь о затрачиваемых усилиях людей. Язык позволяет максимально быстро и просто для человека выполнить задачу, хотя, возможно, это и потребует дополнительного времени работы компьютера.
Принципы программирования и дизайна языка иногда выделяются в термин «Путь Руби» (англ. Ruby Way). Хэл Фултон выделяет[4] такие принципы, как «просто, но не слишком просто», «принцип наименьшего удивления», вторичность скорости работы программы, динамичность, простые строгие правила, выполнение которых не доходит до педантизма, потребность создавать полезные и красивые программы как причина программирования. В целом они не имеют точной формулировки и иногда этот термин используется для критики.[5]
Семантика
Ruby — полностью объектно-ориентированный язык. В нём все данные являются объектами, в отличие от многих других языков, где существуют примитивные типы. Каждая функция — метод.
Переменные Ruby содержат не сами объекты, а ссылки на них. Присваивание — это не передача значения, а копирование ссылки на объект. Для программиста, привычного к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными. Например:
<source lang="ruby">
a = "abcdefg" b = a b #=> "abcdefg" a[3] = 'R' b #=> "abcRefg"
</source>
то есть при изменении значения переменной a, неявно изменилось и значение b, так как они содержат ссылку на один объект. То есть механизм присваивания действует одинаково для всех объектов, в отличие от языков типа C, Object Pascal, где присваивание может означать как копирование значения, так и копирование ссылки на значение.
Ruby не поддерживает множественное наследование, но вместо него есть мощный механизм примесей. Все классы (напрямую или через другие классы) выведены из класса , следовательно, любой объект может использовать определённые в нём методы (например, , , ). Процедурный стиль также поддерживается, но все глобальные процедуры неявно являются закрытыми методами класса Object.
Ruby является мультипарадигменным языком: он поддерживает процедурный стиль (определение функций и переменных вне классов), объектно-ориентированный (всё — объект), функциональный (анонимные функции, замыкания, возврат значения всеми инструкциями, возврат функцией последнего вычисленного значения). Он поддерживает отражение, метапрограммирование, информацию о типах переменных на стадии выполнения.
Возможности Ruby
- Имеет лаконичный и простой синтаксис, частично разработанный под влиянием Ада, Эйфель и Python.
- Позволяет обрабатывать исключения в стиле Java и Python.
- Позволяет переопределять операторы, которые на самом деле являются методами.
- Полностью объектно-ориентированный язык программирования. Все данные в Ruby являются объектами в понимании Smalltalk. Единственное исключение — управляющие конструкции, которые в Ruby в отличие от Smalltalk не являются объектами. Например, число «1» — это экземпляр класса . Также поддерживается добавление методов в класс и даже в конкретный экземпляр во время выполнения программы.
- Не поддерживает множественное наследование, но вместо него может использоваться концепция «примесей», основанная в данном языке на механизме модулей.
- Содержит автоматический сборщик мусора. Он работает для всех объектов Ruby, в том числе для внешних библиотек.
- Создавать расширения для Ruby на Си очень просто частично из-за сборщика мусора, частично из-за несложного и удобного API.
- Поддерживает замыкания с полной привязкой к переменным.
- Поддерживает блоки кода (код заключается в
{…}илиdo…end). Блоки могут использоваться в методах или преобразовываться в замыкания. - Целые переменные в Ruby автоматически конвертируются между типами (32-разрядные) и (больше 32 разрядов) в зависимости от их значения, что позволяет производить целочисленные математические расчёты со сколь угодно большой точностью.
- Не требует предварительного объявления переменных, но для интерпретатора желательно, чтобы переменным присваивалось пустое значение nil (тогда интерпретатор знает, что идентификатор обозначает переменную, а не имя метода). Язык использует простые соглашения для обозначения области видимости. Пример: просто
var— локальная переменная,@var— переменная экземпляра (член или поле объекта класса),@@var— переменная класса,$var— глобальная переменная. - В Ruby непосредственно в языке реализованы многие шаблоны проектирования, так, например, «одиночка» (singleton) может быть (хотя и не обязан) реализован добавлением необходимых методов к одному конкретному объекту (см. ниже).
- Может динамически загружать расширения, если это позволяет операционная система.
- Имеет независимую от ОС поддержку невытесняющей многопоточности.
- Перенесён на множество платформ. Он разрабатывался на GNU/Linux, но работает на многих версиях Unix, DOS, Microsoft Windows (в частности, Win32), Mac OS, BeOS, OS/2 и т. д.
Примеры
В Ruby есть немало оригинальных решений, редко или вообще не встречающихся в распространённых языках программирования. Можно добавлять методы не только в любые классы, но и в любые объекты. Например, вы можете добавить к некоторой строке произвольный метод.
<source lang="ruby">
# всё: от символа # и до конца строки — комментарий
# = является оператором присваивания,
# символы в «"» - строка, которой можно манипулировать средствами языка
str = "Привет" # здесь создаётся переменная str, типа String
# def - ключевое слово для объявления функции
def str.bye # str. указывает, кому принадлежит метод (по умолчанию Object)
# bye - имя метода, за ним может следовать необязательный, заключённый в
# круглые скобки список параметров функции
"Пока!" # из метода возвращается последнее вычисленное значение (здесь - строка)
end # ключевым словом end заканчиваются практически все инструкции Ruby
# puts - метод,
# str.bye - обращение к методу bye объекта str
# значение, полученное из метода bye передаётся методу puts
# который выводит на экран информацию
puts str.bye #=> Пока!
</source>
Этот пример также демонстрирует, как в Ruby можно использовать синглтон.
В этом примере синглтоном является объект str.
Любая конструкция в Ruby возвращает значение. Например:
<source lang="ruby">
# конструкция if вычисляет выражение после него, и, если оно истинно,
# возвращает результат выражения между then и else, иначе между else и end
puts( if 5 > 3 then "Одно" else "Другое" end ) #=> Одно
# происходит присваивание значения переменной var, и операция присваивания
# возвращает значение переменной var, которая выводится на экран
puts( var = 5 ) #=> 5
</source>
Контейнеры
Работа с массивами — одна из сильных сторон Ruby. Они автоматически изменяют размер, могут содержать любые элементы и язык предоставляет мощные средства для их обработки. <source lang="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]
# пытаемся найти индекс элемента со значением 4
a.index(4) # => nil
# предыдущая попытка найти элемент неудачна - все предыдущие функции
# возвращают копии, но Ruby почти для всех функций предоставляется аналог
# с тем же названием, но заканчивающийся на «!»,
# который модифицирует контейнер
a.flatten! # => [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5]
a.index(4) # => 5
</source>
Процедурные объекты и итераторы
В языке есть 2 эквивалентных способа записи блоков кода: <source lang="ruby">
{ puts "Hello, World!" }
do puts "Hello, World!" end
</source> Сопрограммы применяются с большинством встроенных методов: <source lang="ruby">
File.open('file.txt', 'w') { |file| # открытие файла «file.txt» для записи («w» - write)
file.puts 'Wrote some text.'
} # Конструкция устраняет неопределённость с закрытием файла: закрывается здесь при любом исходе
</source> Следующий пример показывает использование сопрограмм и итераторов для работы с массивами, который показывает краткость записи на Ruby многих достаточно сложных действий (случайно выбираем из последовательности квадратов чисел от «0» до «10» и распечатываем вместе с индексами): <source lang="ruby">
(0..10).collect{|v| v ** 2 }.select{ rand(2) == 1 }.each_with_index{|v,i| printf "%2d\t%2d\n", i, v }
</source>
Классы, примеси, методы, перегрузка операторов
Следующий пример определяет класс с именем Person, предназначенный для хранения информации об имени и возрасте некоторой персоны.
<source lang="ruby">
class Person # объявление класса начинается с ключевого слова class, за которым
# следует имя
include Comparable # подмешивается к классу
# и добавляет методы <, <=, ==, >=, > и between?
# с использованием нижеопределённого
# в классе <=>
#
@@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
</source>
Исключения
Исключения возбуждаются с помощью конструкции raise (или fail), опционально могут быть добавлены текст с сообщением, тип исключения и информация о стеке вызовов:
<source lang="ruby">
raise ArgumentError, "Неверный аргумент", caller # caller — метод возвращающий текущий стек выполнения
</source>
Обрабатываются исключения с использованием конструкции rescue. Опционально можно указать тип обрабатываемого исключения (по умолчанию обрабатываются все) и получение информации. Также можно добавлять блоки else (выполняется если исключения отсутствовали) и ensure (выполняется в любом случае).
<source lang="ruby">
begin # ... rescue RuntimeError => e # обрабатываем конкретный тип ошибок puts e # напечатаем сообщение об ошибке rescue # можно писать rescue => e чтобы получить объект исключения # обрабатываем все исключения else # сработает если исключений не было ensure # сработает в любом случае end
</source>
Реализация
Для Ruby существуют несколько реализаций: официальный интерпретатор, написанный на Си, JRuby — реализация для Java, интерпретатор для платформы .NET IronRuby (находится в стадии разработки), Rubinius — написанная в основном на Ruby и базирующаяся на идеях Smalltalk-80 VM.[6], MagLev — другая базирующаяся на Smalltalk разработка от компании Gemstone [7], Blue Ruby — реализация Ruby для виртуальной машины ABAP[8], MacRuby — реализация для Mac OS с фокусом на максимальную интеграцию с возможностями операционной системы[9]
Официальный интерпретатор портирован под большинство платформ, включая Unix, Microsoft Windows (в том числе Windows CE), DOS, Mac OS X, OS/2, Amiga, BeOS, Syllable, Acorn RISC OS и другие.
Интерактивный Ruby
С официальной версией интерпретатора Ruby поставляется интерактивный интерпретатор языка. Запускаемый командой 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).
Поддержка IDE
Базовые возможности редактирования добавляются к многим редакторам (Emacs, vim, jEdit, nano, SciTE и др.), здесь перечислены только IDE, то есть предоставляющие обширный набор функций.
| Название | Лицензия | Платформы | Ссылка |
|---|---|---|---|
| ActiveState Komodo IDE | Проприетарная | GNU/Linux, Mac OS X, Solaris, Windows | http://activestate.com/Products/komodo_ide/ |
| Arachno Ruby IDE | Проприетарная | Win 2000/XP, GNU/Linux | http://www.ruby-ide.com |
| Aptana (RadRails+RDT) | CPL | Java | http://www.aptana.com/ |
| Eclipse + RDT | CPL | Java | RDT Homepage |
| FreeRIDE | Ruby License | Windows, OS X, POSIX | http://freeride.rubyforge.org/ |
| IntelliJ IDEA + Ruby plugin | Проприетарная (на IDEA), Apache 2.0 (на сам plugin) | Java, JRuby | Ruby plugin |
| RubyMine | Проприетарная (на базе IDEA) | Java | http://www.jetbrains.com/ruby |
| KDevelop | GNU GPL | Linux | http://kdevelop.org/ |
| Mondrian Ruby IDE | MIT | Ruby (+ FOX toolkit) | http://www.mondrian-ide.com/ |
| NetBeans IDE | 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/ |
| Xcode 3.1 | Проприетарная | Mac OS X 10.5 | http://developer.apple.com/tools/xcode/ |
Библиотеки
Стандартная библиотека
Кроме мощных возможностей, встроенных в язык, Ruby поставляется с большой стандартной библиотекой. Это, прежде всего, библиотеки для работы с различными сетевыми протоколами на стороне сервера и клиента, средства для работы с различными форматами представления данных (XML, XSLT, YAML, PDF, RSS, CSV, WSDL). Кроме встроенных в язык средств отладки, с Ruby поставляются библиотеки для юнит-тестирования, профилирования. Также есть библиотеки для работы с архивами, датами, кодировками, матрицами, средства для системного администрирования, распределенных вычислений, поддержки многопоточности и т. д..
| Название | Описание | Версия[10] |
|---|---|---|
|
|
Вершина иерархии классов 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 реализован простой и удобный механизм для расширения языка с помощью библиотек, написанных на Си, позволяющий легко разрабатывать дополнительные библиотеки.[11][12]
Для унифицированного доступа к базам данных разработана библиотека Ruby DBI (поддерживает SQLite, Oracle, ODBC, MySQL, DB2, MS SQL, InterBase, ADO и др.). Также существуют библиотеки для конкретных баз данных, поддерживающих специфические для них операции. Для реализации ORM существуют несколько библиотек, такие как ActiveRecord, DataMapper или Sequel.
Из графических библиотек следует отметить FxRuby — интерфейс к графической библиотеке FOX, графический пакет разработчика wxRuby (интерфейс к кроссплатформенному пакету wxWidgets на C++), 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 — драгоценный камень).
Существует всемирный репозиторий программного обеспечения Ruby RAA (Ruby Application Archive) [1]. Репозиторий по состоянию на сентябрь 2007 года насчитывает более полутора тысяч проектов. Большое количество программного обеспечения, написанного на Ruby, пользуются хостингом проекта RubyForge[2], созданного специально с этой целью.
Большинство расширений распространяются под свободными лицензиями (LGPL, лицензия Ruby) и могут быть использованы в любом проекте практически без ограничений.
Документация
Система RDoc предназначена для автоматического извлечения документации из исходных кодов и программ на Ruby и её дальнейшей обработки. Является стандартом де-факто для подготовки документации по программному обеспечению, написанному на Ruby.
Для доступа к документации Ruby из командной строки Unix разработана программа ri.
С её помощью можно получить информацию о модулях, классах и методах Ruby.
Онлайн-документация доступна на сайте http://www.ruby-doc.org.
Использование
Ruby используется в NASA, NOAA (национальная администрация по океану и атмосфере), Motorola и других крупных организациях.[13] Следующие программы используют Ruby как скриптовый язык для расширения возможностей программы или написаны на нём (частично или полностью).
- RPG Maker (RPG Maker XP) — RGSS (Ruby Game Scripting System)
- Amarok — [3]
- SketchUp — [4]
- Inkscape — скрипты для обработки векторных изображений
- XChat
- Для KOffice разрабатывается Kross[5], механизм для поддержки скриптов, который включает Ruby [6].
- WATIR[7] (англ. Web Application Testing in Ruby) — свободное средство для автоматического тестирования веб-приложений в браузере.
Недостатки языка и интерпретатора
Большинство перечисленных здесь недостатков реализации языка Ruby относятся к старой ветке языка — Ruby 1.8. Новая ветка, Ruby 1.9, использующая для интерпретации опкода новую виртуальную машину YARV устраняет их. Однако в новой версии произошли значительные изменения в синтаксисе языка, обратная совместимость нарушена, поэтому полный переход на неё в настоящее время затруднен. Интерпретатор Ruby на сегодняшний день имеет следующие недостатки, большинство из которых устранены в ветке Ruby 1.9:
- Невысокая скорость работы. Ruby 1.8 является одним из самых медленных из используемых в практике веб-разработки языков программирования.[14] Эта проблема решена в Ruby Core 1.9 и в JRuby. Быстродействие других альтернативных реализаций языка также несколько лучше чем у Ruby 1.8.[15]
- Отсутствие поддержки потоков операционной системы (для Unix-подобных операционных систем есть поддержка процессов ОС), есть в версии 1.9.
- Отсутствие встроенной поддержки Юникода (возможна работа с использованием дополнительных библиотек, есть в версии 1.9).
- Отсутствие компиляции в байткод. (При этом есть возможность компилировать Ruby в Java и .NET байткод, используя компилятор JRuby и Ruby.NET[16]). В в версию 1.9 входит виртуальная машина YARV, компилирующая Ruby в байткод и существенно ускоряющая исполнение. Кроме того, параллельно разрабатывается другие проекты виртуальных машин, включая Rubinus и Maglev.
См. также
- Ruby on Rails — каркас для создания веб-приложений
- RubyGems — менеджер пакетов для Ruby
- Сравнение возможностей Ruby с другими языками см. в статье Сравнение языков программирования
Примечания
- ↑ LICENSE (англ.) (TXT). — лицензия Ruby. Проверено 14 августа 2006., Лицензия Ruby — перевод
- ↑ Письмо Юкихиро Мацумото в рассылку ruby-talk ruby-talk:00382 от 4 июня 1999 года. Есть перевод всего письма на русский
- ↑ Интервью Юкихиро Мацумото(англ.)
- ↑ Хэл Фултон Программирование на языке Ruby. — 2-е изд. — М.: ДМК Пресс, 2007. — С. 24-27.
- ↑ 5 things I hate about Ruby (англ.) (25 октября 2005). Проверено 30 июля 2007.
- ↑ Rubinius Home
- ↑ MagLev /măg-lĕv/
- ↑ Blue Ruby — New Exploratory Research
- ↑ MacRuby
- ↑ Из-за слабой документированности Ruby в ранних версиях информация получена напрямую из исходников (helium.ruby-lang.org/ftp://ruby (англ.). Проверено 16 августа 2006.). Указаны только стабильные (чётные) версии.
- ↑ Thomas, Dave Extending Ruby (англ.). Programming Ruby - The Pragmatic Programmer's Guide. Addison Wesley Longman, Inc.. Проверено 30 октября 2006.
- ↑ Rooney, Garrett Extending Ruby with C (англ.). O'Reilly Media (18 ноября 2004). Проверено 30 октября 2006.
- ↑ Хэл Фултон Программирование на языке Ruby. — 2-е изд. — М.: ДМК Пресс, 2007. — С. 21.
- ↑ Computer Language Benchmarks Game — сравнение производительности языков программирования.
- ↑ Сравнение производительности девяти реализаций языка Ruby
- ↑ Ruby.NET (англ.). Queensland University of Tehnology. Проверено 25 января 2008.
Ссылки
- Сайты и ресурсы
-
- Ruby Home Page(рус.) — официальная страница.
- Ruby Home Page(англ.) — официальная страница.
- RubyFlow.ru — новости о языке Ruby на русском языке.
- Образовательный ресурс, посвященный Ruby(рус.), на сайте МФТИ
- Форумы
-
- Vingrad/Ruby — русскоязычный форум и wiki по Ruby.
- Ruby on Rails in UA — русскоязычный форум по Ruby
- IRC-чаты
- Документация, справочники, примеры и информация
-
- Ruby.on-page.net(англ.) — самый простой справочник по Ruby с примерами
- Ruby Documentation project(англ.) — документация по языку и библиотекам.
- Programming Ruby. The Pragmatic Programmer’s Guide — часто упоминаемая книга по Ruby, охватывающая основные стороны программирования на этом языке (англ.)
- RubyGems(англ.) — основной менеджер пакетов программ Ruby.
- RubyGarden(англ.) — интересный блог.
- PLEAC-Ruby(англ.) — примеры конструкций языка.
- Full Ruby on Rails Tutorial
- Крис Пайн /Chris Pine/ «Learn To Program» — полный русский перевод HTML-версии учебника.
- Ruby — Руководство пользователя
- Е.Охотников «Ruby-новые грани»
- Трогательный путеводитель по Руби (перевод «Why’s Poignant Guide to Ruby»)
- Little Book Of Ruby — учебник по Ruby от создателей Ruby in Steel IDE
- Интерактивный туториал(англ.)
- Программы
-
- Ruby Application Archive(англ.) — программы написанные на Ruby.
- Реализации языка и расширения к нему
-
- JRuby Home(англ.) — реализация интерпретатора Ruby на Java.
- RubyForge(англ.) — сайт расширений для Ruby (аналог CPAN для языка Перл).
Литература
| Файл:Heckert GNU white.svg | Портал «Свободное программное обеспечение» |
|---|---|
| Файл:Wikibooks-logo.svg | Категория:Ruby в Викиучебнике? |
| Файл:Wikisource-logo.svg | Лицензия Ruby в Викитеке? |
- David Thomas, Chad Fowler, Andrew Hunt Programming Ruby: The Pragmatic Programmer’s Guide, Second Edition. — Boston: Addison-Wesley, 2004. — ISBN 0-9745140-5-5
- Dave Thomas, Chad Fowler, Andy Hunt Programming Ruby 1.9: The Pragmatic Programmers' Guide. — Dallas: Pragmatic Bookshelf, 2009. — ISBN 978-1-93435-608-1
- Хэл Фултон Программирование на языке Ruby = The Ruby Way. — 2-е изд. — М.: ДМК Пресс, 2007. — 688 с. — ISBN 0-672-32884-4
- Фитцджеральд М. Изучаем Ruby = Learning Ruby. — 1-е изд. — СПб.: BHV-СПб, 2008. — 336 с. — ISBN 978-5-9775-0225-2
- Yukihiro Matsumoto Ruby in a Nutshell. — Sebastopol, CA: O’Reilly, 2002. — ISBN 0-596-00214-9
- David Flanagan,Yukihiro Matsumoto The Ruby Programming Language. — Sebastopol, CA: O’Reilly, 2008. — 444 с. — ISBN 978-0596516178
- why the lucky stiff Краткая экскурсия по языку Ruby // Лучшие примеры разработки ПО = The best software writing. — СПб.: Питер, 2007. — 196 с. — ISBN 5-469-01291-3
Основные языки программирования (список • сравнение • IDE • история • хронология) |
|
|---|---|
| Используемые в разработке |
Ада • АПЛ • Ассемблер • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • F# • Forth • Фортран • Gambas • Groovy • Haskell • Icon • Java • JavaScript • Limbo • Lua • MATLAB • Object Pascal • Objective-C • OCaml • Oz • Оберон • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic • VB.NET |
| Академические | |
| IEC61131-3 |
Instruction List • ST • FBD • Ladder Diagram • SFC |
| Прочие | |
| Эзотерические | |
| Эта статья входит в число хороших статей русскоязычного раздела Википедии. |
ar:روبي (لغة برمجة) bat-smg:Ruby bg:Ruby bn:রুবি (প্রোগ্রামিং ভাষা) ca:Ruby ckb:روبی cs:Ruby (programovací jazyk) da:Ruby (programmeringssprog) de:Ruby (Programmiersprache) en:Ruby (programming language) eo:Ruby (programlingvo) es:Ruby eu:Ruby fa:روبی fi:Ruby fr:Ruby gl:Ruby he:Ruby hr:Ruby (programski jezik) hu:Ruby ia:Ruby (linguage de programmation) id:Ruby (bahasa pemrograman) it:Ruby ja:Ruby ka:რუბი (პროგრამირების ენა) ko:루비 (프로그래밍 언어) lt:Ruby ms:Ruby my:Ruby Programming Language nl:Ruby (programmeertaal) nn:Ruby no:Ruby pl:Ruby (język programowania) pt:Ruby (linguagem de programação) ro:Ruby sk:Ruby (programovací jazyk) sr:Програмски језик Руби sv:Ruby ta:ரூபி tg:Руби th:ภาษารูบี tr:Ruby (programlama dili) uk:Ruby vi:Ruby (ngôn ngữ lập trình) zh:Ruby zh-yue:Ruby程式語言
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....
- Страницы с превышением глубины раскрытия
- Страницы с неработающими файловыми ссылками
- Появились в 1995 году
- Языки программирования по алфавиту
- Статьи со ссылками на Викиучебник
- Статьи со ссылками на Викитеку
- Википедия:Хорошие статьи о компьютерах
- Википедия:Хорошие статьи по алфавиту
- Веб-программирование
- Руби
- Скриптовые языки
- Объектно-ориентированные языки программирования
- Языки с динамической типизацией
- Свободные компиляторы и интерпретаторы