Vrijgave van de programmeertaal Ruby 3.2

Ruby 3.2.0 is uitgebracht, een dynamische objectgeoriënteerde programmeertaal die zeer efficiënt is bij het ontwikkelen van programma's en de beste eigenschappen bevat van Perl, Java, Python, Smalltalk, Eiffel, Ada en Lisp. De projectcode wordt gedistribueerd onder de BSD ("2-clause BSDL") en "Ruby" licenties, wat verwijst naar de nieuwste versie van de GPL-licentie en is volledig compatibel met GPLv3.

Belangrijkste verbeteringen:

  • Een initiële poort toegevoegd van een CRuby-interpreter die compileert naar tussenliggende WebAssembly-code om te draaien in een webbrowser of onder zelfstandige runtimes zoals wasmtime. Voor directe interactie met het besturingssysteem wanneer het afzonderlijk wordt uitgevoerd, wordt de WASI-API (WebAssembly System Interface) gebruikt. Er wordt onder meer een VFS-binding bovenop WASI geleverd, waarmee u de gehele applicatie in de Ruby-taal kunt verpakken in een weergave in de vorm van één wasm-bestand. Uitvoeren in een browser kan worden gebruikt om tutorial- en demo-webservices zoals TryRuby te maken. In de huidige ontwikkelingsfase slaagt de port met succes voor de basis- en bootstrap-testsuites, die geen gebruik maken van de Thread API. De poort ondersteunt ook geen glasvezel, uitzonderingen of afvalinzameling.
  • De in-process JIT-compiler YJIT, gemaakt door de ontwikkelaars van het Shopify e-commerceplatform als onderdeel van een initiatief om de prestaties te verbeteren van Ruby-programma's die het Rails-framework gebruiken en veel methoden aanroepen, is stabiel verklaard en klaar voor productie gebruik. Het belangrijkste verschil met de eerder gebruikte MJIT JIT-compiler, die gebaseerd is op methodeverwerking en een externe C-compiler gebruikt, is dat YJIT Lazy Basic Block Versioning (LBBV) gebruikt en een geïntegreerde JIT-compiler bevat. Dankzij LBBV compileert JIT eerst alleen het begin van de methode en compileert de rest na enige tijd, nadat de typen variabelen en argumenten die worden gebruikt tijdens de uitvoering zijn bepaald. YJIT is beschikbaar voor x86-64- en arm64/aarch64-architecturen op Linux, MacOS, BSD en andere UNIX-platforms.

    In tegenstelling tot CRuby is YJIT-code geschreven in Rust en vereist de compiler rustc 1.58.0+ om te compileren, dus YJIT-compilatie is standaard uitgeschakeld en is optioneel. Bij het gebruik van YJIT werd een prestatieverbetering van 41% geregistreerd bij het uitvoeren van de yjit-bench-test in vergelijking met het gebruik van interpretatie.

    Vrijgave van de programmeertaal Ruby 3.2

  • Extra bescherming toegevoegd tegen aanvallen die denial of service veroorzaken bij het verwerken van externe gegevens in inefficiënte en langlopende reguliere expressies (ReDoS). Aanzienlijk verbeterd matching-algoritme, dat gebruikmaakt van de memorisatietechniek. Zo is de uitvoeringstijd van de expressie '/^a*b?a*$/ =~ "a" * 50000 + "x"' teruggebracht van 10 naar 0.003 seconden. De prijs van optimalisatie is een toename van het geheugenverbruik, waarvan het verbruik ongeveer 10 keer hoger is dan de grootte van de invoergegevens. De tweede beveiligingsmaatregel is de mogelijkheid om een ​​time-out te definiëren (bijvoorbeeld "Regexp.timeout = 1.0"), waarvoor de reguliere expressie tijd moet hebben om te worden verwerkt.
  • De syntax_suggest-modus is opgenomen om te helpen bij het diagnosticeren van de oorzaken van fouten die verband houden met een ontbrekende of overtollige "end"-afsluitingsinstructie. Ongeëvenaard `end', ontbrekend trefwoord (`do', `def`, `if`, enz.) ? 1 klasse Hond > 2 defbark > 3 einde 4 einde
  • De mogelijkheid toegevoegd om argumenten te markeren in geval van fouten gerelateerd aan typen en argumenten aan de foutlocatiemodus, bijvoorbeeld: test.rb:2:in `+': nil kan niet worden gedwongen tot Integer (TypeError) sum = ary[ 0] + ary [1] ^^^^^^
  • Nieuwe syntaxis toegevoegd voor het omleiden naar andere methodes voor argumentverzamelingen: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler voorgesteld - een variant van de oude MJIT JIT-compiler, herschreven in de Ruby-taal. Gegarandeerde MJIT-uitvoering in een apart proces, in plaats van uitvoering in de MJIT-werkthread.
  • In Bundler 2.4 gebruikt de afhankelijkheidsafhandeling de PubGrub-versiezoeker, ook gebruikt door de pub-pakketbeheerder voor Dart. Het eerder gebruikte Molinillo-algoritme wordt nog steeds gebruikt in RubyGems, maar zal in de toekomst ook worden vervangen door PubGrub.
  • Bijgewerkte versies van ingebouwde en standaard bibliotheek-edelsteenmodules.

Bron: opennet.ru

Voeg een reactie