четвер, 28 лютого 2013 р.

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

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


Ruby 2.0 продовжує розвиток гілки 1.9.x, не містить революційних змін і, незважаючи на ряд істотних нововведень, зберігає сумісність з Ruby 1.9.3. За словами розробників, завдяки уважному ставленню до забезпечення сумісності з існуючими додатками, міграція з гілки 1.9 на 2.0 повинна пройти помітно легше, ніж з 1.8 на 1.9. Також наголошується, що на відміну від 1.9.0 випуск 2.0.0 є повністю стабільним і готовим для повсюдного впровадження.

Основні поліпшення, додані в Ruby 2.0.0:
  • Ключові слова в якості аргументів: наприклад, крім «1.step (20, 2)» можна писати «1.step (by: 2, to: 20)» з визначенням методу як «def step (by: step, to: limit )», що значно покращує читання коду;
  • Підтримка конструкції «Refinements» (Module # refine) для підвищення безпеки внесення змін в код на льоту ("monkey patching"). Наприклад, можна застосувати «уточнення» до глобального класу в контексті тільки певного модуля, при цьому зміни будуть застосовані лише до вказаного контексту. Можливість відзначена як експериментальна, тому не виключається, що логіка роботи в майбутньому може помінятися;
  • Новий спосіб розширення класів за допомогою конструкції Module # prepend, що дозволяє додати модуль на початок ланцюжка виклику;
  • Підтримка літерала «% i», призначеного для спрощеного створення масиву символів («KEYS =% i [foo bar baz]» замість «KEYS = [: foo,: bar,: baz]»);
  • Підтримка змінної __ dir__, яка повертає шлях до директорії поточного запущеного файлу (наприклад, File.read (__dir__ + '/. Config'));
  • Використання кодування UTF-8 за замовчуванням. При вказівці символів в кодуванні UTF-8 в скриптах відтепер більше немає необхідності у використанні таких хитрощів як спецкомментарій «# encoding: utf-8»;
  • Нові методи Enumerable # lazy і Enumerator :: Lazy з реалізацією «ледачих» перерахувань, не виконуються відразу, а тільки при безпосередній необхідності в даних. Lazy-перерахування працюють приблизно в два рази повільніше звичайних;
  • Нові методи Enumerator # size і Range # size, що дозволяють обчислити розмір перерахування до того як воно буде виконано;
  • Підтримка методу «# to_h» для перетворення класу в хеш (car = Car.new ('Toyota', 'Prius', 2014); car.to_h # => {: make => "Toyota",: model => "Prius ",: year => 2014});
  • Нові методи Array # bsearch і Range # bsearch для виконання бінарного пошуку (ary = [0, 4, 7, 10, 12]; ary.bsearch {| x | x> = 6});
  • Перехід на Onigmo (форк Oniguruma), новий двигунець для виконання регулярних виразів;
  • API для обробки виключень в асинхронному режимі;
  • Підтримка системи динамічного налагодження DTrace, за допомогою якої можна організувати діагностику роботи немодифікованого скрипту під час його виконання;
  • TracePoint — покращений API для трасування додатків;
  • Оптимізація продуктивності збирача сміття, наприклад, застосування техніки маркування по бітовим картам;
  • Оптимізація роботи конструкції Kernel # require, що дозволило помітно прискорити запуск Rails;
  • Оптимізація роботи віртуальної машини;
  • Оптимізація продуктивності операцій з плаваючою комою;

Такі популярні проекти, як Rails та tDiary, вже перевірені на повну сумісність з Ruby 2.0. Тим не менш, ряд змін в новій версії призводить до появи окремих несумісностей:
  • кодуванням за замовчуванням є UTF-8;
  • видалена підтримка бібліотеки Iconv;
  • порушена сумісність ABI (вимагається перезбирання бібліотек-розширень);
  • # Lines, # chars, # codepoints і # bytes тепер повертають результат з типом Array замість Enumerator;
  • Object # inspect тепер завжди повертає строкові значення.

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

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