Ruby programmēšanas valodas 3.2 izlaišana

Ir izlaista Ruby 3.2.0 — dinamiska objektorientēta programmēšanas valoda, kas ir ļoti efektīva programmu izstrādē un ietver Perl, Java, Python, Smalltalk, Eiffel, Ada un Lisp labākās iespējas. Projekta kods tiek izplatīts saskaņā ar BSD ("2 klauzulu BSDL") un "Ruby" licencēm, kas attiecas uz jaunāko GPL licences versiju un ir pilnībā savietojams ar GPLv3.

Galvenie uzlabojumi:

  • Pievienots CRuby tulka sākotnējais ports, kas kompilējas WebAssembly starpposma kodā, lai tas darbotos tīmekļa pārlūkprogrammā vai atsevišķos izpildlaikos, piemēram, wasmtime. Tiešai mijiedarbībai ar operētājsistēmu, kad tā darbojas atsevišķi, tiek izmantota WASI (WebAssembly System Interface) API. Cita starpā tiek nodrošināts VFS saistījums virs WASI, kas ļauj iepakot visu lietojumprogrammu Ruby valodā skatā viena wasm faila veidā. Darbošanos pārlūkprogrammā var izmantot, lai izveidotu apmācības un demonstrācijas tīmekļa pakalpojumus, piemēram, TryRuby. Pašreizējā izstrādes stadijā ports veiksmīgi iztur pamata un sāknēšanas testa komplektus, kuros netiek izmantota Thread API. Ports arī neatbalsta Fiber, Izņēmumus vai Atkritumu savākšanu.
  • Procesa laikā esošais JIT kompilators YJIT, ko Shopify e-komercijas platformas izstrādātāji izveidojuši kā daļu no iniciatīvas, lai palielinātu Ruby programmu veiktspēju, kas izmanto Rails ietvaru un izsauc daudzas metodes, ir pasludināts par stabilu un gatavs darbam. ražošanas izmantošana. Galvenā atšķirība no iepriekš izmantotā MJIT JIT kompilatora, kas balstās uz metožu apstrādi un izmanto ārēju C kompilatoru, ir tā, ka YJIT izmanto Lazy Basic Block Versioning (LBBV) un satur integrētu JIT kompilatoru. Pateicoties LBBV, JIT sākumā kompilē tikai metodes sākumu un pēc kāda laika kompilē pārējo, kad izpildes laikā ir noteikti izmantojamo mainīgo un argumentu veidi. YJIT ir pieejams x86-64 un arm64/aarch64 arhitektūrām Linux, MacOS, BSD un citās UNIX platformās.

    Atšķirībā no CRuby YJIT kods ir rakstīts Rust valodā, un tā kompilēšanai ir nepieciešams kompilators rustc 1.58.0+, tāpēc YJIT kompilācija pēc noklusējuma ir atspējota un nav obligāta. Izmantojot YJIT, yjit-bench testā tika reģistrēts veiktspējas pieaugums par 41%, salīdzinot ar interpretācijas izmantošanu.

    Ruby programmēšanas valodas 3.2 izlaišana

  • Pievienota papildu aizsardzība pret uzbrukumiem, kas izraisa pakalpojumu liegšanu, apstrādājot ārējos datus neefektīvās un ilgstoši darbojošās regulārās izteiksmēs (ReDoS). Ievērojami uzlabots saskaņošanas algoritms, kurā tiek izmantota iegaumēšanas tehnika. Piemēram, izteiksmes '/^a*b?a*$/ =~ "a" * 50000 + "x"' izpildes laiks ir samazināts no 10 uz 0.003 sekundēm. Optimizācijas cena ir atmiņas patēriņa pieaugums, kura patēriņš ir aptuveni 10 reizes lielāks nekā ievades datu apjoms. Otrs drošības pasākums ir iespēja definēt taimautu (piemēram, "Regexp.timeout = 1.0"), kuram regulāras izteiksmes apstrādei ir jābūt laikam.
  • Režīms syntax_suggest ir iekļauts, lai palīdzētu diagnosticēt kļūdu cēloņus, kas saistītas ar trūkstošu vai lieku beigu paziņojumu. Nesaskaņots 'beigas', trūkst atslēgvārda ('do', 'def', 'if' utt.)? 1 klase Suns > 2 defbark > 3 end 4 end
  • Pievienota iespēja atzīmēt argumentus kļūdu gadījumā, ja rodas kļūdas, kas saistītas ar veidiem un argumentiem kļūdu atrašanās vietas režīmā, piemēram: test.rb:2:in `+': nulli nevar piespiest vesels skaitlis (TypeError) summa = ary[ 0] + ary [1] ^^^^^^
  • Pievienota jauna sintakse novirzīšanai uz citām argumentu kopas metodēm: def foo(*) bar(*) end def baz(**) quux(**) end
  • Piedāvātais Ruby_vm/mjit/compiler - vecā MJIT JIT kompilatora variants, kas pārrakstīts Ruby valodā. Nodrošināta MJIT izpilde atsevišķā procesā, nevis izpilde MJIT darbinieka pavedienā.
  • Programmā Bundler 2.4 atkarības apstrādei tiek izmantots PubGrub versiju meklētājs, ko izmanto arī Dart pub pakotņu pārvaldnieks. Iepriekš izmantotais Molinillo algoritms joprojām tiek izmantots RubyGems, taču nākotnē to aizstās arī PubGrub.
  • Atjauninātas iebūvēto un standarta bibliotēkas gem moduļu versijas.

Avots: opennet.ru

Pievieno komentāru