Ruby
Ruby (англ. «Рубін», читається «Ру́бі») — це інтерпретована, повністю об'єктноорієнтована мова програмування з чіткою динамічною типізацією. Мова вирізняється високою ефективністю розробки програм і увібрала в себе найкращі риси Perl, Java, Python, Smalltalk, Eiffel, Ada і Lisp. Ruby поєднує в собі Perl-подібний синтаксис з об'єктноорієнтованим підходом мови програмування Smalltalk. Також деякі риси запозичено із мов програмування Python, Lisp, Dylan та CLU.
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 поширюється як Вільне програмне забезпечення. Початковий код проєкту розповсюджується під ліцензіями BSD («2-clause BSDL») і «Ruby», яка посилається на останній варіант ліцензії GPL і повністю сумісна з GPLv3.
Історія створення
ред.Мова була створена Юкіхіро Мацумото, котрий почав працювати над 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.
- Підтримує цикли з повною прив'язкою до змінних.
- Підтримує блок коду (код взятий в
{
…}
абоdo
…end
). Блоки можуть використовуватись в методах або перетворюватись в цикли. - Цілі змінні в 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
Див. також
ред.Примітки
ред.- ↑ GitHub — 2007.
- ↑ An Interview with the Creator of Ruby. Архів оригіналу за 8 лютого 2008. Процитовано 23 серпня 2007.
Посилання
ред.- Ruby language home page [Архівовано 24 січня 2008 у Wayback Machine.] (англ.)
- Ruby.on-page.net Найпростіший довідник з Ruby з прикладами [Архівовано 18 січня 2022 у Wayback Machine.] (англ.)
- RubyFlow.org.UA Новини про події у світі Ruby та Ruby on Rails українською
- FAQ Ruby
- Документація до мови Ruby [Архівовано 26 вересня 2020 у Wayback Machine.] (англ.)
- Офіційний майданчик Ruby-gnome2 [Архівовано 21 серпня 2008 у Wayback Machine.] (англ.)