Ruby (англ. «Рубін», читається «Ру́бі») — це інтерпретована, повністю об'єктноорієнтована мова програмування з чіткою динамічною типізацією. Мова вирізняється високою ефективністю розробки програм і увібрала в себе найкращі риси Perl, Java, Python, Smalltalk, Eiffel, Ada і Lisp. Ruby поєднує в собі Perl-подібний синтаксис з об'єктноорієнтованим підходом мови програмування Smalltalk. Також деякі риси запозичено із мов програмування Python, Lisp, Dylan та CLU.

Ruby
Парадигма об'єктно-орієнтована, функційна, імперативна, логічна
Дата появи 1993
Творці Юкіхіро Мацумото
Розробник Юкіхіро Мацумото (поряд з іншими)
Останній реліз
Система типізації динамічна
Основні реалізації Ruby, JRuby, Ruby.NET
Під впливом від Smalltalk, Perl, Lisp, Scheme, Python, CLU, Dylan
Вплинула на Groovy
Мова реалізації C[1]
Операційна система багатоплатформова
Ліцензія Ruby License та BSD
Звичайні розширення файлів .rb або .rbw
Репозиторій вихідного коду git.ruby-lang.org/ruby.git
Вебсайт www.ruby-lang.org

Багатоплатформова реалізація інтерпретатора мови Ruby поширюється як Вільне програмне забезпечення. Початковий код проєкту розповсюджується під ліцензіями BSD («2-clause BSDL») і «Ruby», яка посилається на останній варіант ліцензії GPL і повністю сумісна з GPLv3.

Історія створення ред.

 
Мацумото Юкіхіро, — автор мови програмування Ruby.

Мова була створена Юкіхіро Мацумото, котрий почав працювати над Ruby 24 лютого 1993 року. Метою було створення об'єктноорієнтованої, легкої в розробці, інтерпретованої мови програмування. Перша загальнодоступна версія 0.95 побачила світ 1995 року. «Ruby» був названий так (англ. рубін) через жарт, що ходив у колі друзів Мацумото, і був алюзією до назви мови програмування Perl (перлина)[2].

Ruby on Rails ред.

Близько 2005 року було розроблено MVC вебфреймворк Ruby on Rails, який сприяв росту популярності Ruby.

Ruby 1.9 ред.

Останньою версією гілки 1.9, є Ruby 1.9.3 В гілці Ruby 1.9, в порівнянні із гілкою Ruby 1.8 було внесено багато важливих змін. Ось деякі з них:

  • Локальні змінні у блоках
  • Додатковий лямбда-синтаксис: (fun = ->(a,b) { puts a + b })
  • Новий API для сокетів (з підтримкою IPv6)

Ruby 2 ред.

19 жовтня 2011 року почалася робота над Ruby 2 — новою версією мови, що містить небагато нововведень та змін, і націленою, в основному, на швидкість виконання, дозволяючи збереження прекомпільованого байт-коду.

Перша версія Ruby 2 (Ruby 2.0.0-p0) офіційно вийшла у світ 24 лютого 2013 року.

Деякі з властивостей доданих в Ruby 2:

  • ключові слова в аргументах функцій;
  • стандартна кодова таблиця UTF-8;
  • нова система «уточнень» (Refinement (програмування)[en]) для ізоляції розширень класів і для більш безпечного використання «мавпячих латок»;
  • використання DTrace для відладки;
  • суттєве підвищення швидкодії.

Семантика ред.

Ruby — об'єктноорієнтована мова програмування. Кожен тип даних є об'єктом, включно з типами та класами, котрі в багатьох інших мовах реалізовані як примітиви (такі як «integer» або «null»). Кожна функція є методом.

Змінні Ruby містять не самі об'єкти, а посилання на них. Присвоєння — це не передача значення, а копіювання посилання на об'єкти. Для тих, хто звик до поширених гібридних мов програмування, деякі наслідки такого рішення можуть здаватись неочікуваними. Наприклад:

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

Тобто при зміні значення змінної a неявно змінилось і значення b, оскільки вони містять посилання на один об'єкт. З іншого боку, це логічніше, ніж ситуація, коли для змінних різних типів присвоєння діє по різному (наприклад в Object Pascal)[джерело?].

Ruby не підтримує множинне успадковування, але замість цього має потужний механізм Mix In [Архівовано 7 лютого 2005 у Wayback Machine.](англ.). Всі класи (безпосередньо або через інші класи) виведені з класу Object [Архівовано 13 вересня 2008 у Wayback Machine.], тому, довільний об'єкт може використовувати визначені в ньому методи (наприклад, class, to_s, nil?). Процедурний стиль також підтримується, але всі глобальні процедури неявно є закритими методами класу Object.

