Liberazione di a lingua di prugrammazione Ruby 3.2

Ruby 3.2.0 hè stata liberata, una lingua di prugrammazione dinamica orientata à l'ughjettu chì hè altamente efficiente in u sviluppu di u prugramma è incorpora e migliori funzioni di Perl, Java, Python, Smalltalk, Eiffel, Ada è Lisp. U codice di u prugettu hè distribuitu sottu a licenza BSD ("2-clause BSDL") è "Ruby", chì si riferisce à l'ultima versione di a licenza GPL è hè cumplettamente cumpatibile cù GPLv3.

Principali miglioramenti:

  • Aggiuntu un portu iniziale di un interprete CRuby chì compila à u codice intermediu WebAssembly per eseguisce in un navigatore web o sottu runtimes standalone cum'è wasmtime. Per l'interazzione diretta cù u sistema operatore quandu eseguite separatamente, l'API WASI (WebAssembly System Interface) hè aduprata. Frà l'altri cose, hè furnitu un vincitore VFS in cima à WASI, chì vi permette di imballà tutta l'applicazione in lingua Ruby in una vista in forma di un unicu file wasm. Eseguisce in un navigatore pò esse usatu per creà tutoriale è servizii web demo cum'è TryRuby. À u stadiu attuale di u sviluppu, u portu passa cù successu e suite di teste basi è bootstrap, chì ùn utilizanu micca l'API Thread. U portu ùn sustene ancu Fibra, Eccezzioni, o Garbage Collection.
  • U compilatore JIT in-process YJIT, creatu da i sviluppatori di a piattaforma di e-commerce Shopify cum'è parte di una iniziativa per aumentà u rendiment di i prugrammi Ruby chì utilizanu u framework Rails è chjamanu assai metudi, hè statu dichjaratu stabile è pronta per usu di pruduzzione. A diferenza chjave da u compilatore MJIT JIT utilizatu prima, chì hè basatu annantu à u prucessu di metudu è usa un compilatore C esternu, hè chì YJIT usa Lazy Basic Block Versioning (LBBV) è cuntene un compilatore JIT integratu. Grazie à LBBV, JIT compile solu l'iniziu di u metudu in prima, è compila u restu dopu qualchì tempu, dopu chì i tipi di variàbili è argumenti utilizati sò determinati durante l'esekzione. YJIT hè dispunibule per l'architetture x86-64 è arm64/aarch64 in Linux, MacOS, BSD è altre piattaforme UNIX.

    A cuntrariu di CRuby, u codice YJIT hè scrittu in Rust è richiede u compilatore rustc 1.58.0+ per compilà, cusì a compilazione YJIT hè disattivata per automaticamente è hè opzionale. Quandu si usa YJIT, un incrementu di 41% in u rendiment hè statu registratu quandu eseguisce a prova di yjit-bench cumparatu cù l'interpretazione.

    Liberazione di a lingua di prugrammazione Ruby 3.2

  • Aghjunghje una prutezzione supplementaria contr'à l'attacchi chì causanu a negazione di serviziu quandu si tratta di dati esterni in espressioni regulari inefficienti è longu (ReDoS). Algoritmu di corrispondenza significativamente migliuratu, chì usa a tecnica di memorizazione. Per esempiu, u tempu di esecuzione di l'espressione '/^a*b?a*$/ =~ "a" * 50000 + "x"' hè stata ridutta da 10 à 0.003 seconde. U prezzu di l'ottimisazione hè un aumentu di u cunsumu di memoria, u cunsumu di quale hè circa 10 volte più altu ch'è a dimensione di i dati di input. A seconda misura di sicurità hè a capacità di definisce un timeout (per esempiu, "Regexp.timeout = 1.0"), per quale l'espressione regulare deve avè u tempu per esse processatu.
  • U modu syntax_suggest hè inclusu per aiutà à diagnosticà e cause di l'errori assuciati cù una dichjarazione di "fine" mancante o redundante. "Fine" senza corrispondenza, parola chiave mancante ("fare", "def", "se", ecc.) ? 1 classa Dog > 2 defbark > 3 end 4 end
  • Aggiunta l'abilità di marcà l'argumenti in casu d'errori ligati à i tipi è l'argumenti à u modu di locu d'errore, per esempiu: test.rb:2:in `+': nil ùn pò micca esse coerced in Integer (TypeError) sum = ary[ 0] + aria [1] ^^^^^^
  • Aggiunta una nova sintassi per reindirizzà à altri metudi di set di argumenti: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler propositu - una variante di u vechju compilatore MJIT JIT, riscritta in a lingua Ruby. Esecuzione MJIT assicurata in un prucessu separatu, invece di esecutà in u filu di u travagliu MJIT.
  • In Bundler 2.4, a gestione di a dependenza usa u finder di versione PubGrub, ancu utilizatu da u gestore di pacchetti pub per Dart. L'algoritmu Molinillo utilizatu prima cuntinueghja à esse usatu in RubyGems, ma serà ancu rimpiazzatu da PubGrub in u futuru.
  • Versioni aghjurnate di moduli gem di biblioteca integrata è standard.

Source: opennet.ru

Add a comment