A Ruby 3.2 programozási nyelv kiadása

Megjelent a Ruby 3.2.0, egy dinamikus objektum-orientált programozási nyelv, amely rendkívül hatékony a programfejlesztésben, és magában foglalja a Perl, Java, Python, Smalltalk, Eiffel, Ada és Lisp legjobb tulajdonságait. A projektkód a BSD ("2-clause BSDL") és a "Ruby" licencek alatt kerül terjesztésre, amelyek a GPL licenc legújabb verziójára utalnak, és teljes mértékben kompatibilisek a GPLv3-mal.

Főbb fejlesztések:

  • Hozzáadott egy kezdeti portot a CRuby interpreterhez, amely a WebAssembly közbenső kódot fordítja, hogy webböngészőben vagy önálló futtatókörnyezetben, például wasmtime alatt futhasson. Az operációs rendszerrel való közvetlen interakcióhoz, ha külön fut, a WASI (WebAssembly System Interface) API használatos. Többek között a WASI tetején található VFS-kötés, amely lehetővé teszi a teljes alkalmazás Ruby nyelvű nézetbe való csomagolását egyetlen wasm fájl formájában. A böngészőben futtatva oktató- és bemutató webszolgáltatásokat hozhat létre, például a TryRuby-t. A fejlesztés jelenlegi szakaszában a port sikeresen átmegy az alap és a bootstrap tesztcsomagokon, amelyek nem használják a Thread API-t. A port nem támogatja a Fiber, Exceptions vagy Garbage Collection funkciót sem.
  • Stabilnak és használatra késznek nyilvánították a folyamatban lévő YJIT JIT fordítót, amelyet a Shopify e-kereskedelmi platform fejlesztői hoztak létre a Rails keretrendszert használó és számos metódust hívó Ruby programok teljesítményének növelésére irányuló kezdeményezés részeként. termelési felhasználás. A fő különbség a korábban használt MJIT JIT fordítóhoz képest, amely metódusfeldolgozáson alapul, és külső C fordítót használ, hogy az YJIT Lazy Basic Block Versioning (LBBV)-t használ, és tartalmaz egy integrált JIT fordítót. Az LBBV-nek köszönhetően a JIT először csak az elejét fordítja le a metódusnak, a többit egy idő után, miután a végrehajtás során meghatározzák a használt változók és argumentumok típusát. Az YJIT elérhető x86-64 és arm64/aarch64 architektúrákhoz Linux, MacOS, BSD és más UNIX platformokon.

    A CRuby-val ellentétben az YJIT kód Rust nyelven íródott, és a rustc 1.58.0+ fordítója szükséges a fordításhoz, így az YJIT fordítás alapértelmezés szerint le van tiltva, és nem kötelező. Az YJIT használatakor 41%-os teljesítménynövekedést regisztráltunk az yjit-bench teszt futtatásakor az interpretációhoz képest.

    A Ruby 3.2 programozási nyelv kiadása

  • Kiegészítő védelem a külső adatok nem hatékony és hosszan futó reguláris kifejezések (ReDoS) feldolgozása során szolgáltatásmegtagadást okozó támadásokkal szemben. Jelentősen továbbfejlesztett illesztési algoritmus, amely a memorizálási technikát használja. Például a '/^a*b?a*$/ =~ "a" * 50000 + "x"' kifejezés végrehajtási ideje 10-ről 0.003 másodpercre csökkent. Az optimalizálás ára a memóriafelhasználás növekedése, melynek fogyasztása körülbelül 10-szerese a bemeneti adatok méretének. A második biztonsági intézkedés egy időtúllépés meghatározásának képessége (például "Regexp.timeout = 1.0"), amelyhez a reguláris kifejezésnek időnek kell lennie a feldolgozáshoz.
  • A syntax_suggest mód a hiányzó vagy redundáns „vége” záróutasítással kapcsolatos hibák okainak diagnosztizálására szolgál. Páratlan 'end', hiányzó kulcsszó ('do', 'def', 'if' stb.)? 1 osztály Kutya > 2 defbark > 3 end 4 end
  • Hozzáadtuk az argumentumok megjelölésének lehetőségét a típusokhoz és argumentumokhoz kapcsolódó hibák esetén a hibahelyreállító módhoz, például: test.rb:2:in `+': a nil nem kényszeríthető egész számra (TypeError) sum = ary[ 0] + ary [1] ^^^^^^
  • Új szintaxis hozzáadva más argumentumkészlet-módszerekre való átirányításhoz: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler javasolt - a régi MJIT JIT fordító egy változata, Ruby nyelvre átírva. Biztosította az MJIT végrehajtását egy külön folyamatban, az MJIT worker szálban történő végrehajtás helyett.
  • A Bundler 2.4-ben a függőségek kezelése a PubGrub verziókeresőt használja, amelyet a Dart pub csomagkezelője is használ. A korábban használt Molinillo algoritmust továbbra is a RubyGems használja, de a jövőben a PubGrub is felváltja.
  • A beépített és szabványos könyvtári gyöngyszem modulok frissített verziói.

Forrás: opennet.ru

Hozzászólás