Ruby 3.1.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:
- Er is een nieuwe experimentele in-process JIT-compiler, YJIT, toegevoegd. Deze is gemaakt door de ontwikkelaars van het e-commerceplatform Shopify als onderdeel van een initiatief om de prestaties te verbeteren van Ruby-programma's die gebruikmaken van het Rails-framework en veel methoden aanroepen. Het belangrijkste verschil met de eerder gebruikte MJIT JIT-compiler, die gebaseerd is op de verwerking van complete methoden en een externe C-compiler gebruikt, is dat YJIT gebruikmaakt van Lazy Basic Block Versioning (LBBV) en een geïntegreerde JIT-compiler bevat. Met LBBV compileert de JIT in eerste instantie alleen het begin van een methode en compileert de rest enige tijd later, nadat de typen van de gebruikte variabelen en argumenten tijdens de uitvoering zijn bepaald. Met behulp van YJIT hebben we een prestatieverbetering van 22% gemeten in de railsbench-test en een prestatieverbetering van 39% in de liquid-render-test. YJIT is momenteel beperkt tot de ondersteuning van Unix-achtige besturingssystemen op x86-64-systemen en is standaard uitgeschakeld (om te activeren, geeft u de vlag "--yjit" op in de opdrachtregel).
- Verbeterde prestaties van de oude MJIT JIT-compiler. Voor projecten die Rails gebruiken, is de standaard maximale cachegrootte (--jit-max-cache) verhoogd van 100 naar 10000 instructies. JIT-handhaving is gestopt voor methoden die meer dan 1000 instructies bevatten. Ter ondersteuning van Zeitwerk van Rails wordt door JIT gegenereerde code niet langer verwijderd als TracePoint is ingeschakeld voor klassegebeurtenissen.
- Het pakket bevat een geheel herschreven debug.gem-debugger die foutopsporing op afstand ondersteunt, de gedebugde toepassing niet vertraagt, integratie met geavanceerde debuginterfaces (VSCode en Chrome) ondersteunt, kan worden gebruikt om multithreaded en multiprocesstoepassingen te debuggen, een REPL-code-uitvoeringsinterface biedt, geavanceerde traceringsmogelijkheden biedt en codefragmenten kan opnemen en opnieuw afspelen. De eerder aangeboden debugger lib/debug.rb is verwijderd uit de basisdistributie.

- Visuele markering van fouten in traceerrapporten voor terugbelverzoeken geïmplementeerd. Foutmarkering wordt verzorgd door het ingebouwde en standaard ingeschakelde gem-pakket error_highlight. Om het markeren van fouten uit te schakelen, kunt u de instelling "--disable-error_highlight" gebruiken. $ ruby test.rb test.rb:1:in " ": ongedefinieerde methode "tijd" voor 1:Integer (NoMethodError) 1.tijd {} ^^^^^ Bedoelde u? keer
- De interactieve IRB-shell (REPL, Read-Eval-Print-Loop) zorgt voor automatische aanvulling van de ingevoerde code (terwijl u typt, verschijnt er een hint met opties om door te gaan met de invoer. U kunt hiertussen navigeren met de Tab- of Shift+Tab-toets). Nadat u een voortzettingsoptie hebt geselecteerd, verschijnt ernaast een dialoogvenster met de documentatie die bij het geselecteerde item hoort. Met de sneltoets Alt+d kunt u de volledige documentatie raadplegen.

- De taalsyntaxis staat nu toe om waarden in hash-literalen en sleutelwoordargumenten weg te laten bij het aanroepen van functies. In plaats van bijvoorbeeld de expressie "{x: x, y: y}" kunt u nu "{x:, y:}" opgeven, en in plaats van "foo(x: x, y: y)" kunt u foo(x:, y:)" opgeven.
- Gestabiliseerde ondersteuning voor patroonmatches op één regel (ary => [x, y, z]), die niet langer als experimenteel zijn gemarkeerd.
- De operator "^" bij patroonherkenning kan nu willekeurige expressies bevatten, bijvoorbeeld: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #=>? [[3, 5], [5, 7], [11, 13]]
- Bij het vergelijken van patronen op één regel is het toegestaan om haakjes weg te laten: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
- De RBS-typeannotatietaal, waarmee u de structuur van een programma en de typen die het gebruikt kunt definiëren, ondersteunt nu het opgeven van de bovengrens van typeparameters met behulp van het symbool "<", voegt ondersteuning toe voor generieke typealiassen, implementeert verzamelingsondersteuning voor het beheren van gems, verbetert de prestaties en implementeert een groot aantal nieuwe handtekeningen voor ingebouwde en standaardbibliotheken.
- De TypePro statische type-analysator, die RBS-annotaties genereert op basis van codeanalyse zonder expliciete type-informatie, heeft experimentele ondersteuning gekregen voor geïntegreerde ontwikkelomgevingen (er is bijvoorbeeld een invoegtoepassing voorbereid voor de integratie van TypePro met de VSCode-editor).
- De volgorde voor het verwerken van meerdere opdrachten is gewijzigd. Vroeger werden de componenten van de expressie "foo[0], bar[0] = baz, qux" bijvoorbeeld verwerkt in de volgorde baz, qux, foo, bar, maar nu worden ze verwerkt in de volgorde foo, bar, baz, qux.
- Experimentele ondersteuning toegevoegd voor het toewijzen van geheugen voor strings met behulp van het VWA-mechanisme (Variable Width Allocation).
- Bijgewerkte versies van ingebouwde en standaardbibliotheek-gemmodules. Ingebouwde pakketten zijn net-ftp, net-imap, net-pop, net-smtp, matrix, prime en debug.
Bron: opennet.ru


