Ruby programazio-lengoaia 3.2 kaleratzea

Ruby 3.2.0 kaleratu da, objektuetara zuzendutako programazio-lengoaia dinamikoa, programaren garapenean oso eraginkorra dena eta Perl, Java, Python, Smalltalk, Eiffel, Ada eta Lisp-en ezaugarri onenak biltzen dituena. Proiektuaren kodea BSD ("2 klausula BSDL") eta "Ruby" lizentzien arabera banatzen da, GPL lizentziaren azken bertsioari erreferentzia egiten diona eta GPLv3-rekin guztiz bateragarria dena.

Hobekuntza nagusiak:

  • WebAssembly bitarteko kodean konpilatzen duen CRuby interprete baten hasierako ataka gehitu da, web arakatzaile batean edo wasmtime bezalako exekuzio-denbora autonomoetan exekutatzeko. Sistema eragilearekin zuzeneko interakziorako bereizita exekutatzen denean, WASI (WebAssembly System Interface) APIa erabiltzen da. Besteak beste, WASIren gainean VFS lotura bat eskaintzen da, eta horrek aplikazio osoa Ruby hizkuntzan paketatzea ahalbidetzen du, wasm fitxategi bakar baten moduan. Arakatzaile batean exekutatzen, TryRuby bezalako tutorial eta demo web zerbitzuak sortzeko erabil daiteke. Gaur egungo garapen-fasean, portuak arrakastaz gainditzen ditu oinarrizko eta bootstrap proba-suiteak, zeinak Thread APIa erabiltzen ez dutenak. Portuak ere ez ditu Fiber, Salbuespenak edo Zabor Bilketa onartzen.
  • Prozesuan dagoen JIT konpilatzailea YJIT, Shopify e-commerce plataformako garatzaileek Rails esparrua erabiltzen duten eta metodo asko deitzen duten Ruby programen errendimendua areagotzeko ekimen baten baitan sortua, egonkorra eta prest deklaratu da. ekoizpen erabilera. Aurretik erabilitako MJIT JIT konpiladorearen gakoa, metodoaren prozesazioan oinarritzen dena eta kanpoko C konpiladore bat erabiltzen duena, YJIT-ek Lazy Basic Block Versioning (LBBV) erabiltzen duela eta JIT konpilatzaile integratua duela da. LBBVri esker, JIT-k metodoaren hasiera baino ez du konpilatzen hasieran, eta gainerakoak denbora pixka bat igaro ondoren, exekuzioan zehar erabilitako aldagai eta argumentu motak zehaztu ondoren. YJIT Linux, MacOS, BSD eta beste UNIX plataformetan x86-64 eta arm64/aarch64 arkitekturarako eskuragarri dago.

    CRuby ez bezala, YJIT kodea Rust-en idatzita dago eta rustc 1.58.0+ konpilatzailea behar du konpilatzeko, beraz, YJIT konpilazioa lehenespenez desgaituta dago eta aukerakoa da. YJIT erabiltzean, errendimenduaren %41eko igoera erregistratu zen yjit-bench proba exekutatzen denean interpretazioa erabiltzearekin alderatuta.

    Ruby programazio-lengoaia 3.2 kaleratzea

  • Zerbitzua ukatzea eragiten duten erasoen aurkako babes gehigarria gehitu da kanpoko datuak prozesatzen dituzten adierazpen erregularretan (ReDoS) eraginkortasunik gabe eta luzean. Nabarmen hobetu da bat etortze-algoritmoa, memorizatzeko teknika erabiltzen duena. Adibidez, '/^a*b?a*$/ =~ "a" * 50000 + "x"' adierazpenaren exekuzio-denbora 10etik 0.003 segundora murriztu da. Optimizazioaren prezioa memoria-kontsumoaren gehikuntza da, eta horren kontsumoa sarrerako datuen tamaina baino 10 aldiz handiagoa da. Bigarren segurtasun-neurria denbora-muga bat definitzeko gaitasuna da (adibidez, "Regexp.timeout = 1.0"), eta horretarako adierazpen erregularrak prozesatzeko denbora izan behar du.
  • Syntax_suggest modua sartzen da amaierako "amaiera" adierazpen falta edo erredundante batekin lotutako erroreen kausak diagnostikatzen laguntzeko. `Bukaera' bat ez datorrena, gako-hitza falta da (`egin', `def`, `baldin`, etab.)? 1 klase Txakurra > 2 defbark > 3 amaiera 4 amaiera
  • Motekin eta argumentuekin erlazionatutako erroreen kasuan argumentuak markatzeko gaitasuna gehitu zaio erroreen kokapen moduan, adibidez: test.rb:2:in `+': nil ezin da Integer (TypeError) batura = ary[ sartu behartu. 0] + ary [1] ^^^^^^
  • Sintaxi berria gehitu da beste argumentu multzo batzuetara birbideratzeko: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler proposatua - MJIT JIT konpiladore zaharraren aldaera bat, Ruby hizkuntzan berridatzia. MJIT exekuzioa prozesu bereizi batean bermatu da, MJIT langileen harian exekutatu beharrean.
  • Bundler 2.4-n, mendekotasunen kudeaketak PubGrub bertsio-bilatzailea erabiltzen du, Dart-erako pub pakete-kudeatzaileak ere erabiltzen duena. Lehen erabilitako Molinillo algoritmoak RubyGems-en erabiltzen jarraitzen du, baina etorkizunean PubGrub-ek ere ordezkatuko du.
  • Liburutegiko gem modulu integratuen eta estandarren bertsio eguneratuak.

Iturria: opennet.ru

Gehitu iruzkin berria