Utgivning av programmeringsspråket Ruby 3.2

Ruby 3.2.0 släpptes, ett dynamiskt objektorienterat programmeringsspråk som är mycket effektivt i programutveckling och som innehåller de bästa funktionerna i Perl, Java, Python, Smalltalk, Eiffel, Ada och Lisp. Projektkoden distribueras under licenserna BSD ("2-klausul BSDL") och "Ruby", som hänvisar till den senaste versionen av GPL-licensen och är helt kompatibel med GPLv3.

Huvudsakliga förbättringar:

  • Lade till en initial port för Cruby-tolken, som kompileras till WebAssembly-mellankod för att köras i en webbläsare eller under fristående körtider som wasmtime. För direkt interaktion med operativsystemet när det körs separat, används WASI (WebAssembly System Interface) API. Bland annat tillhandahålls ett VFS-omslag ovanpå WASI, vilket gör att du kan paketera hela Ruby-applikationen till en presentation i form av en enda wasm-fil. Att köra i en webbläsare kan användas för att skapa utbildnings- och demowebbtjänster som TryRuby. I det aktuella utvecklingsstadiet klarar porten framgångsrikt de grundläggande och bootstrap-testsviterna, som inte använder Thread API. Porten stöder inte heller fibrer, undantag eller sophämtning.
  • YJIT in-process JIT-kompilatorn, skapad av utvecklarna av Shopify e-handelsplattform som en del av ett initiativ för att öka prestandan för Ruby-program som använder Rails-ramverket och anropar många metoder, har förklarats stabil och redo för produktionsanvändning. Den viktigaste skillnaden mot den tidigare använda MJIT JIT-kompilatorn, som bygger på att bearbeta hela metoder och använder en extern kompilator i C-språket, är att YJIT använder Lazy Basic Block Versioning (LBBV) och innehåller en integrerad JIT-kompilator. Med LBBV kompilerar JIT först bara början av metoden, och kompilerar resten en tid senare, efter att typerna av variabler och argument som används har bestämts under exekvering. YJIT är tillgängligt för x86-64 och arm64/aarch64 arkitekturer på Linux, MacOS, BSD och andra UNIX-plattformar.

    Till skillnad från Ruby är YJIT-koden skriven på Rust-språket och kräver kompilatorn rustc 1.58.0+ för kompilering, så YJIT-bygget är inaktiverat som standard och är valfritt. Vid användning av YJIT registrerades en 41 % ökning i prestanda när man körde yjit-bänktestet jämfört med användning av tolkning.

    Utgivning av programmeringsspråket Ruby 3.2

  • Tillagt ytterligare skydd mot överbelastningsattacker vid bearbetning av extern data i ineffektiva och tidskrävande reguljära uttryck (ReDoS). Matchningsalgoritmen, som använder memoreringstekniken, har förbättrats avsevärt. Till exempel, exekveringstiden för uttrycket '/^a*b?a*$/ =~ "a" * 50000 + "x"' reducerades från 10 till 0.003 sekunder. Kostnaden för optimering är en ökning av minnesförbrukningen, vars förbrukning är cirka 10 gånger högre än storleken på indata. Den andra säkerhetsåtgärden är möjligheten att definiera en timeout (till exempel "Regexp.timeout = 1.0") under vilken det reguljära uttrycket måste bearbetas.
  • Läget syntax_suggest ingår, vilket hjälper till att diagnostisera orsakerna till fel associerade med ett saknat eller extra avslutande "slut"-uttryck. Omatchat 'slut', saknas sökord ('do', 'def', 'if', etc.) ? 1 klass Hund > 2 defbark > 3 ände 4 ände
  • Möjligheten att markera argument för fel relaterade till typer och argument har lagts till i felplatsvisningsläget, till exempel: test.rb:2:in `+': noll kan inte tvingas till heltal (TypeError) summa = ary [0] + ary [1] ^^^^^^
  • Lagt till ny syntax för att omdirigera uppsättningar av argument till andra metoder: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler föreslås - en variant av den gamla MJIT JIT-kompilatorn, omskriven på Ruby-språket. Säkerställt att MJIT körs i en separat process istället för att köras i en MJIT-arbetstråd.
  • I Bundler 2.4 använder beroendebehandlingen PubGrub-versionsdetektorn, som också används i pubpakethanteraren för Dart-språket. Den tidigare använda Molinillo-algoritmen fortsätter att användas i RubyGems, men kommer även att ersättas av PubGrub i framtiden.
  • Uppdaterade versioner av inbyggda ädelstensmoduler och de som ingår i standardbiblioteket.

Källa: opennet.ru

Lägg en kommentar