Famoahana ny fiteny fandaharana Ruby 3.2

Navoaka ny Ruby 3.2.0, fiteny fandaharana miompana amin'ny zavatra mavitrika izay tena mahomby amin'ny fampivoarana fandaharana ary mampiditra ny endri-javatra tsara indrindra amin'ny Perl, Java, Python, Smalltalk, Eiffel, Ada ary Lisp. Ny fehezan-dalΓ na momba ny tetikasa dia zaraina eo ambanin'ny fahazoan-dΓ lana BSD (β€œ2-clause BSDL”) sy β€œRuby”, izay manondro ny dikan-teny farany amin'ny fahazoan-dΓ lana GPL ary mifanaraka tanteraka amin'ny GPLv3.

Fanatsarana lehibe:

  • Nampiana seranan-tsambo voalohany an'ny mpandika teny CRuby, izay mitambatra ao amin'ny kaody mpanelanelana WebAssembly ho an'ny fandehanana amin'ny navigateur web na eo ambanin'ny fotoana mandeha irery toy ny wasmtime. Ho an'ny fifandraisana mivantana amin'ny rafitra miasa rehefa mandeha mitokana, dia ny WASI (WebAssembly System Interface) API no ampiasaina. Ankoatra ny zavatra hafa, misy fonosana VFS omena eo an-tampon'ny WASI, izay ahafahanao manangona ny rindranasa Ruby manontolo ho famelabelarana amin'ny endrika rakitra wasm tokana. Ny mihazakazaka amin'ny navigateur dia azo ampiasaina hamoronana serivisy fanofanana sy demo toy ny TryRuby. Amin'ny dingana fampandrosoana amin'izao fotoana izao, ny seranan-tsambo dia nandalo soa aman-tsara ireo suite fitsapana fototra sy bootstrap, izay tsy mampiasa ny Thread API. Ny seranan-tsambo koa dia tsy manohana Fibres, exceptions, na fanangonana fako.
  • Ny YJIT in-process JIT compiler, noforonin'ny mpamorona ny sehatra e-varotra Shopify ho ampahany amin'ny hetsika hampitomboana ny fahombiazan'ny programa Ruby izay mampiasa ny rafitra Rails ary miantso fomba maro, dia nambara ho azo antoka sy vonona ho amin'izany. fampiasana famokarana. Ny fahasamihafana lehibe amin'ny compiler MJIT JIT teo aloha, izay mifototra amin'ny fanodinana fomba rehetra ary mampiasa compiler ivelany amin'ny fiteny C, dia ny YJIT dia mampiasa Lazy Basic Block Versioning (LBBV) ary misy compiler JIT mitambatra. Miaraka amin'ny LBBV, ny JIT dia tsy manangona afa-tsy ny fiandohan'ny fomba, ary manangona ny sisa amin'ny fotoana kelikely, rehefa voafaritra ny karazana varimbazaha sy hevitra ampiasaina mandritra ny famonoana. YJIT dia misy amin'ny maritrano x86-64 sy arm64/aarch64 amin'ny Linux, MacOS, BSD ary sehatra UNIX hafa.

    Tsy toa an'i Ruby, ny kaody YJIT dia nosoratana tamin'ny fiteny Rust ary mitaky ny compiler rustc 1.58.0+ ho an'ny fanangonana, noho izany ny fananganana YJIT dia kilemaina amin'ny alΓ lan'ny default ary tsy voatery. Rehefa mampiasa YJIT, dia nisy fitomboana 41% tamin'ny zava-bita rehefa nihazakazaka ny fitsapana yjit-bench raha oharina amin'ny fampiasana fandikana.

    Famoahana ny fiteny fandaharana Ruby 3.2

  • Nampiana fiarovana fanampiny amin'ny fandavana ny fanafihan'ny serivisy rehefa manodina ny angona ivelany amin'ny fomba fiteny tsy mahomby sy mandany fotoana (ReDoS). Ny algorithm mifanandrify, izay mampiasa ny teknika fitadidiana, dia nohatsaraina be. Ohatra, ny fotoana famonoana ny teny hoe '/^a*b?a*$/ =~ β€œa” * 50000 + β€œx”’ dia nihena 10 ka hatramin'ny 0.003 segondra. Ny vidin'ny optimization dia ny fitomboan'ny fanjifΓ na fahatsiarovana, ny fanjifΓ na izay dia eo ho eo amin'ny 10 avo noho ny haben'ny angona fampidirana. Ny fepetra fiarovana faharoa dia ny fahafahana mamaritra fe-potoana (ohatra, β€œRegexp.timeout = 1.0”) izay tsy maintsy anaovana ny fomba fiteny mahazatra.
  • Ny maody syntax_suggest dia ampidirina, izay manampy amin'ny fitiliana ny antony mahatonga ny lesoka mifandray amin'ny fanehoan-kevitra "farany" tsy hita na fanampiny. `farany’ tsy mifanandrify, tsy misy teny fototra (`do’, `def`, `raha`, sns.) ? Alika kilasy 1 > 2 defbark > 3 farany 4 farany
  • Ny fahafahana manamarika ny tohan-kevitra momba ny lesoka mifandraika amin'ny karazana sy ny tohan-kevitra dia nampidirina amin'ny fomba fampisehoana toerana misy hadisoana, ohatra: test.rb:2: amin'ny `+': tsy azo terena ho integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Nampiana syntax vaovao hamerenana ireo andiana hevitra amin'ny fomba hafa: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler dia atolotra - variana amin'ny compiler MJIT JIT taloha, nosoratana tamin'ny fiteny Ruby. Miantoka fa ny MJIT dia mandeha amin'ny dingana misaraka fa tsy mandeha amin'ny kofehy mpiasa MJIT.
  • Ao amin'ny Bundler 2.4, ny fanodinana fiankinan-doha dia mampiasa ny mpitsikilo version PubGrub, izay ampiasaina amin'ny mpitantana fonosana pub ho an'ny fiteny Dart. Ny algorithm Molinillo efa nampiasaina teo aloha dia mbola ampiasaina ao amin'ny RubyGems, fa hosoloin'ny PubGrub ihany koa amin'ny ho avy.
  • Ny dikan-teny nohavaozina amin'ny maody vita amin'ny vatosoa sy ireo tafiditra ao amin'ny tranomboky mahazatra.

Source: opennet.ru

Add a comment