Опубликован язык программирования Ruby 4.0
Состоялся релиз Ruby 4.0.0, динамического объектно-ориентированного языка программирования, сосредоточенного на высокой эффективности разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD (»2-clause BSDL») и «Ruby», которая ссылается на последний вариант лицензии GPL и совместима с GPLv3.
Основные улучшения:
В состав включён новый JIT-компилятор ZJIT, позиционируемый как следующее поколение Ruby JIT. По умолчанию продолжает использоваться JIT-компилятор YJIT, а ZJIT включён в качестве опции (активируется флагом »--zjit»). Как и YJIT новый JIT-компилятор написан на языке Rust командой разработчиков из компании Shopify в рамках инициативы по увеличению производительности Ruby-программ, использующих фреймворк Rails и вызывающих очень много методов. На текущем этапе развития ZJIT быстрее интерпретатора, но пока отстаёт по производительности от YJIT.
В отличие от YJIT новый JIT-компилятор транслирует байткод виртуальной машины YARV не в низкоуровневое промежуточное представление, близкое к машинному коду, а в высокоуровневое промежуточное представление SSA (Static Single Assignment), позволяющее выполнять дополнительные фазы оптимизации и проводить оптимизацию крупных блоков кода, а не только текущих операций. Для привлечения к работе новых участников ZJIT реализует классическую архитектуру JIT, использующую накопленные интерпретатором исторические данные о типах, вместо применённой в YJIT усложнённой техники версионирования базовых блоков (LBBV — Lazy Basic Block Versioning).
Добавлен экспериментальный класс Ruby: Box с реализацией механизма изоляции, позволяющего разделить выполнение в одном процессе классов, модулей и monkey-патчей (подменённых методов и атрибутов классов). При помощи Ruby: Box также можно отделить выполнение кода приложения от Ruby-библиотек, обеспечить изоляцию тестов и организовать параллельное выполнение web-обработчиков в одном процессе сервера приложений (например, для постепенной замены одной версии кода на другую или обновления зависимостей). Для активации Ruby: Box следует выставить переменную окружения «RUBY_BOX=1».
Модернизирована реализация модели акторов Ractor, предоставляющая абстракцию в стиле «акторов» (ruby actor) для обеспечения потокобезопасного параллельного выполнения программы с взаимодействием между потоками через передачу сообщений. Добавлен класс Ractor: Port, решающий проблемы, связанные с отправкой и приёмом сообщений. Добавлен метод Ractor.shareable_proc для упрощения совместного доступа к объектам Proc из разных акторов. Проведена оптимизация структур данных, нацеленная на сокращение конфликтов при выставлении глобальных блокировок и повышения эффективности использования кэша CPU. В следующем году Ractor планируют перевести в разряд стабильных возможностей.
Оператор »*nil» теперь сразу возвращает пустой массив (»[]») без промежуточного вызова метода «nil.to_a», по аналогии с тем как »**nil» сразу возвращает пустой хэш, не вызывая «nil.to_hash».
- Разрешено разбивать строки с логическими операторами »||»,»&&», «and» и «or» таким образом, что следующая строка начинается с оператора.
if condition1 && condition2 ... end Добавлены методы Array#find и «Array#rfind» для более эффективного поиска элементов в массиве, работающие быстрее, чем «array.reverse_each.find» и «Enumerable#find».
Источник: http://www.opennet.ru/opennews/art.shtml? num=64494
© OpenNet
