The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

25.12.2025 13:08

Состоялся релиз 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-модулей.


  1. Главная ссылка к новости (https://www.ruby-lang.org/en/n...)
  2. OpenNews: Основные разработчики Ruby взяли на себя управление GitHub-репозиторием RubyGems
  3. OpenNews: Отстранённые мэйнтейнеры RubyGems.org основали альтернативный репозиторий Gem Cooperative
  4. OpenNews: Опубликован язык программирования Ruby 3.4.0
  5. OpenNews: В кодовую базу Ruby принят новый JIT-компилятор ZJIT
  6. OpenNews: Доступен встраиваемый интерпретатор mruby 3.2
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64494-ruby
Ключевые слова: ruby
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (13) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 13:45, 25/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    >Разрешено разбивать строки с логическими операторами "||", "&&", "and" и "or" таким образом, что следующая строка начинается с оператора.

    Не прошло и 10 лет

     
  • 1.2, Аноним (2), 13:55, 25/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну. Тот один проект, который используется, когда-нибудь переползет на эту версию. Но это не точно.
     
     
  • 2.9, mos87 (ok), 14:47, 25/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    1 миллион проектов на RoR действительно если и будет переползать, то долго.
     
     
  • 3.13, Аноним (2), 15:11, 25/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я же говорю - "который используется".
     

  • 1.3, Аноним (3), 13:58, 25/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Какова актуальность данного языка в 2025 году?
     
     
  • 2.4, Аноним (4), 14:15, 25/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Актуальная актуальность - куча новых веб-приложений стартует на рельсах
     
     
  • 3.5, Аноним (3), 14:18, 25/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В смысле, fullstack на RoR, или только бэкенд (api)? Вроде как сейчас отдельные фронтенды и бэкенды в моде.
     
  • 3.7, Аноним (7), 14:45, 25/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Прямо таки кучи?
     
  • 3.8, penetrator (?), 14:46, 25/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    примеры есть?
     
     
  • 4.10, Анонимный Анон (?), 14:59, 25/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как минимум кучи компаний и организаций используют GitLab
     
  • 2.12, Аноним (12), 15:05, 25/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ровно зеро.
     

  • 1.6, Аноним (6), 14:42, 25/12/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.11, Аноним (12), 15:05, 25/12/2025 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру