Ruby-ohjelmointikielen julkaisu 3.2

Ruby 3.2.0 julkaistiin, dynaaminen olio-ohjelmointikieli, joka on erittäin tehokas ohjelmakehityksessä ja sisältää Perlin, Javan, Pythonin, Smalltalkin, Eiffelin, Adan ja Lispin parhaat ominaisuudet. Projektikoodia jaetaan BSD- ("2-lauseke BSDL")- ja "Ruby"-lisenssien alla, mikä viittaa GPL-lisenssin uusimpaan versioon ja on täysin yhteensopiva GPLv3:n kanssa.

Tärkeimmät parannukset:

  • Lisätty CRuby-tulkin alkuportti, joka kokoaa WebAssembly-välikoodin käytettäväksi verkkoselaimessa tai itsenäisissä suoritusajoissa, kuten wasmtime. Suoraan vuorovaikutukseen käyttöjärjestelmän kanssa, kun se suoritetaan erikseen, käytetään WASI (WebAssembly System Interface) API:ta. WASI:n päällä on muun muassa VFS-kääre, jonka avulla voit pakata koko Ruby-sovelluksen esitykseksi yhden wasm-tiedoston muodossa. Selaimella ajamista voidaan käyttää koulutus- ja demoverkkopalveluiden, kuten TryRubyn, luomiseen. Nykyisessä kehitysvaiheessa portti läpäisee onnistuneesti perus- ja bootstrap-testipaketit, jotka eivät käytä Thread API:ta. Portti ei myöskään tue kuituja, poikkeuksia tai roskien keräämistä.
  • YJIT-prosessin sisäinen JIT-kääntäjä, jonka Shopify-verkkokauppaalustan kehittäjät ovat luoneet osana aloitetta Rails-kehystä käyttävien ja monia menetelmiä kutsuvien Ruby-ohjelmien suorituskyvyn lisäämiseksi, on julistettu vakaaksi ja valmiiksi käyttöön. tuotannon käyttöön. Keskeinen ero aiemmin käytetystä kokonaisten menetelmien käsittelyyn perustuvasta ja ulkoista C-kielen kääntäjää käyttävästä MJIT JIT-kääntäjästä on se, että YJIT käyttää Lazy Basic Block Versioning (LBBV) -tekniikkaa ja sisältää integroidun JIT-kääntäjän. LBBV:ssä JIT kääntää ensin vain menetelmän alun ja loput jonkin ajan kuluttua, kun käytettyjen muuttujien ja argumenttien tyypit on määritetty suorituksen aikana. YJIT on saatavilla x86-64- ja arm64/aarch64-arkkitehtuureille Linux-, MacOS-, BSD- ja muilla UNIX-alustoilla.

    Toisin kuin Ruby, YJIT-koodi on kirjoitettu Rust-kielellä ja vaatii kääntämiseen rustc 1.58.0+ -kääntäjän, joten YJIT-koontiversio on oletuksena pois käytöstä ja se on valinnainen. YJIT:tä käytettäessä saavutettiin 41 % suorituskyvyn kasvu yjit-penkkitestissä verrattuna tulkintaan.

    Ruby-ohjelmointikielen julkaisu 3.2

  • Lisätty lisäsuojaus palvelunestohyökkäyksiä vastaan, kun ulkoisia tietoja käsitellään tehottomilla ja aikaa vievillä säännöllisillä lausekkeilla (ReDoS). Muistitekniikkaa käyttävää sovitusalgoritmia on parannettu merkittävästi. Esimerkiksi lausekkeen '/^a*b?a*$/ =~ "a" * 50000 + "x"' suoritusaikaa lyhennettiin 10:stä 0.003 sekuntiin. Optimoinnin hinta on lisäys muistinkulutuksessa, jonka kulutus on noin 10 kertaa suurempi kuin syötetyn tiedon koko. Toinen turvatoimenpide on kyky määrittää aikakatkaisu (esimerkiksi "Regexp.timeout = 1.0"), jonka aikana säännöllinen lauseke on käsiteltävä.
  • Mukana on syntax_suggest-tila, joka auttaa diagnosoimaan puuttuvaan tai ylimääräiseen loppulausekkeeseen liittyvien virheiden syyt. Vastaamaton "end", puuttuva avainsana ("do", "def", "if" jne.) ? 1 luokka Koira > 2 defbark > 3 end 4 end
  • Mahdollisuus merkitä argumentteja tyyppeihin ja argumentteihin liittyville virheille on lisätty virheen sijainnin näyttötilaan, esimerkiksi: test.rb:2:in `+': nollaa ei voida pakottaa kokonaisluvuksi (TypeError) summa = ary [0] + ary [1] ^^^^^^
  • Lisätty uusi syntaksi argumenttijoukkojen uudelleenohjaamiseksi muihin menetelmiin: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler ehdotetaan - variantti vanhasta MJIT JIT -kääntäjästä, joka on kirjoitettu uudelleen Ruby-kielellä. Varmistettiin, että MJIT suoritetaan erillisessä prosessissa MJIT-työsäikeen sijaan.
  • Bundler 2.4:ssä riippuvuuskäsittely käyttää PubGrub-version ilmaisinta, jota käytetään myös Dart-kielen pub-pakettien hallinnassa. Aiemmin käytetty Molinillo-algoritmi on edelleen käytössä RubyGemsissä, mutta se korvataan myös PubGrubilla tulevaisuudessa.
  • Päivitetyt versiot sisäänrakennetuista jalokivimoduuleista ja niistä, jotka sisältyvät vakiokirjastoon.

Lähde: opennet.ru

Lisää kommentti