روبی پروگرامنگ لینگویج کی ریلیز 3.2

روبی 3.2.0 کو جاری کیا گیا، ایک متحرک آبجیکٹ پر مبنی پروگرامنگ زبان جو پروگرام کی ترقی میں انتہائی موثر ہے اور اس میں پرل، جاوا، ازگر، سمال ٹاک، ایفل، اڈا اور لِسپ کی بہترین خصوصیات شامل ہیں۔ پروجیکٹ کوڈ BSD ("2-شق BSDL") اور "روبی" لائسنس کے تحت تقسیم کیا گیا ہے، جو GPL لائسنس کے تازہ ترین ورژن کا حوالہ دیتا ہے اور GPLv3 کے ساتھ مکمل طور پر مطابقت رکھتا ہے۔

اہم بہتری:

  • Добавлен начальный порт интерпретатора 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% по сравнению с использованием интерпретации.

    روبی پروگرامنگ لینگویج کی ریلیز 3.2

  • Добавлена дополнительная защита от атак, вызывающих отказ в обслуживании при обработке внешних данных в неэффективных и длительно выполняемых регулярных выражениях (ReDoS). Значительно улучшен алгоритм сопоставления, в котором задействована техника меморизации. Например, время выполнения выражения ‘/^a*b?a*$/ =~ «a» * 50000 + «x»‘ сократилось с 10 до 0.003 секунд. Ценой оптимизации является увеличение потребления памяти, расход которой примерно в 10 раз выше размера входных данных. Второй мерой защиты является возможность определения таймаута (например, «Regexp.timeout = 1.0»), за который должно успеть обработаться регулярное выражение.
  • В состав включён режим syntax_suggest, помогающий диагностировать причины ошибок, связанных с отсутствующим или лишним закрывающим выражением «end». Unmatched `end’, missing keyword (`do’, `def`, `if`, etc.) ? 1 class Dog > 2 defbark > 3 end 4 end
  • В режим показа места ошибок добавлена возможность пометки аргументов при ошибках, связанных с типами и аргументами, например: test.rb:2:in `+’: nil can’t be coerced into Integer (TypeError) sum = ary[0] + ary[1] ^^^^^^
  • Добавлен новый синтаксис для перенаправления в другие методы наборов аргументов: 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.
  • بلٹ ان جیم ماڈیولز کے تازہ ترین ورژن اور معیاری لائبریری میں شامل۔

ماخذ: opennet.ru

نیا تبصرہ شامل کریں