Ruby

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Ruby
Ruby logo.png
Парадигма: функційна, імперативна, логічна, об'єктно-орієнтована
Дата появи: 1993
Творці: Юкіхіро Мацумото
Розробник: Юкіхіро Мацумото (поряд з іншими)
Останній реліз: 2.1.1 (24 лютого 2014; 220 днів тому)
Система типізації: динамічна
Основні реалізації: Ruby, JRuby, Ruby.NET
Під впливом від: Smalltalk, Perl, Lisp, Scheme, Python, CLU, Dylan
Вплинула на: Groovy
ОС: багатоплатформова
Ліцензія: Ruby License та BSD
Сторінка інтернет: 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 (перлина) [1].

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 (Ruby 2.0.0-p0) офіційно вийшла в світ 24 лютого 2013 року. Поточна версія Ruby 2 - 2.0.0-p247, випущена 27 червня 2013.

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

  • ключові слова в аргументах функцій;
  • стандартна кодова таблиця UTF-8;
  • нова система "уточнень" (Refinements) для ізоляції розширень класів і для більш безпечного використання "мавп'ячих латок" (monkeypatching);
  • використання 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(англ.). Всі класи (безпосередньо або через інші класи) виведені з класу Object, тому, довільний об'єкт може використовувати визначені в ньому методи (наприклад, 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 тепер існує дві основні реалізації: офіційний інтерпретатор та JRuby—реалізація для Java. Інтерпретатор Ruby для платформи Microsoft .Net IronRuby перебуває у стадії Pre-Alpha версії і доступний для звантаження. У цій реалізації код 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, як і в більшості мов є два типи коментарів:

  • Коментарі розміром в один рядок позначаються так // Коментарі
  • Коментарі розміром два і більше рядків позначаються так /*Коментарі*/

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

/* def young? (age)
 if age < 30
    return true
  else
    return false
  end
end */}}

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

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

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

Примітки[ред.ред. код]

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