Te tukunga o te reo hotaka Ruby 3.2

I tukuna a Ruby 3.2.0, he reo whakahiato-a-ahanoa hihiri e tino pai ana ki te whakawhanake i te kaupapa me te whakauru i nga ahuatanga pai o Perl, Java, Python, Smalltalk, Eiffel, Ada me Lisp. Ka tohatohahia te waehere kaupapa i raro i nga raihana BSD ("2-rara BSDL") me "Ruby", e tohu ana ki te putanga hou o te raihana GPL me te tino hototahi ki te GPLv3.

Nga whakapainga matua:

  • I taapirihia he tauranga tuatahi o te kaiwhakamaori CRuby, e whakahiato ana ki te waehere takawaenga WebAssembly mo te whakahaere i roto i te kaitirotiro paetukutuku, i raro ranei i nga wa whakahaere motuhake penei i te wasmtime. Mo te taunekeneke tika me te punaha whakahaere ka rere wehe, ka whakamahia te WASI (WebAssembly System Interface) API. I roto i etahi atu mea, ka whakaratohia he takai VFS ki runga ake o te WASI, e taea ai e koe te kohikohi i te tono Ruby katoa ki roto i te whakaaturanga i te ahua o te konae wasm kotahi. Ko te rere i roto i te kaitirotiro ka taea te whakamahi hei hanga whakangungu me nga ratonga paetukutuku demo penei i a TryRuby. I te wa o te whanaketanga o naianei, ka eke pai te tauranga i nga huinga whakamatautau taketake me te bootstrap, kaore e whakamahi i te API Miro. Kare hoki te tauranga e tautoko i nga Fibers, okotahi, kohi para ranei.
  • Ko te YJIT i roto i te tukatuka JIT compiler, i hangaia e nga kaiwhakawhanake o te papaaho-e-hokohoko Shopify hei waahanga o te kaupapa ki te whakanui ake i te mahi o nga kaupapa Ruby e whakamahi ana i te anga Rails me te karanga i nga tikanga maha, kua kii he pumau me te rite mo whakamahi hanga. Ko te rereketanga nui mai i te MJIT JIT compiler i whakamahia i mua, i runga i te tukatuka i nga tikanga katoa me te whakamahi i te kohinga o waho i roto i te reo C, ko te YJIT te whakamahi i te Lazy Basic Block Versioning (LBBV) me te whakauru i te JIT compiler. Ma te LBBV, ka whakahiato tuatahi e JIT te timatanga o te tikanga, ka whakahiato te toenga mo etahi wa i muri mai, i muri i te whakatau i nga momo taurangi me nga tohenga e whakamahia ana i te wa e mahia ana. Kei te waatea a YJIT mo nga hoahoanga x86-64 me te arm64/aarch64 i runga i te Linux, MacOS, BSD me etahi atu papanga UNIX.

    Kaore i rite ki a Ruby, ko te waehere YJIT kua tuhia ki te reo Rust me te hiahia ki te rustc 1.58.0+ compiler mo te whakahiato, na reira kua whakakorehia te hanga YJIT i te taunoa me te whiriwhiri. I te wa e whakamahi ana i te YJIT, he 41% te pikinga o nga mahi i tuhia i te wa e whakahaere ana i te whakamatautau yjit-bench i whakaritea ki te whakamahi i te whakamaori.

    Te tukunga o te reo hotaka Ruby 3.2

  • Kua taapirihia he whakamarumaru atu ki te whakakore i nga whakaeke ratonga i te wa e tukatuka ana i nga raraunga o waho i roto i nga korero koretake me te whakapau wa (ReDoS). Ko te algorithm orite, e whakamahi ana i te tikanga maumahara, kua tino pai ake. Hei tauira, ko te wa mahi o te kupu '/^a*b?a*$/ =~ "a" * 50000 + "x"' i whakahekehia mai i te 10 ki te 0.003 hēkona. Ko te utu mo te arotautanga ko te pikinga o te kohi mahara, ko te kohi he 10 nga wa teitei ake i te rahi o nga raraunga whakauru. Ko te inenga haumaru tuarua ko te kaha ki te tautuhi i te waahi (hei tauira, "Regexp.timeout = 1.0") i te wa e tika ai te tukatuka i te korero auau.
  • Kua whakauruhia te aratau syntax_suggest, e awhina ana ki te tirotiro i nga take o nga hapa e pa ana ki tetahi korero "mutunga" e ngaro ana, e kati ana ranei. `mutunga' kore i rite, kua ngaro te kupu matua (`do', `def`, `if`, etc.) ? 1 karaehe Kuri > 2 defbark > 3 pito 4 pito
  • Ko te kaha ki te tohu tohenga mo nga hapa e pa ana ki nga momo me nga tohenga kua taapirihia ki te aratau whakaatu tauwāhi hapa, hei tauira: test.rb:2:i roto i te `+': kore e taea te tohe ki roto Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Kua tāpirihia te wetereo hōu mō te tuku anō i ngā huinga tohenga ki ētahi atu tikanga: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler e whakaarohia ana - he momo o te MJIT JIT compiler tawhito, i tuhia ano ki te reo Ruby. Me mohio kei te rere a MJIT i roto i te mahi motuhake, kaua ki te rere i roto i te miro kaimahi MJIT.
  • I roto i te Bundler 2.4, ka whakamahia e te tukatuka ti'aturi te putunga PubGrub, ka whakamahia ano hoki i roto i te kaiwhakahaere o te kete pub mo te reo Dart. Ko te Molinillo algorithm i whakamahia i mua ka whakamahia tonu i RubyGems, engari ka whakakapia ano e PubGrub a muri ake nei.
  • Ko nga putanga whakahōu o ngā kōwae kōhatu hanga-i roto me era kei roto i te whare pukapuka paerewa.

Source: opennet.ru

Tāpiri i te kōrero