Ruby задумана як мультипарадигмова мова. Вона підтримує процедурну (кожна функція або змінна, визначена поза межами класу, стає частиною класу Object, що є батьківським для всіх інших класів), об'єктноорієнтовану (все є об'єктом), або функціональну парадигму програмування. Ruby підтримує динамічну типізацію даних та поліморфізм. Ruby зараз не має повної підтримки Unicode, хоча частково підтримує UTF-8.

Особливості Ruby ред.

  • Лаконічний і простий синтаксис, часто зустрічається вплив Ада, Eiffel і Python.
  • Може обробляти винятки в стилі Java і Python.
  • Дозволяє переозначувати оператори, які насправді є методами.
  • Повністю об'єктноорієнтована мова програмування. Всі дані в Ruby є об'єктами в розумінні Smalltalk. Єдиний виняток — керівні конструкції, які в Ruby на відміну від Smalltalk не є об'єктами. Наприклад, число «1» — це екземпляр класу Шаблон:RDoc. Також можна додавати методи в клас і навіть в конкретний екземпляр під час виконання програми.
  • Не підтримується множинна спадковість, натомість може використовуватись концепція MixIn, заснована в даній мові на основі механізмів модулів.
  • Містить автоматичний прибиральник сміття. Він працює для всіх об'єктів Ruby, в тому числі для зовнішніх бібліотек.
  • Створення розширень для Ruby на C дуже просте, завдяки збору сміття та нескладного і зручного API.
  • Підтримує цикли з повною прив'язкою до змінних.
  • Підтримує блок коду (код взятий в {} або doend). Блоки можуть використовуватись в методах або перетворюватись в цикли.
  • Цілі змінні в Ruby автоматично конвертуються між типами Fixnum (32-розрядні) і Bignum (понад 32 розряди) в залежності від їхнього значення, що дозволяє виконувати цілочисельні математичні розрахунки з нескінченною точністю.
  • Не вимагає попереднього оголошення змінних, хоча для інтерпретатора бажано, щоб змінній присвоювалось порожнє значення nil (тоді інтерпретатор знає, що ідентифікатор вказує на змінну, а не на ім'я методу). Мова використовує прості домовленості для визначення області видимості. Приклад: просто var — локальна змінна, @var — змінна екземпляра (член або поле об'єкта класу), @@var — змінна класу, $var — глобальна змінна.
  • Безпосередньо в мові Ruby реалізовано багато шаблонів програмування, так, наприклад, «одинак» (англ. singleton) може бути реалізований додаванням потрібних методів одному конкретному об'єктові.
  • Може динамічно завантажувати розширення, якщо це дозволяє операційна система.
  • Має незалежну від ОС підтримку невитискальної багатонитевості.
  • Перенесена на багато платформ. Мова розроблялася на GNU/Linux, але працює на багатьох версіях Unix, DOS, Microsoft Windows (частково, Win32), Mac OS, BeOS, OS/2 і т. д.

Реалізації ред.

Для Ruby тепер існує кілька основних реалізацій: офіційний інтерпретатор (так званий MRI — Matz Ruby Implementation), Рубініус (Rubinius) та JRuby — реалізація для віртуальної машини Java. Інтерпретатор Ruby для платформи Microsoft .Net IronRuby перебуває у стадії Pre-Alpha версії та доступний для завантаження.

У реалізаціях Rubinius та JRuby код Ruby компілюється у байт-код, що збільшує швидкість роботи, а також дозволяє використання власної багатонитевості операційної системи.

Ruby-gnome2 ред.

Ruby-gnome2 — оболонка на мові програмування Ruby для бібліотеки GTK+ та низки бібліотек проєкту GNOME. Ruby-gnome2 є вільним програмним забезпеченням і розповсюджується на умовах ліцензії GNU Lesser General Public License.

Приклад коду:

require 'gtk'

window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)
button = Gtk::Button.new("Кнопка!")

button.signal_connect('clicked') {
    print "Кнопка натиснена!\n"
}

window.add button

button.show
window.show

Gtk.main

Коментарі в Ruby ред.

В Ruby, як і в більшості мов є два типи коментарів:

  • Коментарі розміром в один рядок позначаються так # Коментарі
  • Коментарі розміром два і більше рядків позначаються так: =begin Коментарі =end

Приклад багаторядкових коментарів:

=begin
 def young? (age)
 if age < 30
    return true
  else
    return false
  end
end 
=end

Приклад однорядкового коментаря:

val =12
if val == 1 || val == 12 || val == 42
  # puts "коментар"
end

Див. також ред.

Примітки ред.

  1. GitHub — 2007.
  2. An Interview with the Creator of Ruby. Архів оригіналу за 8 лютого 2008. Процитовано 23 серпня 2007.

Посилання ред.