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)
>>> Подробности
>>> Источник







