Выпуск языка программирования Ruby 2.4.0

Представлен релиз Ruby 2.4, динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD (»2-clause BSDL») и «Ruby», которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 2.4 является четвёртым значительным выпуском, подготовленным в рамках нового планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2–3 месяца корректирующих выпусков.

Основные улучшения:

  • Переработана реализация хэш-таблиц (st_table), внесены улучшения связанные с переходом на использование открытой адресации для борьбы с коллизиями и применением упорядоченных массивов вместо списков с двойным связыванием. В среднем новая реализация обеспечивает 50% ускорения работы с хэшами;
  • Добавлена возможность binding.irb для запуска REPL-сеансов по аналогии с binding.pry;
  • Типы Fixnum и Bignum преобразованы в универсальный тип Integer. Все Си-расширения, из которых выполняется обращение к классам Fixnum и Bignum, должны быть переработаны;
  • В строковых операциях String/Symbol#upcase/downcase/swapcase/capitalize реализована поддержка маппинга строчных/прописных символов для Unicode (ранее подобный маппинг был доступен только для ASCII-символов);
  • Внесена серия оптимизаций производительности. В частности, ускорена работа «Array#max» и «Array#min», реализации »[x, y].max» и »[x, y].min» избавлены от создания временных массивов для некоторых ситуаций, добавлена операция «Regexp#match?» позволяющая обработать регулярное выражение без создания объекта с обратными ссылками, ускорены операции доступа к экземплярам переменных;
  • Добавлены отладочные вызовы «Thread#report_on_exception» и «Thread.report_on_exception» позволяющие отследить исключения при завершении потоков или выполнении операций сборки мусора. Расширены механизмы обнаружения взаимных блокировок в потоках, при выявлении которых обеспечен вывод обратных трассировок и списка зависимых потоков;
  • Добавлена поддержка OpenSSL 1.1.0. Прекращена поддержка OpenSSL 0.9.7 и более ранних выпусков;
  • Из stdlib удалены компоненты ext/tk и XMLRPC.

© OpenNet