Paglabas ng Ruby programming language 3.2

Ang Ruby 3.2.0 ay inilabas, isang dynamic na object-oriented programming language na napakahusay sa pagbuo ng programa at isinasama ang pinakamahusay na mga tampok ng Perl, Java, Python, Smalltalk, Eiffel, Ada at Lisp. Ang code ng proyekto ay ipinamahagi sa ilalim ng mga lisensya ng BSD (β€œ2-clause BSDL”) at β€œRuby,” na tumutukoy sa pinakabagong bersyon ng lisensya ng GPL at ganap na tugma sa GPLv3.

Mga pangunahing pagpapabuti:

  • Nagdagdag ng paunang port ng CRuby interpreter, na nag-compile sa WebAssembly intermediate code para sa pagtakbo sa isang web browser o sa ilalim ng mga standalone na runtime gaya ng wasmtime. Para sa direktang pakikipag-ugnayan sa operating system kapag tumatakbo nang hiwalay, ginagamit ang WASI (WebAssembly System Interface) API. Sa iba pang mga bagay, ang isang VFS wrapper ay ibinibigay sa ibabaw ng WASI, na nagbibigay-daan sa iyong i-package ang buong Ruby application sa isang presentasyon sa anyo ng isang solong wasm file. Ang pagtakbo sa isang browser ay maaaring gamitin upang lumikha ng pagsasanay at demo na mga serbisyo sa web tulad ng TryRuby. Sa kasalukuyang yugto ng pag-unlad, matagumpay na naipasa ng port ang mga basic at bootstrap test suite, na hindi gumagamit ng Thread API. Hindi rin sinusuportahan ng port ang Fibers, exceptions, o garbage collection.
  • Ang YJIT in-process na JIT compiler, na nilikha ng mga developer ng Shopify e-commerce platform bilang bahagi ng isang inisyatiba upang pataasin ang pagganap ng mga programang Ruby na gumagamit ng Rails framework at tumatawag ng maraming pamamaraan, ay idineklara na matatag at handa na para sa paggamit ng produksyon. Ang pangunahing pagkakaiba sa dating ginamit na MJIT JIT compiler, na nakabatay sa pagproseso ng buong pamamaraan at gumagamit ng external na compiler sa wikang C, ay ang YJIT ay gumagamit ng Lazy Basic Block Versioning (LBBV) at naglalaman ng pinagsamang JIT compiler. Sa LBBV, ang JIT ay unang nag-compile lamang sa simula ng pamamaraan, at nag-compile ng natitira pagkaraan ng ilang oras, pagkatapos matukoy ang mga uri ng mga variable at argumento na ginamit sa panahon ng pagpapatupad. Ang YJIT ay magagamit para sa x86-64 at arm64/aarch64 na mga arkitektura sa Linux, MacOS, BSD at iba pang mga platform ng UNIX.

    Hindi tulad ni Ruby, ang YJIT code ay nakasulat sa Rust na wika at nangangailangan ng rustc 1.58.0+ compiler para sa compilation, kaya ang YJIT build ay hindi pinagana bilang default at opsyonal. Kapag gumagamit ng YJIT, isang 41% na pagtaas sa performance ang naitala kapag nagpapatakbo ng yjit-bench test kumpara sa paggamit ng interpretasyon.

    Paglabas ng Ruby programming language 3.2

  • Nagdagdag ng karagdagang proteksyon laban sa pagtanggi sa mga pag-atake ng serbisyo kapag nagpoproseso ng external na data sa hindi mahusay at nakakaubos ng oras na mga regular na expression (ReDoS). Ang pagtutugma ng algorithm, na gumagamit ng memorization technique, ay lubos na napabuti. Halimbawa, ang oras ng pagpapatupad ng expression na '/^a*b?a*$/ =~ "a" * 50000 + "x"' ay binawasan mula 10 hanggang 0.003 segundo. Ang halaga ng pag-optimize ay isang pagtaas sa pagkonsumo ng memorya, ang pagkonsumo nito ay humigit-kumulang 10 beses na mas mataas kaysa sa laki ng data ng input. Ang pangalawang hakbang sa seguridad ay ang kakayahang tumukoy ng timeout (halimbawa, β€œRegexp.timeout = 1.0”) kung saan dapat iproseso ang regular na expression.
  • Kasama ang syntax_suggest mode, na tumutulong sa pag-diagnose ng mga sanhi ng mga error na nauugnay sa isang nawawala o dagdag na pagsasara ng "katapusan" na expression. Walang kaparis na `end', nawawalang keyword (`do', `def`, `if`, atbp.) ? 1 klaseng Aso > 2 defbark > 3 dulo 4 na dulo
  • Ang kakayahang markahan ang mga argumento para sa mga error na nauugnay sa mga uri at argumento ay naidagdag sa mode ng pagpapakita ng lokasyon ng error, halimbawa: test.rb:2:sa `+': nil ay hindi maaaring pilitin sa Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Nagdagdag ng bagong syntax para sa pag-redirect ng mga hanay ng mga argumento sa ibang mga pamamaraan: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ang Ruby_vm/mjit/compiler ay iminungkahi - isang variant ng lumang MJIT JIT compiler, na muling isinulat sa wikang Ruby. Tiniyak na ang MJIT ay tumatakbo sa isang hiwalay na proseso sa halip na tumakbo sa isang thread ng manggagawa ng MJIT.
  • Sa Bundler 2.4, ang pagpoproseso ng dependency ay gumagamit ng PubGrub version detector, na ginagamit din sa pub package manager para sa wikang Dart. Ang dating ginamit na Molinillo algorithm ay patuloy na ginagamit sa RubyGems, ngunit papalitan din ng PubGrub sa hinaharap.
  • Mga na-update na bersyon ng mga built-in na gem module at ang mga kasama sa karaniwang library.

Pinagmulan: opennet.ru

Magdagdag ng komento