Eldono de la Ruby programlingvo 3.2

Ruby 3.2.0 estis publikigita, dinamika objekt-orientita programlingvo kiu estas tre efika en programevoluo kaj korpigas la plej bonajn funkciojn de Perl, Java, Python, Smalltalk, Eiffel, Ada kaj Lisp. La projektkodo estas distribuita sub la permesiloj BSD ("2-paragrafo BSDL") kaj "Ruby", kiuj rilatas al la plej nova versio de la GPL-licenco kaj estas plene kongrua kun GPLv3.

Ĉefaj plibonigoj:

  • Aldonis komencan havenon de la CRuby-interpretisto, kiu kompilas en WebAssembly-interan kodon por funkcii en retumilo aŭ sub memstaraj rultempoj kiel wasmtime. Por rekta interago kun la operaciumo dum funkciado aparte, la WASI (WebAssembly System Interface) API estas uzata. Interalie, VFS-envolvaĵo estas provizita supre de WASI, kiu permesas vin paki la tutan Ruby-aplikaĵon en prezenton en la formo de ununura wasm-dosiero. Kurado en retumilo povas esti uzata por krei trejnadon kaj pruvajn retservojn kiel TryRuby. En la nuna etapo de evoluo, la haveno sukcese trapasas la bazajn kaj bootstrap-testajn seriojn, kiuj ne uzas la Thread API. La haveno ankaŭ ne subtenas Fibrojn, esceptojn aŭ rubkolekton.
  • La enproceza JIT-kompililo YJIT, kreita de la programistoj de la retkomerca platformo Shopify kiel parto de iniciato por pliigi la agadon de Ruby-programoj, kiuj uzas la Rails-kadron kaj nomas multajn metodojn, estis deklarita stabila kaj preta por produktada uzo. La ŝlosila diferenco de la antaŭe uzita MJIT JIT-kompililo, kiu baziĝas sur prilaborado de tutaj metodoj kaj uzas eksteran kompililon en la C-lingvo, estas ke YJIT uzas Lazy Basic Block Versioning (LBBV) kaj enhavas integran JIT-kompililon. Kun LBBV, JIT unue kompilas nur la komencon de la metodo, kaj kompilas la reston iom poste, post kiam la specoj de variabloj kaj argumentoj uzitaj estas determinitaj dum ekzekuto. YJIT disponeblas por arkitekturoj x86-64 kaj arm64/aarch64 sur Linukso, MacOS, BSD kaj aliaj UNIX-platformoj.

    Male al Ruby, la YJIT-kodo estas skribita en la Rust-lingvo kaj postulas la rustc 1.58.0+-kompilon por kompilo, do la YJIT-konstruaĵo estas malŝaltita defaŭlte kaj estas laŭvola. Dum uzado de YJIT, 41% pliiĝo en rendimento estis registrita dum kurado de la yjit-benka testo kompare kun uzado de interpreto.

    Eldono de la Ruby programlingvo 3.2

  • Aldonita kroma protekto kontraŭ neo de servo-atakoj dum prilaborado de eksteraj datumoj en malefikaj kaj tempopostulaj regulaj esprimoj (ReDoS). La kongrua algoritmo, kiu uzas la parkerigteknikon, estis signife plibonigita. Ekzemple, la ekzekuttempo de la esprimo '/^a*b?a*$/ =~ "a" * 50000 + "x"' estis reduktita de 10 al 0.003 sekundoj. La kosto de optimumigo estas pliigo de memorkonsumo, kies konsumo estas proksimume 10 fojojn pli alta ol la grandeco de la eniga datumo. La dua sekureca mezuro estas la kapablo difini tempon (ekzemple, "Regexp.timeout = 1.0") dum kiu la regula esprimo devas esti procesita.
  • La syntax_suggest-reĝimo estas inkluzivita, kiu helpas diagnozi la kaŭzojn de eraroj asociitaj kun mankanta aŭ ekstra ferma "fino" esprimo. Nekongrua `fino', mankanta ŝlosilvorto (`do', `def`, `se`, ktp.) ? 1 klaso Hundo > 2 defbark > 3 fino 4 fino
  • La kapablo marki argumentojn por eraroj rilataj al tipoj kaj argumentoj estis aldonita al la erarloka montra reĝimo, ekzemple: test.rb:2:in `+': nil ne povas esti devigita en Entjero (TypeError) sum = ary [0] + ario [1] ^^^^^^
  • Aldonita nova sintakso por redirekti arojn da argumentoj al aliaj metodoj: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler estas proponita - varianto de la malnova MJIT JIT-kompililo, reverkita en la Ruby-lingvo. Certigite ke MJIT funkcias en aparta procezo anstataŭ funkcii en MJIT-labora fadeno.
  • En Bundler 2.4, dependecpretigo uzas la PubGrub-versiodetektilon, ankaŭ uzitan en la drinkeja pakmanaĝero por la Dart-lingvo. La antaŭe uzita Molinillo-algoritmo daŭre estas uzata en RubyGems, sed ankaŭ estos anstataŭigita per PubGrub estonte.
  • Ĝisdatigitaj versioj de enkonstruitaj gemoduloj kaj tiuj inkluzivitaj en la norma biblioteko.

fonto: opennet.ru

Aldoni komenton