Vydání programovacího jazyka Ruby 3.2

Byl vydán Ruby 3.2.0, dynamický objektově orientovaný programovací jazyk, který je vysoce účinný při vývoji programů a zahrnuje nejlepší vlastnosti Perlu, Javy, Pythonu, Smalltalku, Eiffela, Ada a Lisp. Kód projektu je distribuován pod licencí BSD („2-klauzule BSDL“) a „Ruby“, která odkazuje na nejnovější verzi licence GPL a je plně kompatibilní s GPLv3.

Hlavní vylepšení:

  • Přidán počáteční port interpretu CRuby, který se zkompiluje do přechodného kódu WebAssembly pro spuštění ve webovém prohlížeči nebo v samostatných runtimech, jako je wasmtime. Pro přímou interakci s operačním systémem při samostatném spuštění se používá API WASI (WebAssembly System Interface). Kromě jiného je nad WASI poskytován obal VFS, který umožňuje zabalit celou aplikaci Ruby do prezentace ve formě jednoho souboru wasm. Spuštění v prohlížeči lze použít k vytvoření školicích a ukázkových webových služeb, jako je TryRuby. V současné fázi vývoje port úspěšně prošel základními a bootstrap testovacími sadami, které nepoužívají Thread API. Port také nepodporuje Fibers, výjimky nebo garbage collection.
  • In-process JIT kompilátor YJIT, který vytvořili vývojáři e-commerce platformy Shopify jako součást iniciativy ke zvýšení výkonu programů Ruby, které využívají framework Rails a volají spoustu metod, byl prohlášen za stabilní a připravený pro výrobní využití. Klíčový rozdíl oproti dříve používanému kompilátoru MJIT JIT, který je založen na zpracování celých metod a využívá externí kompilátor v jazyce C, je v tom, že YJIT používá Lazy Basic Block Versioning (LBBV) a obsahuje integrovaný JIT kompilátor. S LBBV JIT nejprve zkompiluje pouze začátek metody a zbytek zkompiluje o něco později, poté, co se během provádění určí typy proměnných a použitých argumentů. YJIT je k dispozici pro architektury x86-64 a arm64/aarch64 na Linuxu, MacOS, BSD a dalších platformách UNIX.

    Na rozdíl od Ruby je kód YJIT napsán v jazyce Rust a ke kompilaci vyžaduje kompilátor rustc 1.58.0+, takže sestavení YJIT je ve výchozím nastavení zakázáno a je volitelné. Při použití YJIT byl zaznamenán 41% nárůst výkonu při provádění yjit-bench testu ve srovnání s použitím interpretace.

    Vydání programovacího jazyka Ruby 3.2

  • Přidána další ochrana proti útokům odmítnutí služby při zpracování externích dat v neefektivních a časově náročných regulárních výrazech (ReDoS). Algoritmus párování, který využívá techniku ​​zapamatování, byl výrazně vylepšen. Například doba provádění výrazu '/^a*b?a*$/ =~ "a" * 50000 + "x"' byla snížena z 10 na 0.003 sekundy. Cenou optimalizace je zvýšení spotřeby paměti, jejíž spotřeba je přibližně 10x vyšší než velikost vstupních dat. Druhým bezpečnostním opatřením je možnost definovat časový limit (například „Regexp.timeout = 1.0“), během kterého musí být regulární výraz zpracován.
  • Je zahrnut režim syntax_suggest, který pomáhá diagnostikovat příčiny chyb spojených s chybějícím nebo nadbytečným uzavíracím výrazem „end“. Neodpovídá `end', chybí klíčové slovo (`do', `def`, `if` atd.) ? 1 třída Pes > 2 defbark > 3 konec 4 konec
  • Do režimu zobrazení místa chyby byla přidána možnost označit argumenty pro chyby související s typy a argumenty, například: test.rb:2:in `+': nil nelze převést na Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Přidána nová syntaxe pro přesměrování sad argumentů na jiné metody: def foo(*) bar(*) end def baz(**) quux(**) end
  • Navrhuje se Ruby_vm/mjit/compiler - varianta starého kompilátoru MJIT JIT, přepsaného do jazyka Ruby. Zajištěno, že MJIT běží v samostatném procesu namísto spouštění v pracovním vláknu MJIT.
  • V Bundleru 2.4 používá zpracování závislostí detektor verzí PubGrub, používaný také ve správci balíčků pub pro jazyk Dart. Dříve používaný Molinillo algoritmus se nadále používá v RubyGems, ale v budoucnu bude také nahrazen PubGrub.
  • Aktualizované verze vestavěných drahokamových modulů a těch, které jsou součástí standardní knihovny.

Zdroj: opennet.ru

Přidat komentář