пʼятниця, 27 грудня 2013 р.

Реліз мови програмування Ruby 2.1

Після десяти місяців розробки представлено реліз мови програмування Ruby 2.1. Ruby — потужна й динамічно об'єктно-орієнтована мова програмування, що відрізняється високою ефективністю розробки програм і увібрала в себе кращі риси Perl, Java, Python, Smalltalk, Eiffel, Ada і Lisp. Код проекту розповсюджується під ліцензіями BSD («2-clause BSDL») і «Ruby», яка посилається на останній варіант ліцензії GPL і повністю сумісна з GPLv3. Ruby 2.1 продовжує розвиток гілки 2.0 при збереженні зворотної сумісності.

Додатково повідомляється про затвердження нової схеми нумерації версій Ruby, яка буде застосована в наступних випусках. Номер версії буде визначатися в форматі MAJOR.MINOR.TEENY.PATCH, де значення MAJOR буде збільшуватися при значних порушеннях зворотної сумісності. Нові MINOR-випуски планується формувати раз на рік, при цьому в даних випусках допускається порушення зворотної сумісності API. У TEENY-випусках, які виходитимуть раз на 2-3 місяці, будуть усуватися помилки та вразливості при повному збереженні сумісності API. Значення PATCH відображатиме число комітів з моменту минулого мінорного випуску.

Основні зміни в Ruby 2.1:

  • Підтримка локального кешування методів у VM, замість використання глобального кешу;
  • Новий збирач сміття RGenGC;
  • Розширення та стабілізація можливостей конструкції «Refinements» (Module#refine) для підвищення безпеки внесення змін в код на льоту;
  • Підтримка нового синтаксису числових і комплексних літералів («42r» для Rational (42, 1), 3.14r» для 3.14.rationalize, «42i» для Complex (0, 42), «42ri» для Complex (0, 42r));
  • Значення за замовчуванням для аргументів ключових слів тепер можуть бути пропущені (наприклад, замість «def foo (a:10)» можна вказати «def foo (a:)»);
  • Змінено значення, що повертається за замовчуванням для конструкцій «def» (замість nil повертає ім'я методу, наприклад, «def foo() end» поверне «:foo»);
  • Для прискорення обчислень з даними типу Bignum задіяна бібліотека GMP;
  • Нові методи String#scrub і String#scrub! для перевірки та виправлення некоректної строкової послідовності;
  • Новий метод Socket.getifaddrs, асоційований з функцією getifaddrs() стандартної системної бібліотеки;
  • Оновлення RDoc 4.1.0 і RubyGems 2.2.0;
  • Оптимізація рядків «літерал». Freeze на рівні VM (наприклад, вказівка ​​рядка як «bar»f дозволяє заморозити дане значення і працювати з нею без створення нової копії рядка при виконанні кожної опреаціі);
  • У класи Array і Enumerable додані нові методи Array#to_h і Enumerable#to_h для перетворення масиву/списку з пар ключів і значень в хеш;
  • Підтримка методу Exception#cause, що дозволяє звернутися до попереднього виключення при обробці нового винятку;
  • Оновлення бібліотек BigDecimal, JSON, NKF, Rake, RubyGems і RDoc;
  • Видалення curses зі стандартного набору бібліотек (бібліотеку curses винесено в окремий gem curses).

Немає коментарів:

Дописати коментар