Rhyddhau iaith raglennu Ruby 3.2

Rhyddhawyd Ruby 3.2.0, iaith raglennu ddeinamig sy'n canolbwyntio ar wrthrych sy'n hynod effeithlon o ran datblygu rhaglenni ac sy'n ymgorffori nodweddion gorau Perl, Java, Python, Smalltalk, Eiffel, Ada a Lisp. Mae cod y prosiect yn cael ei ddosbarthu o dan y trwyddedau BSD (“2-gymal BSDL”) a “Ruby”, sy'n cyfeirio at y fersiwn ddiweddaraf o'r drwydded GPL ac sy'n gwbl gydnaws â GPLv3.

Prif welliannau:

  • Ychwanegwyd porth cychwynnol y dehonglydd CRuby, sy'n crynhoi i god canolraddol WebAssembly ar gyfer rhedeg mewn porwr gwe neu o dan amseroedd rhedeg annibynnol fel amser wasm. Ar gyfer rhyngweithio uniongyrchol â'r system weithredu wrth redeg ar wahân, defnyddir API WASI (Rhyngwyneb System WebAssembly). Ymhlith pethau eraill, darperir deunydd lapio VFS ar ben WASI, sy'n eich galluogi i becynnu'r cais Ruby cyfan i gyflwyniad ar ffurf ffeil wasm sengl. Gellir defnyddio rhedeg mewn porwr i greu hyfforddiant a gwasanaethau gwe demo fel TryRuby. Ar y cam datblygu presennol, mae'r porthladd yn llwyddo i basio'r ystafelloedd prawf sylfaenol a bootstrap, nad ydynt yn defnyddio'r API Thread. Nid yw'r porthladd hefyd yn cefnogi Ffibrau, eithriadau, na chasglu sbwriel.
  • Mae casglwr JIT mewn-broses YJIT, a grëwyd gan ddatblygwyr platfform e-fasnach Shopify fel rhan o fenter i gynyddu perfformiad rhaglenni Ruby sy'n defnyddio fframwaith Rails ac yn galw llawer o ddulliau, wedi'i ddatgan yn sefydlog ac yn barod ar gyfer defnydd cynhyrchu. Y gwahaniaeth allweddol o'r casglwr MJIT JIT a ddefnyddiwyd yn flaenorol, sy'n seiliedig ar brosesu dulliau cyfan ac sy'n defnyddio casglwr allanol yn yr iaith C, yw bod YJIT yn defnyddio Fersiwn Bloc Sylfaenol Lazy (LBBV) ac yn cynnwys casglwr JIT integredig. Gyda LBBV, dim ond dechrau'r dull y mae JIT yn ei lunio yn gyntaf, ac mae'n llunio'r gweddill beth amser yn ddiweddarach, ar ôl i'r mathau o newidynnau a dadleuon a ddefnyddir gael eu pennu yn ystod y gweithredu. Mae YJIT ar gael ar gyfer pensaernïaeth x86-64 ac arm64/aarch64 ar Linux, MacOS, BSD a llwyfannau UNIX eraill.

    Yn wahanol i Ruby, mae'r cod YJIT wedi'i ysgrifennu yn yr iaith Rust ac mae angen y casglwr rustc 1.58.0+ i'w lunio, felly mae adeiladwaith YJIT wedi'i analluogi yn ddiofyn ac mae'n ddewisol. Wrth ddefnyddio YJIT, cofnodwyd cynnydd o 41% mewn perfformiad wrth redeg y prawf yjit-fainc o gymharu â defnyddio dehongliad.

    Rhyddhau iaith raglennu Ruby 3.2

  • Ychwanegwyd amddiffyniad ychwanegol rhag ymosodiadau gwrthod gwasanaeth wrth brosesu data allanol mewn mynegiadau rheolaidd aneffeithlon sy'n cymryd llawer o amser (ReDoS). Mae'r algorithm paru, sy'n defnyddio'r dechneg cofio, wedi'i wella'n sylweddol. Er enghraifft, gostyngwyd amser gweithredu'r ymadrodd '/^a*b?a*$/ =~ "a" * 50000 + "x"' o 10 i 0.003 eiliad. Mae cost optimeiddio yn gynnydd yn y defnydd o gof, y mae ei ddefnydd tua 10 gwaith yn uwch na maint y data mewnbwn. Yr ail fesur diogelwch yw'r gallu i ddiffinio terfyn amser (er enghraifft, “Regexp.timeout = 1.0”) pan fydd yn rhaid prosesu'r mynegiant rheolaidd.
  • Mae'r modd syntax_suggest wedi'i gynnwys, sy'n helpu i wneud diagnosis o achosion gwallau sy'n gysylltiedig â mynegiant “diwedd” coll neu gau ychwanegol. `diwedd' heb ei gyfateb, allweddair ar goll (`gwneud', `def`, `os`, ac ati) ? Ci 1 dosbarth > 2 risgl ymadael > 3 pen 4 pen
  • Mae'r gallu i farcio dadleuon am wallau sy'n ymwneud â mathau a dadleuon wedi'i ychwanegu at y modd arddangos lleoliad gwall, er enghraifft: test.rb:2:yn `+': ni ellir gorfodi dim i Integer (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Ychwanegwyd cystrawen newydd ar gyfer ailgyfeirio setiau o ddadleuon i ddulliau eraill: def foo(*) bar(*) end def baz(**) quux(**) end
  • Cynigir Ruby_vm/mjit/compiler - amrywiad ar yr hen grynhoydd MJIT JIT, wedi'i ailysgrifennu yn yr iaith Ruby. Wedi sicrhau bod MJIT yn rhedeg mewn proses ar wahân yn hytrach na rhedeg mewn llinyn gweithiwr MJIT.
  • Yn Bundler 2.4, mae prosesu dibyniaeth yn defnyddio'r synhwyrydd fersiwn PubGrub, a ddefnyddir hefyd yn y rheolwr pecynnau tafarn ar gyfer yr iaith Dart. Mae'r algorithm Molinillo a ddefnyddiwyd yn flaenorol yn parhau i gael ei ddefnyddio yn RubyGems, ond bydd hefyd yn cael ei ddisodli gan PubGrub yn y dyfodol.
  • Fersiynau wedi'u diweddaru o fodiwlau gemau adeiledig a'r rhai sydd wedi'u cynnwys yn y llyfrgell safonol.

Ffynhonnell: opennet.ru

Ychwanegu sylw