Documentation for a newer release is available. View Latest

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.

См. объявление о выпуске для получения более подробной информации об этом выпуске.