Mwepụta nke asụsụ mmemme Ruby 3.2

A tọhapụrụ Ruby 3.2.0, asụsụ mmemme gbadoro ụkwụ n'ihe siri ike nke na-arụ ọrụ nke ọma na mmepe mmemme ma tinye njirimara kachasị mma nke Perl, Java, Python, Smalltalk, Eiffel, Ada na Lisp. A na-ekesa koodu ọrụ ahụ n'okpuru ikikere BSD ("2-nkebi BSDL") na "Ruby", nke na-ezo aka na ụdị ikike GPL kachasị ọhụrụ yana dakọtara na GPLv3.

Isi nkwalite:

  • Agbakwunyere ọdụ ụgbọ mmiri mbụ nke onye ntụgharị okwu CRuby, nke na-achịkọta n'ime koodu etiti WebAssembly maka ịgba ọsọ na ihe nchọgharị weebụ ma ọ bụ n'okpuru oge ịgba ọsọ dị ka oge efu. Maka mmekọrịta kpọmkwem na sistemụ arụmọrụ mgbe ọ na-agba ọsọ iche, WASI (WebAssembly System Interface) API na-eji. Tinyere ihe ndị ọzọ, a na-enye ihe mkpuchi VFS n'elu WASI, nke na-enye gị ohere ịkwado ngwa Ruby dum n'ime ihe ngosi n'ụdị otu faịlụ wasm. Enwere ike iji ọsọ na ihe nchọgharị mepụta ọzụzụ na ọrụ ngosi weebụ dị ka TryRuby. N'oge a na-emepe emepe ugbu a, ọdụ ụgbọ mmiri ahụ na-agafe nke ọma na isi na nyocha nke bootstrap, nke na-adịghị eji API Thread. Ọdụ ụgbọ mmiri ahụ anaghị akwado Fibers, ewepu, ma ọ bụ mkpofu ahịhịa.
  • YJIT in-process JIT compiler, nke ndị mmepe nke Shopify e-commerce n'elu ikpo okwu mebere dị ka akụkụ nke atụmatụ ịbawanye arụmọrụ nke mmemme Ruby nke na-eji usoro Rails ma na-akpọ ọtụtụ ụzọ, ekwuputala na ọ kwụsiri ike ma dị njikere maka ya. eji eme ihe. Isi ihe dị iche site na MJIT JIT compiler nke ejiribu mee ihe, nke dabere na nhazi usoro niile ma na-eji ihe nchịkọta mpụga na asụsụ C, bụ na YJIT na-eji Lazy Basic Block Versioning (LBBV) ma nwee ihe nchịkọta JIT agbakwunyere. Site na LBBV, JIT na-ebu ụzọ chịkọta naanị mmalite nke usoro ahụ, ma na-achịkọta nke fọdụrụ obere oge ka e mesịrị, mgbe a na-ekpebi ụdị mgbanwe na arụmụka eji eme ihe n'oge a na-egbu ya. YJIT dị maka x86-64 na arm64/arch64 architectures na Linux, MacOS, BSD na ndị ọzọ UNIX nyiwe.

    N'adịghị ka Ruby, a na-ede koodu YJIT n'asụsụ Rust ma chọọ rustc 1.58.0+ compiler maka mkpokọta, ya mere, YJIT wuru na ndabara ma bụrụ nhọrọ. Mgbe ị na-eji YJIT, a na-edekọ mmụba 41% na arụmọrụ mgbe ị na-agba ule yjit-bench tụnyere iji nkọwa.

    Mwepụta nke asụsụ mmemme Ruby 3.2

  • agbakwunyere nchebe ọzọ megide ịgọnarị mbuso agha ọrụ mgbe ị na-ahazi data mpụga na-adịghị arụ ọrụ yana okwu na-ewe oge (ReDoS). Algọridim dabara adaba, nke na-eji usoro ncheta, emeziwanyela nke ọma. Dịka ọmụmaatụ, oge mmezu nke okwu '/^a*b?a*$/ =~ "a" * 50000 + "x" belatara site na 10 ruo 0.003 sekọnd. Ọnụ ego nke njikarịcha bụ mmụba nke oriri ebe nchekwa, nke oriri ya dị ihe dịka 10 ugboro dị elu karịa nha data ntinye. Usoro nchekwa nke abụọ bụ ikike ịkọwapụta oge nkwụsị (dịka ọmụmaatụ, "Regexp.timeout = 1.0") nke a ga-edozirịrị okwu oge niile.
  • Agụnyere ụdị syntax_suggest, nke na-enyere aka ịchọpụta ihe kpatara njehie metụtara okwu “njedebe” na-efu ma ọ bụ mmechi ọzọ. 'Njedebe' enweghị atụ, mkpụrụokwu efu ('ime', 'def', 'if', wdg)? 1 klas Nkịta> 2 defbark> 3 njedebe 4
  • agbakwunyere ike ịka akara maka njehie metụtara ụdị na arụmụka n'ụdị ngosipụta njehie, dịka ọmụmaatụ: test.rb:2:in `+': nil enweghị ike ịmanye n'ime Integer (TypeError) nchikota = ary [0] + ary [1] ^^^^^
  • Agbakwunyere syntax ọhụrụ maka ịtụgharị usoro arụmụka na ụzọ ndị ọzọ: def foo(*) bar(*) end def baz(**) quux(**) end
  • A na-atụpụta Ruby_vm/mjit/compiler - ụdị dị iche iche nke ochie MJIT JIT compiler, edegharịrị n'asụsụ Ruby. Gbaa mbọ hụ na MJIT na-agba ọsọ na usoro dị iche kama ịgba ọsọ na eri onye ọrụ MJIT.
  • Na Bundler 2.4, nhazi ndabere na-eji ihe nchọpụta ụdị PubGrub, nke ejirikwa ya na njikwa ngwugwu ụlọ mmanya maka asụsụ Dart. Molinillo algọridim ejiri na mbụ na-aga n'ihu na-eji na RubyGems, mana PubGrub ga-anọchikwa ya n'ọdịnihu.
  • Ụdị modul gem arụnyere arụnyere na ndị agụnyere n'ọbá akwụkwọ ọkọlọtọ emelitere.

isi: opennet.ru

Tinye a comment