Pagpagawas sa Ruby programming language 3.2

Ang Ruby 3.2.0 gibuhian, usa ka dinamikong object-oriented nga programming language nga episyente kaayo sa pagpalambo sa programa ug gilakip ang labing maayo nga mga bahin sa Perl, Java, Python, Smalltalk, Eiffel, Ada ug Lisp. Ang code sa proyekto giapod-apod ubos sa BSD (β€œ2-clause BSDL”) ug β€œRuby” nga mga lisensya, nga nagtumong sa pinakabag-o nga bersyon sa lisensya sa GPL ug hingpit nga nahiuyon sa GPLv3.

Panguna nga mga pag-uswag:

  • Gidugang ang usa ka inisyal nga pantalan sa CRuby interpreter, nga nag-compile sa WebAssembly intermediate code para sa pagdagan sa usa ka web browser o ubos sa standalone runtimes sama sa wasmtime. Alang sa direkta nga interaksyon sa operating system kung gilain ang pagdagan, gigamit ang WASI (WebAssembly System Interface) API. Lakip sa ubang mga butang, ang usa ka VFS wrapper gihatag sa ibabaw sa WASI, nga nagtugot kanimo sa pagputos sa tibuok Ruby nga aplikasyon ngadto sa usa ka presentasyon sa porma sa usa ka wasm file. Ang pagdagan sa usa ka browser mahimong magamit sa paghimo og pagbansay ug demo nga mga serbisyo sa web sama sa TryRuby. Sa kasamtangan nga yugto sa pag-uswag, malampuson nga gipasa sa pantalan ang sukaranan ug bootstrap nga mga suite sa pagsulay, nga wala mogamit sa Thread API. Wala usab gisuportahan sa pantalan ang Fibers, mga eksepsiyon, o pagkolekta sa basura.
  • Ang YJIT in-process nga JIT compiler, nga gimugna sa mga developers sa Shopify e-commerce nga plataporma isip kabahin sa usa ka inisyatibo aron madugangan ang performance sa mga programa sa Ruby nga naggamit sa Rails framework ug nagtawag sa daghang mga pamaagi, gideklarar nga lig-on ug andam alang sa paggamit sa produksyon. Ang yawe nga kalainan gikan sa kaniadto gigamit nga MJIT JIT compiler, nga gibase sa pagproseso sa tibuok nga mga pamaagi ug naggamit sa usa ka eksternal nga compiler sa C nga pinulongan, mao nga ang YJIT naggamit sa Lazy Basic Block Versioning (LBBV) ug naglangkob sa usa ka integrated JIT compiler. Uban sa LBBV, ang JIT una nga nag-compile lamang sa sinugdanan sa pamaagi, ug nag-compile sa nahabilin pipila ka oras sa ulahi, pagkahuman ang mga tipo sa mga variable ug mga argumento nga gigamit matino sa panahon sa pagpatuman. Ang YJIT anaa alang sa x86-64 ug arm64/aarch64 nga mga arkitektura sa Linux, MacOS, BSD ug uban pang UNIX nga mga plataporma.

    Dili sama ni Ruby, ang YJIT code gisulat sa Rust nga pinulongan ug nagkinahanglan sa rustc 1.58.0+ compiler alang sa pag-compile, mao nga ang YJIT nga pagtukod gi-disable pinaagi sa default ug opsyonal. Kung gigamit ang YJIT, usa ka 41% nga pagtaas sa pasundayag ang natala kung gipadagan ang pagsulay sa yjit-bench kumpara sa paggamit sa interpretasyon.

    Pagpagawas sa Ruby programming language 3.2

  • Gidugang ang dugang nga proteksyon batok sa pagdumili sa mga pag-atake sa serbisyo kung nagproseso sa gawas nga datos sa dili maayo ug makagugol sa oras nga regular nga mga ekspresyon (ReDoS). Ang pagpares nga algorithm, nga naggamit sa teknik sa pagmemorya, labi nga gipauswag. Pananglitan, ang oras sa pagpatuman sa ekspresyong '/^a*b?a*$/ =~ "a" * 50000 + "x"' gikunhoran gikan sa 10 ngadto sa 0.003 ka segundos. Ang gasto sa pag-optimize usa ka pagtaas sa konsumo sa panumduman, ang konsumo nga gibana-bana nga 10 ka beses nga mas taas kaysa sa gidak-on sa data sa input. Ang ikaduhang sukod sa seguridad mao ang abilidad sa paghubit sa usa ka timeout (pananglitan, β€œRegexp.timeout = 1.0”) diin ang regular nga ekspresyon kinahanglang iproseso.
  • Ang syntax_suggest mode gilakip, nga makatabang sa pagdayagnos sa mga hinungdan sa mga kasaypanan nga nalangkit sa usa ka nawala o sobra nga panapos nga "katapusan" nga ekspresyon. Dili hitupngan nga `katapusan', nawala nga keyword (`buhaton', `def`, `kon`, ug uban pa) ? 1 klase nga Dog > 2 defbark > 3 end 4 end
  • Ang abilidad sa pagmarka sa mga argumento alang sa mga sayop nga may kalabutan sa mga tipo ug argumento gidugang sa error location display mode, pananglitan: test.rb:2:sa `+': nil dili mapugos sa Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Gidugang ang bag-ong syntax alang sa pag-redirect sa mga set sa argumento sa ubang mga pamaagi: def foo(*) bar(*) end def baz(**) quux(**) end
  • Gisugyot ang Ruby_vm/mjit/compiler - usa ka variant sa karaang MJIT JIT compiler, gisulat pag-usab sa pinulongang Ruby. Gisiguro nga ang MJIT nagdagan sa usa ka bulag nga proseso imbes nga nagdagan sa usa ka thread sa trabahante sa MJIT.
  • Sa Bundler 2.4, ang pagproseso sa dependency naggamit sa PubGrub version detector, gigamit usab sa pub package manager para sa Dart nga pinulongan. Ang kaniadto gigamit nga Molinillo algorithm nagpadayon nga gigamit sa RubyGems, apan pulihan usab sa PubGrub sa umaabot.
  • Gi-update nga mga bersyon sa built-in gem modules ug kadtong gilakip sa standard library.

Source: opennet.ru

Idugang sa usa ka comment