Ruby

Продукт
Дата премьеры системы: 1995
Дата последнего релиза: 2022/12/25
Технологии: Средства разработки приложений

Содержание

Логотип Ruby

Ruby — динамический, рефлективный, интерпретируемый высокоуровневый язык программирования. Создатель Ruby — Юкихиро Мацумото (Matz).

2022: Ruby 3.2.0

25 декабря 2022 года стало известно о том, что состоялся релиз Ruby 3.2.0, динамического объектно-ориентированного языка программирования, отличающегося эффективностью разработки программ и вобравшего в себя черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3.

Ruby 3.2.0. Иллюстрация: ruby-lang.org.

Как сообщалось, основные изменения включают следующее:

  • Добавлен начальный порт интерпретатора CRuby, компилируемого в промежуточный код WebAssembly для запуска в web-браузере или под управлением обособленных runtime, таких как wasmtime. Для прямого взаимодействия с операционной системой при обособленном запуске используется API WASI (WebAssembly System Interface). Среди прочего предоставлена VFS обвязка поверх WASI, позволяющая упаковывать целиком всё приложение на языке Ruby в представление в виде одного wasm-файла. Запуск в браузере может использоваться для создания обучающих и демонстрационных web-сервисов, таких как TryRuby. На текущем этапе развития порт проходит тестовые наборы basic и bootstrap, в которых не применяется API Thread. В порте также не поддерживаются файберы (Fiber), исключения и сборка мусора.
  • Объявлен стабильным и готовым для рабочих применения внутрипроцессный JIT-компилятор YJIT, созданный разработчиками платформы электронной коммерции Shopify в рамках инициативы по увеличению производительности Ruby-программ, использующих фреймворк Rails и вызывающих много методов. Ключевым отличием от ранее используемого JIT-компилятора MJIT, базирующегося на обработке методов целиком и использующего внешний компилятор на языке Си, является то, что YJIT применяет версионирование базовых блоков (LBBV - Lazy Basic Block Versioning) и содержит интегрированный JIT-компилятор. Благодаря LBBV, JIT вначале компилирует только начало метода, а оставшуюся часть компилирует через некоторое время, после того как в процессе выполнения будет определены типы используемых переменных и аргументов. YJIT доступен для архитектур x86-64 и arm64/aarch64 в Linux, macOS, BSD и других UNIX-платформах. В отличие от СRuby код YJIT написан на языке Rust и требует для компиляции наличие компилятора rustc 1.58.0+, поэтому сборка YJIT по умолчанию отключена и является опциональной. При использовании YJIT зафиксирована оптимизация производительности при выполнении теста yjit-bench на 41% по сравнению с использованием интерпретации.
  • Добавлена дополнительная защита от атак, вызывающих отказ в обслуживании при обработке внешних данных в неэффективных и длительно выполняемых регулярных выражениях (ReDoS). Оптимизирован алгоритм сопоставления, в котором задействована техника мемоизации. Например, время выполнения выражения '/^a*b?a*$/ =~ "a" * 50000 + "x"' сократилось с 10 до 0.003 секунд. Ценой оптимизации является увеличение потребления памяти, расход которой примерно в 10 раз выше размера входных данных. Второй мерой защиты является возможность определения таймаута (например, "Regexp.timeout = 1.0"), за который должно успеть обработаться регулярное выражение.
  • В состав включён режим syntax_suggest, помогающий диагностировать причины ошибок, связанных с отсутствующим или лишним закрывающим выражением "end". В режим показа места ошибок добавлена возможность пометки аргументов при ошибках, связанных с типами и аргументами.
  • Добавлен синтаксис для перенаправления в другие методы наборов аргументов:

def foo(*)

bar(*)

end

def baz(**)

quux(**)

end

  • Предложен ruby_vm/mjit/compiler - вариант старого JIT-компилятора MJIT, переписанный на языке Ruby. Обеспечено выполнение MJIT в отдельном процессе, вместо выполнения в потоке MJIT worker.
  • В Bundler 2.4 при обработке зависимостей задействован определитель версий PubGrub, также применяемый в пакетном менеджере pub для языка Dart. Ранее используемый алгоритм Molinillo продолжает применяться в RubyGems, но в будущем также будет заменён на PubGrub.
  • Обновлены версии встроенных и входящих в стандартную библиотеку gem-модулей[1].

Языки программирования

Смотрите также

Примечания



Подрядчики-лидеры по количеству проектов

