Utgivning av programmeringsspråket Ruby 3.1

Ruby 3.1.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:

  • En ny experimentell i-process JIT-kompilator, YJIT, har lagts till, skapad av utvecklarna av Shopifys e-handelsplattform som en del av ett initiativ för att förbättra prestandan för Ruby-program som använder Rails-ramverket och anropar många metoder. 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. Vid användning av YJIT registrerades en 22 % ökning i prestanda när man körde railsbench-testet och en 39 % ökning i vätskerenderingstestet. YJIT är för närvarande begränsat till stöd för unix-liknande operativsystem på system med x86-64-arkitektur och är inaktiverat som standard (för att aktivera, ange "--yjit"-flaggan på kommandoraden).
  • Förbättrad prestanda för den gamla MJIT JIT-kompilatorn. För projekt som använder Rails har standardstorleken för maximal cache (--jit-max-cache) ökats från 100 till 10000 1000 instruktioner. Slutade använda JIT för metoder med mer än XNUMX instruktioner. För att stödja Zeitwerk of Rails kasseras inte längre JIT-kod när TracePoint är aktiverat för klasshändelser.
  • Den innehåller en helt omskriven debug.gem debugger, som stöder fjärrfelsökning, inte saktar ner den felsökta applikationen, stöder integration med avancerade felsökningsgränssnitt (VSCode och Chrome), kan användas för felsökning av flertrådiga och multiprocessapplikationer, ger ett gränssnitt för körning av REPL-kod, erbjuder avancerade spårningsmöjligheter, kan spela in och spela upp kodavsnitt. Den tidigare erbjudna debuggern lib/debug.rb har tagits bort från basdistributionen.
    Utgivning av programmeringsspråket Ruby 3.1
  • Implementerat visuell markering av fel i återuppringningsrapporter. Felflaggning tillhandahålls med det inbyggda och standardaktiverade ädelstenspaketet error_highlight. För att inaktivera felflaggning kan du använda inställningen "--disable-error_highlight". $ ruby ​​test.rb test.rb:1:in " ": odefinierad metod "tid" för 1:Integer (NoMethodError) 1.time {} ^^^^^ Menade du? gånger
  • Skalet av interaktiva beräkningar IRB (REPL, Read-Eval-Print-Loop) implementerar automatiskt komplettering av den inmatade koden (när du skriver visas ett tips med alternativ för fortsatt inmatning, mellan vilka du kan flytta med Tab eller Shift+ Tab-tangenten). Efter att ha valt fortsättningsalternativet visas en dialogruta i närheten som visar dokumentationen som är kopplad till det valda objektet. Kortkommandot Alt+d kan användas för att komma åt hela dokumentationen.
    Utgivning av programmeringsspråket Ruby 3.1
  • Språksyntaxen tillåter nu att värden i hash-literaler och nyckelordsargument hoppas över när funktioner anropas. Till exempel, istället för uttrycket "{x: x, y: y}" kan du nu ange "{x:, y:}", och istället för "foo(x: x, y: y)" - foo( x:, y: )".
  • Stabiliserat stöd för enkelradsmönstermatchningar (ary => [x, y, z]), som inte längre flaggas som experimentella.
  • Operatorn "^" i mönstermatchningar kan nu innehålla godtyckliga uttryck, till exempel: Prime.each_cons(2).lazy.find_all{_1 i [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • I enradiga mönstermatchningar kan du utelämna parenteser: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • RBS-typanteckningsspråket, som låter dig bestämma strukturen för programmet och vilka typer som används, har lagt till stöd för att specificera den övre gränsen för typparametrar med hjälp av "<"-symbolen, lagt till stöd för alias av generiska typer, implementerat stöd för samlingar för att hantera ädelstenar, förbättrade prestanda och implementerade många nya signaturer för inbyggda och standardbibliotek.
  • Experimentellt stöd för integrerade utvecklingsmiljöer har lagts till TypePro statisk typanalysator, som genererar RBS-anteckningar baserade på kodanalys utan explicit typinformation (till exempel har ett tillägg förberetts för att integrera TypePro med VSCode-redigeraren).
  • Ordningen för behandling av flera uppdrag har ändrats. Till exempel, tidigare bearbetades komponenterna i uttrycket "foo[0], bar[0] = baz, qux" i ordningen baz, qux, foo, bar, men nu foo, bar, baz, qux.
  • Lade till experimentellt stöd för minnesallokering för strängar med VWA-mekanismen (Variable Width Allocation).
  • Uppdaterade versioner av inbyggda ädelstensmoduler och de som ingår i standardbiblioteket. Paketen net-ftp, net-imap, net-pop, net-smtp, matrix, prime och debug är inbyggda.

Källa: opennet.ru

Lägg en kommentar