Hoʻokuʻu ʻia ka ʻōlelo papahana Ruby 3.2

Ua hoʻokuʻuʻiaʻo Ruby 3.2.0, he'ōlelo hoʻolālā hoʻolālā hoʻoikaika i ka hoʻolālā papahana a hoʻokomo i nā hiʻohiʻona maikaʻi loa o Perl, Java, Python, Smalltalk, Eiffel, Ada a me Lisp. Hāʻawi ʻia ke code pāhana ma lalo o nā laikini BSD ("2-clause BSDL") a me "Ruby", e pili ana i ka mana hou loa o ka laikini GPL a kūpono loa me GPLv3.

Nā hoʻomaikaʻi nui:

  • Hoʻohui ʻia kahi awa mua o ka unuhi unuhi ʻo CRuby, e hui pū ana i loko o ka code intermediate WebAssembly no ka holo ʻana ma kahi polokalamu kele pūnaewele a i ʻole ma lalo o nā manawa holo kūʻokoʻa e like me wasmtime. No ka pilina pololei me ka ʻōnaehana hana ke holo kaʻawale, hoʻohana ʻia ka WASI (WebAssembly System Interface) API. Ma waena o nā mea ʻē aʻe, hāʻawi ʻia kahi wīwī VFS ma luna o WASI, kahi e hiki ai iā ʻoe ke hoʻopili i ka palapala Ruby holoʻokoʻa i kahi hōʻike ma ke ʻano o kahi faila wasm hoʻokahi. Hiki ke hoʻohana ʻia ka holo ʻana i kahi polokalamu kele e hana i nā lawelawe pūnaewele hoʻomaʻamaʻa a me ka demo e like me TryRuby. I kēia manawa o ka hoʻomohala ʻana, ua hele maikaʻi ke awa i nā papa hoʻāʻo kumu a me bootstrap, ʻaʻole i hoʻohana i ka Thread API. ʻAʻole kākoʻo ke awa i nā Fibers, nā ʻokoʻa, a i ʻole ka ʻohi ʻōpala.
  • ʻO ka YJIT in-process JIT compiler, i hana ʻia e nā mea hoʻomohala o ka Shopify e-commerce platform ma ke ʻano he ʻāpana o ka hoʻolālā e hoʻonui i ka hana o nā papahana Ruby e hoʻohana ana i ka Rails framework a kāhea i nā ʻano he nui, ua haʻi ʻia he kūpaʻa a mākaukau no ka. hoʻohana hana. ʻO ka ʻokoʻa koʻikoʻi mai ka MJIT JIT compiler i hoʻohana mua ʻia, i hoʻokumu ʻia i ka hoʻoponopono ʻana i nā ʻano holoʻokoʻa a hoʻohana i kahi mea hoʻopili waho ma ka ʻōlelo C, ʻo ia ka YJIT e hoʻohana ana i ka Lazy Basic Block Versioning (LBBV) a loaʻa kahi mea hoʻohui JIT hoʻohui. Me LBBV, hoʻopili mua ʻo JIT i ka hoʻomaka wale ʻana o ke ʻano, a hōʻuluʻulu i ke koena i kekahi manawa ma hope, ma hope o ka hoʻoholo ʻana o nā ʻano o nā ʻano a me nā hoʻopaʻapaʻa i hoʻohana ʻia i ka wā o ka hoʻokō. Loaʻa ʻo YJIT no ka x86-64 a me ka arm64/aarch64 architecture ma Linux, MacOS, BSD a me nā kahua UNIX ʻē aʻe.

    ʻAʻole like me Ruby, ua kākau ʻia ka code YJIT ma ka ʻōlelo Rust a koi i ka rustc 1.58.0+ compiler no ka hoʻohui ʻana, no laila ua pio ka YJIT build ma ke ʻano he koho. I ka hoʻohana ʻana iā YJIT, ua hoʻopaʻa ʻia kahi hoʻonui 41% o ka hana i ka wā e holo ana i ka hoʻokolohua yjit-bench i hoʻohālikelike ʻia me ka hoʻohana ʻana i ka wehewehe.

    Hoʻokuʻu ʻia ka ʻōlelo papahana Ruby 3.2

  • Hoʻohui i ka pale hou aku i ka hōʻole ʻana i nā hoʻouka ʻana i ka lawelawe ʻana i ka wā e hoʻoili ai i ka ʻikepili o waho i nā ʻōlelo maʻamau ʻole a hoʻopau manawa (ReDoS). Ua hoʻomaikaʻi maikaʻi ʻia ka algorithm pili, e hoʻohana ana i ka ʻenehana memorization. No ka laʻana, ua hōʻemi ʻia ka manawa hoʻokō o ka huaʻōlelo '/^a*b?a*$/ =~ "a" * 50000 + "x"' mai 10 a 0.003 kekona. ʻO ke kumukūʻai o ka optimization ka hoʻonui ʻana i ka hoʻohana ʻana i ka hoʻomanaʻo, ʻo ka hoʻohana ʻana ma kahi o 10 mau manawa kiʻekiʻe ma mua o ka nui o ka ʻikepili komo. ʻO ka lua o ke ana palekana, ʻo ia ka hiki ke wehewehe i kahi manawa hoʻopau (e laʻa, "Regexp.timeout = 1.0") i ka manawa e pono ai ke kaʻina hana maʻamau.
  • Hoʻokomo ʻia ke ʻano syntax_suggest, e kōkua ana i ka ʻike ʻana i nā kumu o nā hewa e pili ana i kahi ʻōlelo "hope" i hala. 'Ho'opau' like 'ole, nalo ka hua'ōlelo (`do', `def`, `if`, etc.) ? 1 papa ʻīlio > 2 defbark > 3 hopena 4 hopena
  • Ua hoʻohui ʻia ka hiki ke hōʻailona i nā manaʻo hoʻopaʻapaʻa e pili ana i nā ʻano a me nā hoʻopaʻapaʻa i ke ʻano hōʻike wahi kuhi hewa, no ka laʻana: test.rb:2: ma `+': ʻaʻole hiki ke koi ʻia i loko o ka Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Hoʻohui ʻia ka syntax hou no ka hoʻohuli hou ʻana i nā pūʻulu hoʻopaʻapaʻa i nā ala ʻē aʻe: def foo(*) bar(*) end def baz(**) quux(**) end
  • Manaʻo ʻia ʻo Ruby_vm/mjit/compiler - he ʻano like ʻole o ka MJIT JIT compiler kahiko, kākau hou ʻia ma ka ʻōlelo Ruby. E hōʻoia i ka holo ʻana o MJIT ma kahi kaʻina hana ʻokoʻa ma mua o ka holo ʻana ma kahi pae hana MJIT.
  • Ma Bundler 2.4, hoʻohana ka hoʻoponopono hilinaʻi i ka mea ʻike mana PubGrub, i hoʻohana pū ʻia i loko o ka pūʻolo pā hale no ka ʻōlelo Dart. Hoʻohana mau ʻia ka algorithm Molinillo i hoʻohana mua ʻia ma RubyGems, akā e pani ʻia hoʻi e PubGrub i ka wā e hiki mai ana.
  • Nā mana hou o nā modules gem i kūkulu ʻia a me nā mea i hoʻokomo ʻia i loko o ka waihona maʻamau.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka