Ruby — динамический, опенсорсный язык с прицелом на простоту и продуктивность. Он имеет элегантный синтаксис: интуитивно понятный и простой для написания.
В этом выпуске представлен ряд новых возможностей и улучшений производительности. Самые важные:
- Новый JIT-компилятор, который вместо работы в памяти сохраняет на диск код на языке C и обрабатывает его внешним компилятором (поддерживаются GCC, Clang и Microsoft VC++). Включается ключом
--jit
. На активно нагружающих процессор задачах достигнуто ускорение в 1.7 раз по сравнению с Ruby 2.5. - Модуль
RubyVM::AbstractSyntaxTree
(экспериментальный, поддержание будущей совместимости пока не гарантируется). Он предоставляет методыparse
иparse_file
для превращения соответственно строки или файла с кодом на Ruby в узлы абстрактного синтаксического дерева, представленного объектами классаNode
из того же модуля.
Другие важные нововведения:
- Добавлен алиас
#then
дляKernel#yield_self
. - Имена констант могут начинаться с не входящих в ASCII заглавных букв.
- Добавлены бесконечные диапазоны вида
(1..)
. - Добавлены
Enumerable#chain
иEnumerator#+
. - Для
Proc
иMethod
добавлены операторы композиции функций<<
и>>
. - Добавлен метод
Binding#source_location
, возвращающий массив из__FILE__
и__LINE__
, соответствующих местоположению привязки в исходном коде. Он рекомендуется к использованию вместоKernel#eval
, поскольку поведение последнего планируется изменить. - Для
Kernel#system
добавлен параметрexception:
, с которым он бросает исключение вместо возвратаfalse
. - Добавлен упрощённый режим для
Coverage
, при котором проверяется лишь факт вызова строк хотя бы раз. - Добавлен
FileUtils#cp_lr
. Он работает какcp_r
, но вместо копирования делает ссылки.
Улучшения производительности:
- Ускорен в 1.4 раза
Proc#call
путём избавления от временного создания$SAFE
. - Ускорен в 2.6 раза
block.call
в случаях, когда переданныйblock
является блочным параметром. - Добавлена Преходящая Куча (
theap
) — управляемая куча для краткоживущих объектов определённых классов (Array
,Hash
,Object
иStruct
), давшая улучшение производительности на 6-7%. - Нативные реализации (
arm32
,arm64
,ppc64le
,win32
,win64
,x86
иamd64
) корутин ради значительного улучшения производительности переключения контекстов в Fiber: на 64-разрядном LinuxFiber.yield
иFiber#resume
отрабатывают в 5 раз быстрее; в среднем стоит ожидать до 5% улучшения производительности для программ, активно использующих Fiber.
Другие важные изменения по сравнению с 2.5:
$SAFE
теперь является глобальным состоянием процесса и может быть сброшен в0
.- Передача
safe_level
вERB.new
объявлена устаревшей. Аргументыtrim_mode
иeoutvar
сделаны именованными. - Поддержка Unicode обновлена до 11-й версии, а в следующем минорном выпуске ожидается также поддержка 12 и 12.1.
- Влит RubyGems 3.0.1. Убраны ключи
--ri
и--rdoc
, используйте вместо них--document
и--no-document
. - Гем Bundler теперь устанавливается по умолчанию.
- В блоках обработки исключений
else
безrescue
теперь вызывает синтаксическую ошибку.
>>> Скачать (SHA1=c95f4e86e21390270dad3ebb94491fd42ee2ce69)
>>> Подробности
>>> Источник