Мова була створена Юкіхіро Мацумото, котрий почав працювати над 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 містять не самі об'єкти, а посилання на них. Присвоєння — це не передача значення, а копіювання посилання на об'єкти. Для тих, хто звик до поширених гібридних мов програмування, деякі наслідки такого рішення можуть здаватись неочікуваними. Наприклад:
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 є об'єктами в розумінні Smalltalk. Єдиний виняток — керівні конструкції, які в Ruby на відміну від Smalltalk не є об'єктами. Наприклад, число «1» — це екземпляр класу Шаблон:RDoc. Також можна додавати методи в клас і навіть в конкретний екземпляр під час виконання програми.
Не підтримується множинна спадковість, натомість може використовуватись концепція MixIn, заснована в даній мові на основі механізмів модулів.
Містить автоматичний прибиральник сміття. Він працює для всіх об'єктів Ruby, в тому числі для зовнішніх бібліотек.
Створення розширень для Ruby на C дуже просте, завдяки збору сміття та нескладного і зручного API.
Підтримує цикли з повною прив'язкою до змінних.
Підтримує блок коду (код взятий в { … } або do … end). Блоки можуть використовуватись в методах або перетворюватись в цикли.
Цілі змінні в Ruby автоматично конвертуються між типами Fixnum (32-розрядні) і Bignum (понад 32 розряди) в залежності від їхнього значення, що дозволяє виконувати цілочисельні математичні розрахунки з нескінченною точністю.
Не вимагає попереднього оголошення змінних, хоча для інтерпретатора бажано, щоб змінній присвоювалось порожнє значення nil (тоді інтерпретатор знає, що ідентифікатор вказує на змінну, а не на ім'я методу). Мова використовує прості домовленості для визначення області видимості. Приклад: просто var — локальна змінна, @var — змінна екземпляра (член або поле об'єкта класу), @@var — змінна класу, $var — глобальна змінна.
Безпосередньо в мові Ruby реалізовано багато шаблонів програмування, так, наприклад, «одинак» (англ.singleton) може бути реалізований додаванням потрібних методів одному конкретному об'єктові.
Може динамічно завантажувати розширення, якщо це дозволяє операційна система.
Для Ruby тепер існує кілька основних реалізацій: офіційний інтерпретатор (так званий MRI — Matz Ruby Implementation), Рубініус (Rubinius) та JRuby — реалізація для віртуальної машини Java. Інтерпретатор Ruby для платформи Microsoft .Net IronRuby перебуває у стадії Pre-Alpha версії та доступний для завантаження.
У реалізаціях Rubinius та JRuby код Ruby компілюється у байт-код, що збільшує швидкість роботи, а також дозволяє використання власної багатонитевості операційної системи.