Vrystelling van die Ruby-programmeertaal 3.2

Ruby 3.2.0 is vrygestel, 'n dinamiese objekgeoriënteerde programmeertaal wat hoogs doeltreffend in programontwikkeling is en die beste kenmerke van Perl, Java, Python, Smalltalk, Eiffel, Ada en Lisp insluit. Die projekkode word onder die BSD ("2-klousule BSDL") en "Ruby"-lisensies versprei, wat verwys na die nuutste weergawe van die GPL-lisensie en ten volle versoenbaar is met GPLv3.

Belangrikste verbeterings:

  • Bygevoeg 'n aanvanklike poort van die Cruby tolk, wat saamstel in WebAssembly intermediêre kode vir hardloop in 'n webblaaier of onder selfstandige looptye soos wasmtime. Vir direkte interaksie met die bedryfstelsel wanneer dit apart loop, word die WASI (WebAssembly System Interface) API gebruik. 'n VFS-omhulsel word onder meer bo-op WASI verskaf, wat jou toelaat om die hele Ruby-toepassing in 'n aanbieding in die vorm van 'n enkele wasm-lêer te verpak. Om in 'n blaaier te hardloop, kan gebruik word om opleidings- en demonstrasiewebdienste soos TryRuby te skep. Op die huidige stadium van ontwikkeling slaag die poort die basiese en selflaai-toetssuites suksesvol, wat nie die Thread API gebruik nie. Die hawe ondersteun ook nie vesels, uitsonderings of vullisverwydering nie.
  • Die YJIT-proses JIT-samesteller, geskep deur die ontwikkelaars van die e-handelsplatform Shopify as deel van 'n inisiatief om die werkverrigting van Ruby-programme wat die Rails-raamwerk gebruik en baie metodes gebruik, te verhoog, is stabiel verklaar en gereed vir produksie gebruik. Die belangrikste verskil van die voorheen gebruikte MJIT JIT-samesteller, wat gebaseer is op die verwerking van hele metodes en 'n eksterne samesteller in die C-taal gebruik, is dat YJIT Lazy Basic Block Versioning (LBBV) gebruik en 'n geïntegreerde JIT-samesteller bevat. Met LBBV stel JIT eers net die begin van die metode saam, en stel die res 'n rukkie later saam, nadat die tipe veranderlikes en argumente wat gebruik word tydens uitvoering bepaal is. YJIT is beskikbaar vir x86-64 en arm64/aarch64 argitekture op Linux, MacOS, BSD en ander UNIX platforms.

    Anders as Ruby, is die YJIT-kode in die Rust-taal geskryf en vereis dit die rustc 1.58.0+ samesteller vir samestelling, so die YJIT-bou is by verstek gedeaktiveer en is opsioneel. By die gebruik van YJIT, is 'n 41% toename in prestasie aangeteken wanneer die yjit-bench-toets uitgevoer word in vergelyking met die gebruik van interpretasie.

    Vrystelling van die Ruby-programmeertaal 3.2

  • Bykomende beskerming teen ontkenningsaanvalle bygevoeg wanneer eksterne data in ondoeltreffende en tydrowende gereelde uitdrukkings (ReDoS) verwerk word. Die bypassende algoritme, wat die memoriseringstegniek gebruik, is aansienlik verbeter. Byvoorbeeld, die uitvoeringstyd van die uitdrukking '/^a*b?a*$/ =~ "a" * 50000 + "x"' is van 10 tot 0.003 sekondes verminder. Die koste van optimalisering is 'n toename in geheueverbruik, waarvan die verbruik ongeveer 10 keer hoër is as die grootte van die insetdata. Die tweede sekuriteitsmaatreël is die vermoë om 'n time-out te definieer (byvoorbeeld, "Regexp.timeout = 1.0") waartydens die gereelde uitdrukking verwerk moet word.
  • Die syntax_suggest-modus is ingesluit, wat help om die oorsake van foute wat verband hou met 'n ontbrekende of ekstra sluiting "einde" uitdrukking te diagnoseer. Onooreenstemmende `einde', ontbrekende sleutelwoord (`doen', `def`, `as`, ens.) ? 1 klas Hond > 2 defbark > 3 end 4 end
  • Die vermoë om argumente te merk vir foute wat met tipes en argumente verband hou, is by die foutligging vertoonmodus gevoeg, byvoorbeeld: test.rb:2:in `+': nul kan nie in heelgetal (TypeError) som = ary gedwing word nie [0] + ary [1] ^^^^^^
  • Nuwe sintaksis bygevoeg om stelle argumente na ander metodes te herlei: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler word voorgestel - 'n variant van die ou MJIT JIT samesteller, herskryf in die Ruby-taal. Verseker dat MJIT in 'n aparte proses loop in plaas daarvan om in 'n MJIT-werkerdraad te loop.
  • In Bundler 2.4 gebruik afhanklikheidsverwerking die PubGrub-weergawe-detektor, wat ook in die kroegpakketbestuurder vir die Dart-taal gebruik word. Die voorheen gebruikte Molinillo-algoritme word steeds in RubyGems gebruik, maar sal ook in die toekoms deur PubGrub vervang word.
  • Opgedateerde weergawes van ingeboude juweelmodules en dié wat by die standaardbiblioteek ingesluit is.

Bron: opennet.ru

Voeg 'n opmerking