Frigivelse af Ruby-programmeringssproget 3.2

Ruby 3.2.0 blev udgivet, et dynamisk objektorienteret programmeringssprog, der er yderst effektivt i programudvikling og inkorporerer de bedste funktioner fra Perl, Java, Python, Smalltalk, Eiffel, Ada og Lisp. Projektkoden distribueres under BSD ("2-klausul BSDL") og "Ruby"-licenser, som refererer til den seneste version af GPL-licensen og er fuldt ud kompatibel med GPLv3.

Vigtigste forbedringer:

  • Tilføjet en indledende port for Cruby-fortolkeren, som kompilerer til WebAssembly-mellemkode til at køre i en webbrowser eller under selvstændige runtimes såsom wasmtime. Til direkte interaktion med operativsystemet, når det kører separat, bruges WASI (WebAssembly System Interface) API. Blandt andet leveres en VFS-indpakning oven på WASI, som giver dig mulighed for at pakke hele Ruby-applikationen ind i en præsentation i form af en enkelt wasm-fil. Kørsel i en browser kan bruges til at oprette trænings- og demowebtjenester såsom TryRuby. På det nuværende udviklingstrin består porten med succes de grundlæggende og bootstrap-testpakker, som ikke bruger Thread API. Porten understøtter heller ikke fibre, undtagelser eller affaldsindsamling.
  • YJIT in-process JIT compiler, skabt af udviklerne af Shopify e-handelsplatformen som en del af et initiativ til at øge ydeevnen af ​​Ruby programmer, der bruger Rails frameworket og kalder en masse metoder, er blevet erklæret stabil og klar til produktionsanvendelse. Den vigtigste forskel fra den tidligere brugte MJIT JIT compiler, som er baseret på behandling af hele metoder og bruger en ekstern compiler i C-sproget, er, at YJIT bruger Lazy Basic Block Versioning (LBBV) og indeholder en integreret JIT compiler. Med LBBV kompilerer JIT først kun begyndelsen af ​​metoden, og kompilerer resten noget tid senere, efter at de anvendte variabler og argumenter er bestemt under udførelsen. YJIT er tilgængelig for x86-64 og arm64/aarch64 arkitekturer på Linux, MacOS, BSD og andre UNIX platforme.

    I modsætning til Ruby er YJIT-koden skrevet på Rust-sproget og kræver rustc 1.58.0+-kompileren til kompilering, så YJIT-builden er deaktiveret som standard og er valgfri. Ved brug af YJIT blev der registreret en stigning på 41 % i ydeevne, når man kørte yjit-bench-testen sammenlignet med brug af fortolkning.

    Frigivelse af Ruby-programmeringssproget 3.2

  • Tilføjet yderligere beskyttelse mod lammelsesangreb ved behandling af eksterne data i ineffektive og tidskrævende regulære udtryk (ReDoS). Matchningsalgoritmen, som bruger husketeknikken, er blevet væsentligt forbedret. For eksempel blev udførelsestiden for udtrykket '/^a*b?a*$/ =~ "a" * 50000 + "x"' reduceret fra 10 til 0.003 sekunder. Omkostningerne ved optimering er en stigning i hukommelsesforbruget, hvis forbrug er cirka 10 gange højere end størrelsen af ​​inputdataene. Den anden sikkerhedsforanstaltning er evnen til at definere en timeout (f.eks. "Regexp.timeout = 1.0"), hvor det regulære udtryk skal behandles.
  • Syntax_suggest-tilstanden er inkluderet, som hjælper med at diagnosticere årsagerne til fejl forbundet med et manglende eller ekstra afsluttende "slut"-udtryk. Umatchede 'slut', mangler søgeord ('gør', 'def', 'hvis' osv.) ? 1 klasse Hund > 2 defbark > 3 ende 4 ende
  • Muligheden for at markere argumenter for fejl relateret til typer og argumenter er blevet tilføjet til fejlplaceringsvisningstilstanden, for eksempel: test.rb:2:in `+': nul kan ikke tvinges til heltal (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Tilføjet ny syntaks til omdirigering af sæt af argumenter til andre metoder: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler er foreslået - en variant af den gamle MJIT JIT compiler, omskrevet på Ruby-sproget. Sikret, at MJIT kører i en separat proces i stedet for at køre i en MJIT-arbejdertråd.
  • I Bundler 2.4 bruger afhængighedsbehandling PubGrub-versionsdetektoren, også brugt i pub-pakkehåndteringen til Dart-sproget. Den tidligere brugte Molinillo-algoritme bliver fortsat brugt i RubyGems, men vil også i fremtiden blive erstattet af PubGrub.
  • Opdaterede versioner af indbyggede ædelstensmoduler og dem, der er inkluderet i standardbiblioteket.

Kilde: opennet.ru

Tilføj en kommentar