За всю историю
2021 год
2022 год
2023 год
Текущий год

  Солар (ранее Ростелеком-Солар) (46)
  Финансовые Информационные Системы (ФИС, FIS, Финсофт) (15)
  Форсайт (11)
  Axiom JDK (БеллСофт) ранее Bellsoft (10)
  Бипиум (Bpium) (10)
  Другие (388)

  Солар (ранее Ростелеком-Солар) (8)
  Финансовые Информационные Системы (ФИС, FIS, Финсофт) (4)
  Консом групп, Konsom Group (КонсОМ СКС) (2)
  ЛАНИТ - Би Пи Эм (Lanit BPM) (2)
  IFellow (АйФэлл) (2)
  Другие (30)

  Солар (ранее Ростелеком-Солар) (10)
  Banks Soft Systems, BSS (Бэнкс Софт Системс, БСС) (3)
  Форсайт (3)
  Cloud.ru (Облачные технологии) ранее SberCloud (2)
  КРИТ (KRIT) (2)
  Другие (13)

  Солар (ранее Ростелеком-Солар) (6)
  Unlimited Production (Анлимитед Продакшен, eXpress) (4)
  МТС Exolve (Межрегиональный ТранзитТелеком, МТТ) (4)
  Robin (Робин) (3)
  Форсайт (3)
  Другие (23)

  Unlimited Production (Анлимитед Продакшен, eXpress) (3)
  Солар (ранее Ростелеком-Солар) (3)
  МТС Exolve (Межрегиональный ТранзитТелеком, МТТ) (2)
  Banks Soft Systems, BSS (Бэнкс Софт Системс, БСС) (1)
  Effective Technologies (Эффектив Технолоджис) (1)
  Другие (8)

Распределение вендоров по количеству проектов внедрений (систем, проектов) с учётом партнёров

За всю историю
2021 год
2022 год
2023 год
Текущий год

  Солар (ранее Ростелеком-Солар) (2, 48)
  Microsoft (41, 47)
  Oracle (49, 26)
  Hyperledger (Open Ledger Project) (1, 23)
  IBM (33, 18)
  Другие (590, 303)

  Солар (ранее Ростелеком-Солар) (1, 8)
  Финансовые Информационные Системы (ФИС, FIS, Финсофт) (1, 4)
  Microsoft (4, 3)
  Oracle (2, 3)
  SAP SE (2, 2)
  Другие (16, 19)

  Солар (ранее Ростелеком-Солар) (1, 11)
  Banks Soft Systems, BSS (Бэнкс Софт Системс, БСС) (1, 3)
  Форсайт (1, 3)
  Сбербанк (1, 2)
  Cloud.ru (Облачные технологии) ранее SberCloud (1, 2)
  Другие (9, 9)

  Солар (ранее Ростелеком-Солар) (1, 6)
  Unlimited Production (Анлимитед Продакшен, eXpress) (1, 6)
  Мобильные ТелеСистемы (МТС) (1, 4)
  МТС Exolve (Межрегиональный ТранзитТелеком, МТТ) (1, 4)
  Форсайт (1, 3)
  Другие (14, 24)

  Мобильные ТелеСистемы (МТС) (2, 3)
  Солар (ранее Ростелеком-Солар) (1, 3)
  Unlimited Production (Анлимитед Продакшен, eXpress) (1, 3)
  МТС Exolve (Межрегиональный ТранзитТелеком, МТТ) (1, 2)
  Сбербанк (1, 1)
  Другие (11, 11)

Распределение систем по количеству проектов, не включая партнерские решения

За всю историю
2021 год
2022 год
2023 год
Текущий год

  Solar appScreener (ранее Solar inCode) - 48
  Hyperledger Fabric - 23
  Windows Azure - 20
  FIS Platform - 15
  Форсайт. Мобильная платформа (ранее HyperHive) - 12
  Другие 323

  Solar appScreener (ранее Solar inCode) - 8
  FIS Platform - 4
  Siemens Xcelerator - 2
  Парадокс: MES Builder - 2
  Турбо X - 2
  Другие 22

  Solar appScreener (ранее Solar inCode) - 11
  BSS Digital2Go - 3
  Форсайт. Мобильная платформа (ранее HyperHive) - 3
  Cloud ML Space - 2
  Nexign Microservices Framework - 1
  Другие 8

  EXpress Защищенный корпоративный мессенджер - 6
  Solar appScreener (ранее Solar inCode) - 6
  МТС Exolve - 4
  Форсайт. Мобильная платформа (ранее HyperHive) - 3
  РЖД и Робин: Облачная фабрика программных роботов - 3
  Другие 14

  Solar appScreener (ранее Solar inCode) - 3
  EXpress Защищенный корпоративный мессенджер - 3
  МТС Exolve - 2
  МТС: Ocean Облачная платформа - 1
  Т1: Сфера Платформа производства ПО - 1
  Другие 8