Ruby 2.6 Добавляет JIT-компилятор

Ruby 2.6 был выпущен с экспериментальным JIT-компилятором и модулем абстрактного синтаксического дерева.

Ruby приобрел популярность потому, что помимо того, что он интересен в использовании, он полезен благодаря сочетанию различных стилей программирования – функционального, динамического и объектно-ориентированного.

JIT является основным улучшением новой версии и, хотя все еще находится на экспериментальной стадии, улучшит производительность кода, особенно для рабочих нагрузок, которые интенсивно используют процессор. Разработчики говорят, что их бенчмарки показали улучшения в 1,7 раза быстрее, чем Ruby 2.5 для подобных программ (фактическим тестом был бенчмарк под названием Optcarrot. Разработчики отмечают, что компилятор все еще является экспериментальным, и многие другие рабочие нагрузки с большим объемом памяти, такие как Rails, могут не извлечь из него пользы в данный момент.

JIT-компилятор также заслуживает внимания, потому что он работает иначе, чем JIT-компиляторы на других языках. JIT-компилятор Ruby печатает код C на диск и создает общий процесс компилятора C для создания собственного кода.

Компилятор JIT поддерживается, когда Ruby создается GCC, Clang или Microsoft VC++, который должен быть доступен во время выполнения. Будущие версии будут включать в себя встраивание методов, что, как ожидается, увеличит производительность Ruby на порядок.

Помимо JIT-компилятора, предварительный просмотр включает в себя новый модуль RubyVM::AST. Этот модуль имеет метод синтаксического анализа, который анализирует данный код ruby, представляющий собой строку, и возвращает набор узлов AST (Абстрактное синтаксическое дерево). Модуль также имеет метод parse_file, который анализирует данный файл кода Ruby и возвращает узлы AST. Еще один введенный класс-RubyVM::AbstractSyntaxTree::Node. Это позволяет получить исходное местоположение и дочерние узлы из объектов узлов. Эта функция является экспериментальной.

Другие новые функции включают добавление бесконечного диапазона, который можно использовать без указания размера диапазона; и метод Add Binding#source_location, который возвращает исходное местоположение. 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *