Utgivelse av Ruby programmeringsspråk 3.2

Ruby 3.2.0 ble utgitt, et dynamisk objektorientert programmeringsspråk som er svært effektivt i programutvikling og inneholder de beste funksjonene til Perl, Java, Python, Smalltalk, Eiffel, Ada og Lisp. Prosjektkoden distribueres under lisensene BSD ("2-klausul BSDL") og "Ruby", som refererer til den nyeste versjonen av GPL-lisensen og er fullt kompatibel med GPLv3.

Hovedforbedringer:

  • Lagt til en innledende port for Cruby-tolken, som kompileres inn i WebAssembly-mellomkode for å kjøre i en nettleser eller under frittstående kjøretider som wasmtime. For direkte interaksjon med operativsystemet når det kjøres separat, brukes WASI (WebAssembly System Interface) API. Blant annet leveres en VFS-innpakning på toppen av WASI, som lar deg pakke hele Ruby-applikasjonen inn i en presentasjon i form av en enkelt wasm-fil. Å kjøre i en nettleser kan brukes til å lage opplærings- og demo-webtjenester som TryRuby. På det nåværende utviklingsstadiet passerer porten de grunnleggende og bootstrap-testpakkene, som ikke bruker Thread API. Porten støtter heller ikke fibre, unntak eller søppelinnsamling.
  • YJIT in-process JIT-kompilatoren, laget av utviklerne av Shopify e-handelsplattformen som en del av et initiativ for å øke ytelsen til Ruby-programmer som bruker Rails-rammeverket og kaller mange metoder, er erklært stabil og klar for produksjonsbruk. Hovedforskjellen fra den tidligere brukte MJIT JIT-kompilatoren, som er basert på å behandle hele metoder og bruker en ekstern kompilator i C-språket, er at YJIT bruker Lazy Basic Block Versioning (LBBV) og inneholder en integrert JIT-kompilator. Med LBBV kompilerer JIT først bare begynnelsen av metoden, og kompilerer resten en tid senere, etter at typene variabler og argumenter som brukes er bestemt under kjøringen. YJIT er tilgjengelig for x86-64 og arm64/aarch64 arkitekturer på Linux, MacOS, BSD og andre UNIX-plattformer.

    I motsetning til Ruby er YJIT-koden skrevet på Rust-språket og krever rustc 1.58.0+ kompilatoren for kompilering, så YJIT-bygget er deaktivert som standard og er valgfritt. Ved bruk av YJIT ble det registrert en 41 % økning i ytelse ved kjøring av yjit-benk-testen sammenlignet med bruk av tolkning.

    Utgivelse av Ruby programmeringsspråk 3.2

  • Lagt til ekstra beskyttelse mot tjenestenektangrep ved behandling av eksterne data i ineffektive og tidkrevende regulære uttrykk (ReDoS). Matchingsalgoritmen, som bruker memoreringsteknikken, har blitt betydelig forbedret. For eksempel ble utførelsestiden for uttrykket '/^a*b?a*$/ =~ "a" * 50000 + "x"' redusert fra 10 til 0.003 sekunder. Kostnaden for optimalisering er en økning i minneforbruket, hvis forbruk er omtrent 10 ganger høyere enn størrelsen på inngangsdataene. Det andre sikkerhetstiltaket er muligheten til å definere en timeout (for eksempel "Regexp.timeout = 1.0") der det regulære uttrykket må behandles.
  • Syntax_suggest-modusen er inkludert, som hjelper til med å diagnostisere årsakene til feil knyttet til et manglende eller ekstra avsluttende "slutt"-uttrykk. Ikke samsvarende `slutt', mangler søkeord (`do', `def`, `if`, etc.) ? 1 klasse Hund > 2 defbark > 3 ende 4 ende
  • Muligheten til å merke argumenter for feil relatert til typer og argumenter er lagt til feilplasseringsvisningsmodusen, for eksempel: test.rb:2:in `+': null kan ikke tvinges til heltall (TypeError) sum = ary [0] + ary [1] ^^^^^^
  • Lagt til ny syntaks for å omdirigere sett med argumenter til andre metoder: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler er foreslått - en variant av den gamle MJIT JIT-kompilatoren, omskrevet på Ruby-språket. Sørget for at MJIT kjører i en egen prosess i stedet for å kjøre i en MJIT-arbeidertråd.
  • I Bundler 2.4 bruker avhengighetsbehandlingen PubGrub-versjonsdetektoren, også brukt i pubpakkebehandleren for Dart-språket. Den tidligere brukte Molinillo-algoritmen fortsetter å bli brukt i RubyGems, men vil også bli erstattet av PubGrub i fremtiden.
  • Oppdaterte versjoner av innebygde edelstensmoduler og de som er inkludert i standardbiblioteket.

Kilde: opennet.ru

Legg til en kommentar