Был выпущен Ruby 3. Эта основная новая версия имеет цели повышения производительности, параллелизма и поддержки набора текста. Главным улучшением является производительность, и Юкихиро Мацумото, он же Мац, главный дизайнер Ruby, сказал, что Ruby 3 будет в три раза быстрее, чем Ruby 2.
Ruby завоевал популярность, потому что, помимо того, что он интересен в использовании, он полезен благодаря сочетанию различных стилей программирования — функционального, динамического и объектно-ориентированного.
Тесты, выполняемые с использованием бенчмарка Optcarrot, который измеряет производительность одного потока на основе рабочей нагрузки эмуляции игр NES, Ruby 3 показал обещанную производительность в три раза быстрее, чем Ruby 2.0.
Производительность достигается с помощью Ruby 3.0 при использовании в режиме JIT. Это новое в Ruby 3 и должно обеспечить повышение производительности в ограниченных рабочих нагрузках, таких как игры, искусственный интеллект и другие приложения, где большая часть времени тратится на многократный вызов нескольких методов. Разработчики говорят, что, хотя Ruby 3.0 значительно уменьшил размер JIT-кода, он все еще не готов к оптимизации рабочих нагрузок, таких как Rails, которые часто тратят время на многие методы и поэтому страдают от промахов i-кэша. Это будет усугубляться JIT, поэтому производительность на самом деле будет хуже. Разработчики говорят, что Ruby 3.1 предложит дальнейшие улучшения по этому вопросу.
Еще одна область, которая способствовала повышению производительности, — это добавление лучшей поддержки параллелизма. В новом выпуске добавлена экспериментальная поддержка Ractor, а также асинхронного волокна. Ractor-это акторная модель, подобная параллельной абстракции, которая может обеспечить функцию параллельного выполнения без проблем с безопасностью потоков. Это достигается за счет того, что гонщики не разделяют обычные объекты; связь между гонщиками поддерживается путем обмена сообщениями.
Экспериментальный характер Ractor означает, что спецификация и реализация могут быть изменены в будущем.
Планировщик волокон также был введен для перехвата операций блокировки. Это позволяет обеспечить легкий параллелизм без изменения существующего кода.
Другие улучшения добавляют поддержку статической типизации. Разработчики создали “основополагающий язык сигнатур типов” под названием RBS, который используется для описания типов программ Ruby. Идея заключается в том, что RBS будет поддерживать общепринятые шаблоны в программах Ruby и позволит разработчикам создавать расширенные типы, включая типы объединения, перегрузку методов и универсальные типы. Он также поддерживает типизацию утки с типами интерфейса.
Ruby 3.0 поставляется с драгоценным камнем rbs, который позволяет анализировать и обрабатывать определения типов, написанные в RBS. Команда Ruby говорит, что средства проверки типов, включая TypeProf и другие инструменты, поддерживающие RBS, будут намного лучше понимать программы Ruby с определениями RBS.