Ruby
Ruby 2.6
Ruby 2.6 — последняя стабильная версия Ruby. Включено множество новых функций и улучшений для удовлетворения всё более разнообразных и растущих потребностей Ruby. С этим крупным обновлением с Ruby 2.5 в Fedora 29 до Ruby 2.6 в Fedora 30 Fedora становится превосходной платформой для разработки на Ruby.
Заметные изменения включают:
-
Доступна начальная реализация JIT-компилятора (Just-In-Time). JIT-компилятор направлен на повышение производительности выполнения любых программ Ruby. В отличие от обычных JIT-компиляторов для других языков, JIT-компилятор Ruby выполняет JIT-компиляцию уникальным способом: он выводит C-код на диск и запускает процесс обычного C-компилятора для генерации машинного кода.
Основная цель этого выпуска JIT — предоставить возможность проверить, работает ли он на вашей платформе, и выявить риски безопасности до выпуска версии 2.6. JIT-компилятор поддерживается, когда Ruby собран с помощью GCC, Clang или Microsoft VC++, которые должны быть доступны во время выполнения. В противном случае использовать его пока нельзя.
По состоянию на Ruby 2.6.0 preview3 мы достигли производительности в 1.7 раза выше, чем Ruby 2.5, на ресурсоёмкой нетривиальной тестовой нагрузке Optcarrot. Производительность на нагрузках, интенсивно использующих память, таких как приложения Rails, также будет улучшена.
-
Теперь доступен новый экспериментальный модуль
RubyVM::AST. Этот модуль имеет методparse, который анализирует заданный строковый код Ruby и возвращает узлы AST (абстрактного синтаксического дерева), и методparse_file, который анализирует заданный файл с кодом Ruby и возвращает узлы AST. Также представлен классRubyVM::AST::Node. Вы можете получить информацию о местоположении и дочерние узлы из объектов Node. Эта функция является экспериментальной. Совместимость структуры узлов AST не гарантируется. -
Новые функции:
-
Добавлен новый псевдоним
thenдляKernel#yield_self. -
Добавлен
Random.bytes. -
Добавлен
Binding#source_location. Этот метод возвращает исходное местоположение привязки, массив из двух элементовFILEиLINE. -
Добавлена опция
:exception, чтобыKernel.#systemвызывала ошибку вместо возврата false. -
elseбезrescueтеперь вызывает синтаксическую ошибку. [ЭКСПЕРИМЕНТАЛЬНО] -
Имена констант могут начинаться с не-ASCII заглавной буквы.
-
Введён бесконечный диапазон
(1..). Он работает так, как будто не имеет конца.
-
Были сделаны следующие улучшения производительности:
-
Ускорен
Proc#call, поскольку больше не нужно заботиться о$SAFE. Тестlc_fizzbuzzпоказывает улучшение скорости на 40%. -
Ускорен
block.call, где блок передаётся как параметр блока. Ruby 2.6 улучшает производительность вызова переданного блока. На микробенчмарках можно наблюдать ускорение в 2.6 раза. -
Введена временная куча (
theap).theap— это управляемая куча для короткоживущих объектов памяти, на которые ссылаются определённые классы. Например, создание маленького и короткоживущего объекта Hash выполняется вдвое быстрее. На тестеrdocнаблюдается улучшение производительности на 6-7%.
Другие заметные изменения с версии 2.5:
-
$SAFEявляется глобальным состоянием процесса, и мы снова можем установить 0. -
Передача
safe_levelвERB.newобъявлена устаревшей. Аргументыtrim_modeиeoutvarтеперь являются именованными аргументами. -
Включён RubyGems 3.0.0.beta2.
-
Bundler включён как стандартный gem.
См. объявление о выпуске для получения более подробной информации об этом выпуске.
Want to help? Learn how to contribute to Fedora Docs ›