Lëshimi i gjuhës programuese Ruby 3.2

Ruby 3.2.0 është lëshuar, një gjuhë programimi dinamike e orientuar drejt objekteve që është shumë efikase në zhvillimin e programit dhe përfshin veçoritë më të mira të Perl, Java, Python, Smalltalk, Eiffel, Ada dhe Lisp. Kodi i projektit shpërndahet nën licencat BSD ("2-klauzolë BSDL") dhe "Ruby", i cili i referohet versionit më të fundit të licencës GPL dhe është plotësisht i pajtueshëm me GPLv3.

Përmirësimet kryesore:

  • U shtua një port fillestar i një përkthyesi CRuby që përpilohet në kodin e ndërmjetëm WebAssembly për t'u ekzekutuar në një shfletues uebi ose në periudha të pavarura ekzekutimi, si p.sh. wasmtime. Për ndërveprim të drejtpërdrejtë me sistemin operativ kur funksionon veçmas, përdoret API WASI (WebAssembly System Interface). Ndër të tjera, ofrohet një lidhje VFS në krye të WASI, e cila ju lejon të paketoni të gjithë aplikacionin në gjuhën Ruby në një pamje në formën e një skedari të vetëm wasm. Ekzekutimi në një shfletues mund të përdoret për të krijuar shërbime ueb tutoriale dhe demo si TryRuby. Në fazën aktuale të zhvillimit, porti kalon me sukses suitat e testit bazë dhe bootstrap, të cilat nuk përdorin Thread API. Porti gjithashtu nuk mbështet Fiber, Exceptions ose Garbage Collection.
  • Përpiluesi JIT në proces YJIT, i krijuar nga zhvilluesit e platformës së tregtisë elektronike Shopify si pjesë e një nisme për të rritur performancën e programeve Ruby që përdorin kornizën Rails dhe thërrasin shumë metoda, është shpallur i qëndrueshëm dhe i gatshëm për përdorimi i prodhimit. Dallimi kryesor nga përpiluesi MJIT JIT i përdorur më parë, i cili bazohet në përpunimin e metodës dhe përdor një përpilues të jashtëm C, është se YJIT përdor versionin Lazy Basic Block (LBBV) dhe përmban një përpilues të integruar JIT. Falë LBBV, JIT përpilon fillimisht vetëm fillimin e metodës dhe përpilon pjesën tjetër pas njëfarë kohe, pasi të përcaktohen llojet e variablave dhe argumenteve të përdorura gjatë ekzekutimit. YJIT është i disponueshëm për arkitekturat x86-64 dhe arm64/aarch64 në Linux, MacOS, BSD dhe platforma të tjera UNIX.

    Ndryshe nga CRuby, kodi YJIT është i shkruar në Rust dhe kërkon përpiluesin rustc 1.58.0+ për tu kompiluar, kështu që përpilimi YJIT është i çaktivizuar si parazgjedhje dhe është opsional. Kur përdorni YJIT, u regjistrua një rritje prej 41% në performancë gjatë ekzekutimit të testit yjit-bench krahasuar me përdorimin e interpretimit.

    Lëshimi i gjuhës programuese Ruby 3.2

  • U shtua mbrojtje shtesë kundër sulmeve që shkaktojnë mohim të shërbimit gjatë përpunimit të të dhënave të jashtme në shprehje të rregullta joefikase dhe afatgjatë (ReDoS). Algoritmi i përputhjes është përmirësuar ndjeshëm, i cili përdor teknikën e memorizimit. Për shembull, koha e ekzekutimit të shprehjes '/^a*b?a*$/ =~ "a" * 50000 + "x"' është reduktuar nga 10 në 0.003 sekonda. Çmimi i optimizimit është një rritje në konsumin e memories, konsumi i së cilës është rreth 10 herë më i lartë se madhësia e të dhënave hyrëse. Masa e dytë e sigurisë është aftësia për të përcaktuar një afat kohor (për shembull, "Regexp.timeout = 1.0"), për të cilën shprehja e rregullt duhet të ketë kohë për t'u përpunuar.
  • Modaliteti syntax_suggest përfshihet për të ndihmuar në diagnostikimin e shkaqeve të gabimeve që lidhen me një deklaratë mbyllëse "fund" të munguar ose të tepërt. "Fund" i pakrahasueshëm, mungon fjala kyçe ("bëj", "përcaktoj", "nëse" etj.) ? 1 klasë Dog > 2 deflehk > 3 fund 4 fund
  • U shtua aftësia për të shënuar argumente në rast të gabimeve në lidhje me llojet dhe argumentet në modalitetin e vendndodhjes së gabimit, për shembull: test.rb:2:in `+': zero nuk mund të futet në Integer (TypeError) sum = ary[ 0] + ary [1] ^^^^^^
  • U shtua sintaksë e re për ridrejtimin te metodat e tjera të grupit të argumenteve: def foo(*) bar(*) fund def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler i propozuar - një variant i përpiluesit të vjetër MJIT JIT, i rishkruar në gjuhën Ruby. Siguroi ekzekutimin e MJIT në një proces të veçantë, në vend të ekzekutimit në fillin e punëtorëve të MJIT.
  • Në Bundler 2.4, trajtimi i varësisë përdor gjetësin e versionit PubGrub, i përdorur gjithashtu nga menaxheri i paketave të pub-it për Dart. Algoritmi Molinillo i përdorur më parë vazhdon të përdoret në RubyGems, por do të zëvendësohet edhe nga PubGrub në të ardhmen.
  • Versione të përditësuara të moduleve të integruara dhe standarde të gurëve të çmuar të bibliotekës.

Burimi: opennet.ru

Shto një koment