Ruby 3.0

Ruby — динамический, рефлективный, интерпретируемый высокоуровневый язык программирования.

Язык Ruby обладает независимой от операционной системы реализацией многопоточности, сильной динамической типизацией, сборщиком мусора и многими другими возможностями. По особенностям синтаксиса он близок к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk.

Версия 3.0 является восьмым значительным выпуском, подготовленным в рамках планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков. 

Отмечается, что разработчики шли к версии 3.0 с 2015 года, целью которой является производительность, параллелизм и типизация. Юкихиро Мацумото (Yukihiro Matsumoto), автор языка программирования, пять лет назад предложил концепцию Ruby 3x3, подразумевающую, что выпуск версии 3 станет возможным, когда удастся добиться трёхкратного прироста производительности, по сравнению с веткой версии 2. Благодаря усовершенствованию поддержки JIT-компиляции подобные показатели стали реальностью.

Основные изменения в новой версии:

  • В MJIT реализовано множество улучшений. Заметно повышена производительность при некоторых рабочих нагрузках, таких как игры (тест Optcarrot), AI (тест Rubykon) или любое другое приложение, которое тратит большую часть времени на многократный вызов нескольких методов. В Ruby 3.0 также значительно уменьшен размер кода, генерируемого JIT-компилятором. При этом отмечается, что JIT ещё не готов для оптимизации приложений, использующих фреймворк Rails, которые охватывают очень много методов, что приводит к неэффективной работе кэша i-cache (проблему планируется решить в выпуске Ruby 3.1).
  • Добавлен инструментарий для аннотации типов RBS, который поддерживает наиболее часто встречающиеся шаблоны в программах на языке Ruby. Аннотации RBS позволяют выполнять статический анализ кода без явного определения типов. Предоставляются средства для описания определений классов и модулей: методы, определённые в классе, переменные экземпляра и их типы, а также иерархию наследования или подмешивания модулей. Дополнительно предложен экспериментальный анализатор типов TypeProf, который читает код, анализирует определение и использование методов, и генерирует прототип аннотаций типов в формате RBS.
  • Существенно повышена производительность интерактивного интерпретатора IRB, вставка больших отрывков кода в который теперь производится в 53 раза быстрее, чем в Ruby 2.7. Добавлена команда "measure" для вывода статистики о времени выполнения кода.
  • Обновлены gem-модули, входящие в stdlib. Из базового набора исключены модули sdbm, webrick, net-telnet и xmlrpc. В основной состав включены модули rexml и rss.

Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3.

 

Последние материалы