Vrijgave van de programmeertaal Ruby 3.1

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, 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. Het belangrijkste verschil met de eerder gebruikte MJIT JIT-compiler, die is gebaseerd op het verwerken van volledige methoden en een externe compiler in de C-taal gebruikt, is dat YJIT Lazy Basic Block Versioning (LBBV) gebruikt en een geïntegreerde JIT-compiler bevat. Met LBBV compileert JIT eerst alleen het begin van de methode, en compileert de rest enige tijd later, nadat de typen variabelen en argumenten die worden gebruikt tijdens de uitvoering zijn bepaald. Bij gebruik van YJIT werd een prestatieverbetering van 22% geregistreerd bij het uitvoeren van de railsbench-test, en een toename van 39% bij de liquid-rendertest. YJIT is momenteel beperkt tot ondersteuning voor Unix-achtige besturingssystemen op systemen met x86-64-architectuur en is standaard uitgeschakeld (om te activeren geeft u de vlag “--yjit” op de opdrachtregel op).
  • 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. Gestopt met het gebruik van JIT voor methoden met meer dan 1000 instructies. Ter ondersteuning van Zeitwerk of Rails wordt de JIT-code niet langer verwijderd wanneer TracePoint is ingeschakeld voor klasse-evenementen.
  • Het bevat een volledig herschreven debug.gem-debugger, die foutopsporing op afstand ondersteunt, de foutopsporingsapplicatie niet vertraagt, ondersteuning biedt voor integratie met geavanceerde foutopsporingsinterfaces (VSCode en Chrome), kan worden gebruikt voor het debuggen van multi-threaded en multi-procesapplicaties, biedt een REPL-code-uitvoeringsinterface, biedt geavanceerde traceermogelijkheden, kan codefragmenten opnemen en opnieuw afspelen. De eerder aangeboden debugger lib/debug.rb is verwijderd uit de basisdistributie.
    Vrijgave van de programmeertaal Ruby 3.1
  • Implementeerde visuele markering van fouten in terugbeltracerapporten. Foutmarkering wordt mogelijk gemaakt met behulp van het ingebouwde en standaard ingeschakelde gem-pakket error_highlight. Om foutmarkering uit te schakelen, kunt u de instelling “--disable-error_highlight” gebruiken. $ ruby ​​test.rb test.rb:1:in "": ongedefinieerde methode "time" voor 1:Integer (NoMethodError) 1.time {} ^^^^^ Bedoelde je? keer
  • De schil van interactieve berekeningen IRB (REPL, Read-Eval-Print-Loop) implementeert automatische voltooiing van de ingevoerde code (terwijl u typt, wordt een hint weergegeven met opties voor verdere invoer, waartussen u kunt schakelen met de Tab of Shift+ Tab toets). Nadat u de vervolgoptie hebt geselecteerd, wordt er vlakbij een dialoogvenster weergegeven met de documentatie die bij het geselecteerde item hoort. De sneltoets Alt+d kan worden gebruikt om toegang te krijgen tot de volledige documentatie.
    Vrijgave van de programmeertaal Ruby 3.1
  • De taalsyntaxis maakt het nu mogelijk dat waarden in hash-literals en trefwoordargumenten worden overgeslagen bij het aanroepen van functies. In plaats van de uitdrukking “{x: x, y: y}” kunt u nu bijvoorbeeld “{x:, y:}” specificeren, en in plaats van “foo(x: x, y: y)” - foo( x:, y: )".
  • Gestabiliseerde ondersteuning voor patroonovereenkomsten met één regel (ary => [x, y, z]), die niet langer als experimenteel zijn gemarkeerd.
  • De operator "^" in patroonovereenkomsten 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 patroonovereenkomsten met één regel kunt u haakjes weglaten: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • De annotatietaal van het RBS-type, waarmee u de structuur van het programma en de gebruikte typen kunt bepalen, heeft ondersteuning toegevoegd voor het specificeren van de bovengrens van typeparameters met behulp van het “<”-symbool, ondersteuning toegevoegd voor aliassen van generieke typen, ondersteuning geïmplementeerd voor collecties voor het beheren van edelstenen, verbeterde prestaties en veel nieuwe handtekeningen geïmplementeerd voor ingebouwde en standaardbibliotheken.
  • Experimentele ondersteuning voor geïntegreerde ontwikkelomgevingen is toegevoegd aan de TypePro statische type-analysator, die RBS-annotaties genereert op basis van codeanalyse zonder expliciete type-informatie (er is bijvoorbeeld een add-on voorbereid voor de integratie van TypePro met de VSCode-editor).
  • De volgorde van het verwerken van meerdere opdrachten is gewijzigd. Vroeger werden bijvoorbeeld de componenten van de uitdrukking “foo[0], bar[0] = baz, qux” verwerkt in de volgorde baz, qux, foo, bar, maar nu foo, bar, baz, qux.
  • Experimentele ondersteuning toegevoegd voor geheugentoewijzing voor strings met behulp van het VWA-mechanisme (Variable width Allocation).
  • Bijgewerkte versies van ingebouwde edelsteenmodules en die in de standaardbibliotheek. De pakketten net-ftp, net-imap, net-pop, net-smtp, matrix, prime en debug zijn ingebouwd.

Bron: opennet.ru

Voeg een reactie