Rilaxx tal-lingwa ta' programmar Ruby 3.2

Ġie rilaxxat Ruby 3.2.0, lingwa ta 'programmar dinamika orjentata lejn l-oġġetti li hija effiċjenti ħafna fl-iżvilupp tal-programm u tinkorpora l-aqwa karatteristiċi ta' Perl, Java, Python, Smalltalk, Eiffel, Ada u Lisp. Il-kodiċi tal-proġett huwa mqassam taħt il-liċenzji BSD ("2-clause BSDL") u "Ruby", li tirreferi għall-aħħar verżjoni tal-liċenzja GPL u hija kompletament kompatibbli mal-GPLv3.

Titjib ewlieni:

  • Miżjud port inizjali tal-interpretu CRuby, li jikkompila f'kodiċi intermedju tal-WebAssembly biex jaħdem f'web browser jew taħt runtimes standalone bħal wasmtime. Għal interazzjoni diretta mas-sistema operattiva meta taħdem separatament, tintuża l-API WASI (WebAssembly System Interface). Fost affarijiet oħra, tgeżwir VFS huwa pprovdut fuq WASI, li jippermettilek li tippakkja l-applikazzjoni Ruby kollha fi preżentazzjoni fil-forma ta 'fajl wasm wieħed. It-tħaddim fi browser jista 'jintuża biex jinħolqu servizzi tal-web ta' taħriġ u demo bħal TryRuby. Fl-istadju attwali ta 'żvilupp, il-port jgħaddi b'suċċess mill-suites tat-test bażiċi u bootstrap, li ma jużawx l-API Thread. Il-port ukoll ma jappoġġjax Fibers, eċċezzjonijiet, jew ġbir taż-żibel.
  • Il-kompilatur YJIT in-process JIT, maħluq mill-iżviluppaturi tal-pjattaforma tal-kummerċ elettroniku Shopify bħala parti minn inizjattiva biex tiżdied il-prestazzjoni tal-programmi Ruby li jużaw il-qafas Rails u jsejħu ħafna metodi, ġie ddikjarat stabbli u lest għal użu tal-produzzjoni. Id-differenza ewlenija mill-kompilatur MJIT JIT użat qabel, li huwa bbażat fuq l-ipproċessar ta 'metodi sħaħ u juża kompilatur estern fil-lingwa C, hija li YJIT juża Lazy Basic Block Versioning (LBBV) u fih kompilatur JIT integrat. Ma 'LBBV, JIT l-ewwel jikkompila biss il-bidu tal-metodu, u jikkompila l-bqija ftit tal-ħin wara, wara li t-tipi ta' varjabbli u argumenti użati jiġu ddeterminati waqt l-eżekuzzjoni. YJIT huwa disponibbli għal arkitetturi x86-64 u arm64/aarch64 fuq Linux, MacOS, BSD u pjattaformi UNIX oħra.

    B'differenza minn Ruby, il-kodiċi YJIT huwa miktub bil-lingwa Rust u jeħtieġ il-kompilatur rustc 1.58.0+ għall-kumpilazzjoni, għalhekk il-bini YJIT huwa diżattivat awtomatikament u huwa fakultattiv. Meta tuża YJIT, ġiet irreġistrata żieda ta '41% fil-prestazzjoni meta tmexxi t-test tal-yjit-bench meta mqabbel mal-użu tal-interpretazzjoni.

    Rilaxx tal-lingwa ta' programmar Ruby 3.2

  • Miżjud protezzjoni addizzjonali kontra attakki ta’ ċaħda ta’ servizz meta tiġi pproċessata dejta esterna f’espressjonijiet regolari ineffiċjenti u li jieħdu ħafna ħin (ReDoS). L-algoritmu ta 'tqabbil, li juża t-teknika ta' memorizzazzjoni, tjieb b'mod sinifikanti. Pereżempju, il-ħin tal-eżekuzzjoni tal-espressjoni '/^a*b?a*$/ =~ "a" * 50000 + "x"' tnaqqas minn 10 għal 0.003 sekondi. L-ispiża tal-ottimizzazzjoni hija żieda fil-konsum tal-memorja, li l-konsum tagħha huwa madwar 10 darbiet ogħla mid-daqs tad-dejta tal-input. It-tieni miżura ta 'sigurtà hija l-abbiltà li tiddefinixxi timeout (per eżempju, "Regexp.timeout = 1.0") li matulu l-espressjoni regolari trid tiġi pproċessata.
  • Il-mod syntax_suggest huwa inkluż, li jgħin biex jiġu djanjostikati l-kawżi ta 'żbalji assoċjati ma' espressjoni ta '"tarf" ta' għeluq nieqsa jew żejda. `tmiem' mhux imqabbla, kelma prinċipali nieqsa (`do', `def`, `jekk', eċċ.) ? 1 klassi Kelb > 2 defbark > 3 tarf 4 tarf
  • L-abbiltà li jiġu mmarkati argumenti għal żbalji relatati mat-tipi u l-argumenti ġiet miżjuda mal-modalità tal-wiri tal-post tal-iżball, pereżempju: test.rb:2:in `+': nil ma jistax jiġi mġiegħel f'Integer (TypeError) sum = ary [0] + arja [1] ^^^^^^
  • Miżjuda sintassi ġdida għar-ridirezzjoni ta' settijiet ta' argumenti għal metodi oħra: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler huwa propost - varjant tal-kompilatur MJIT JIT antik, miktub mill-ġdid fil-lingwa Ruby. Żgurat li l-MJIT jaħdem fi proċess separat minflok jaħdem f'ħajt tal-ħaddiem MJIT.
  • F'Bundler 2.4, l-ipproċessar tad-dipendenza juża d-ditekter tal-verżjoni PubGrub, użat ukoll fil-maniġer tal-pakketti tal-pub għal-lingwa Dart. L-algoritmu Molinillo użat qabel jibqa' jintuża f'RubyGems, iżda se jiġi sostitwit ukoll minn PubGrub fil-futur.
  • Verżjonijiet aġġornati ta 'moduli gem integrati u dawk inklużi fil-librerija standard.

Sors: opennet.ru

Żid kumment