Опубликован язык программирования Ruby 4.0

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 827
Зарегистрирован: 20.08.2022

#

Опубликован язык программирования Ruby 4.0
Дата публикации:Thu, 25 Dec 2025 13:08:00 +0300

Состоялся релиз 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 (ожидается, что в Ruby 4.1 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". # foo.rb class String def self.foo = "foo" end # main.rb box = Ruby::Box.new box.require('foo') Модернизирована реализация модели акторов Ractor, предоставляющая абстракцию в стиле "акторов" (ruby actor) для обеспечения потокобезопасного параллельного выполнения программы с взаимодействием между потоками через передачу сообщений. Добавлен класс Ractor::Port, решающий проблемы, связанные с отправкой и приёмом сообщений. Добавлен метод Ractor.shareable_proc для упрощения совместного доступа к объектам Proc из разных акторов. Проведена оптимизация структур данных, нацеленная на сокращение конфликтов при выставлении глобальных блокировок и повышения эффективности использования кэша CPU. В следующем году Ractor планируют перевести в разряд стабильных возможностей. port1 = Ractor::Port.new port2 = Ractor::Port.new Ractor.new port1, port2 do |port1, port2| port1 << 1 port2 << 11 port1 << 2 port2 << 12 end 2.times{ p port1.receive } #=> 1, 2 2.times{ p port2.receive } #=> 11, 12 Оператор "*nil" теперь сразу возвращает пустой массив ("[]") без промежуточного вызова метода "nil.to_a", по аналогии с тем как "**nil" сразу возвращает пустой хэш, не вызывая "nil.to_hash". Разрешено разбивать строки с логическими операторами "||", "&&", "and" и "or" таким образом, что следующая строка начинается с оператора. if condition1 && condition2 ... end Добавлены методы Array#find и "Array#rfind" для более эффективного поиска элементов в массиве, работающие быстрее, чем "array.reverse_each.find" и "Enumerable#find". В число встроенных классов переведены классы Set и Pathname. Расширены возможности многих базовых классов, таких как Binding, Enumerator, ErrorHighlight, Fiber, File, IO, Kernel, Math, Proc, Range, Socket, String, Thread. Обновлены версии встроенных и входящих в стандартную библиотеку gem-модулей.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64494

Жизнь за Нер'зула!

Ответить