Ruby

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

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

Багатоплатформова реалізація інтерпретатора мови 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 (програмування)) для ізоляції розширень класів і для більш безпечного використання «мавп'ячих латок»;
  • використання 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 тепер існує кілька основних реалізацій: офіційний інтерпретатор (так званий 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

Див. також

Примітки

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.