Ruby
Парадигмаоб'єктно-орієнтована, функційна, імперативна, логічна
Дата появи1993
ТворціЮкіхіро Мацумото
РозробникЮкіхіро Мацумото (поряд з іншими)
Останній реліз
Система типізаціїдинамічна
Основні реалізаціїRuby MRI, JRuby, GraalVM, Rubinius, mruby
Під впливом від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 (англ. «Рубін», читається «Ру́бі») — це інтерпретована, повністю об'єктноорієнтована мова програмування з чіткою динамічною типізацією. Мова вирізняється високою ефективністю розробки програм і увібрала в себе найкращі риси Perl, Java, Python, Smalltalk, Eiffel, Ada і Lisp. Ruby поєднує в собі Perl-подібний синтаксис з об'єктноорієнтованим підходом мови програмування Smalltalk. Також деякі риси запозичено із мов програмування Python, Lisp, Dylan та CLU.

Багатоплатформова реалізація інтерпретатора мови 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.

Посилання