Ruby 3.1.0 blev udgivet, et dynamisk objektorienteret programmeringssprog, der er yderst effektivt i programudvikling og inkorporerer de bedste funktioner fra Perl, Java, Python, Smalltalk, Eiffel, Ada og Lisp. Projektkoden distribueres under BSD ("2-klausul BSDL") og "Ruby"-licenser, som refererer til den seneste version af GPL-licensen og er fuldt ud kompatibel med GPLv3.
Vigtigste forbedringer:
- En ny eksperimentel i-proces JIT-compiler, YJIT, er blevet tilføjet, skabt af udviklerne af Shopify e-handelsplatformen som en del af et initiativ til at forbedre ydeevnen af Ruby-programmer, der bruger Rails-rammerne og kalder en masse metoder. Den vigtigste forskel fra den tidligere brugte MJIT JIT compiler, som er baseret på behandling af hele metoder og bruger en ekstern compiler i C-sproget, er, at YJIT bruger Lazy Basic Block Versioning (LBBV) og indeholder en integreret JIT compiler. Med LBBV kompilerer JIT først kun begyndelsen af metoden, og kompilerer resten noget tid senere, efter at de anvendte variabler og argumenter er bestemt under udførelsen. Ved brug af YJIT blev der registreret en stigning på 22 % i ydeevnen, når man kørte railsbench-testen, og en stigning på 39 % i væskegengivelsestesten. YJIT er i øjeblikket begrænset til understøttelse af unix-lignende OS'er på systemer med x86-64-arkitektur og er deaktiveret som standard (for at aktivere skal du angive flaget "--yjit" på kommandolinjen).
- Forbedret ydeevne af den gamle MJIT JIT compiler. For projekter, der bruger Rails, er standard maksimal cachestørrelse (--jit-max-cache) blevet øget fra 100 til 10000 instruktioner. Stoppet med at bruge JIT til metoder med mere end 1000 instruktioner. For at understøtte Zeitwerk of Rails kasseres JIT-kode ikke længere, når TracePoint er aktiveret til klassebegivenheder.
- Det inkluderer en fuldstændig omskrevet debug.gem debugger, som understøtter fjernfejlfinding, ikke sænker den debuggede applikation, understøtter integration med avancerede fejlfindingsgrænseflader (VSCode og Chrome), kan bruges til debugging af multi-threaded og multi-proces applikationer, giver en REPL-kodeudførelsesgrænseflade, tilbyder avancerede sporingsfunktioner, kan optage og genafspille kodestykker. Den tidligere tilbudte debugger lib/debug.rb er blevet fjernet fra basisdistributionen.
- Implementeret visuel fremhævelse af fejl i tilbagekaldssporingsrapporter. Fejlmarkering leveres ved hjælp af den indbyggede og standardaktiverede gem-pakke error_highlight. For at deaktivere fejlmarkering kan du bruge indstillingen "--disable-error_highlight". $ ruby test.rb test.rb:1:in " ": udefineret metode "tid" for 1:Integer (NoMethodError) 1.time {} ^^^^^ Mente du? gange
- Skallen af interaktive beregninger IRB (REPL, Read-Eval-Print-Loop) implementerer automatisk færdiggørelse af den indtastede kode (efterhånden som du skriver, vises et tip med muligheder for fortsat input, mellem hvilke du kan flytte med Tab eller Shift+ Tab-tast). Når du har valgt fortsættelsesindstillingen, vises en dialogboks i nærheden, der viser den dokumentation, der er knyttet til det valgte element. Tastaturgenvejen Alt+d kan bruges til at få adgang til den fulde dokumentation.
- Sprogsyntaksen tillader nu, at værdier i hash-literaler og nøgleordsargumenter kan springes over, når funktioner kaldes. For eksempel, i stedet for udtrykket "{x: x, y: y}" kan du nu angive "{x:, y:}", og i stedet for "foo(x: x, y: y)" - foo( x:, y: )".
- Stabiliseret understøttelse af single-line mønstermatches (ary => [x, y, z]), som ikke længere er markeret som eksperimentelle.
- "^"-operatoren i mønstermatches kan nu indeholde vilkårlige udtryk, for eksempel: Prime.each_cons(2).lazy.find_all{_1 i [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
- I enkeltlinjes mønstermatches kan du udelade parenteser: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
- RBS-typeannotationssproget, som giver dig mulighed for at bestemme strukturen af programmet og de anvendte typer, har tilføjet understøttelse til at specificere den øvre grænse for typeparametre ved hjælp af "<"-symbolet, tilføjet understøttelse af aliaser af generiske typer, implementeret understøttelse af samlinger til håndtering af ædelstene, forbedret ydeevne og implementeret mange nye signaturer til indbyggede og standardbiblioteker.
- Eksperimentel understøttelse af integrerede udviklingsmiljøer er blevet tilføjet til TypePro statisk typeanalysator, som genererer RBS-annoteringer baseret på kodeanalyse uden eksplicit typeinformation (f.eks. er der udarbejdet en tilføjelse til integration af TypePro med VSCode-editoren).
- Rækkefølgen for behandling af flere opgaver er blevet ændret. For eksempel blev komponenterne i udtrykket "foo[0], bar[0] = baz, qux" behandlet i rækkefølgen baz, qux, foo, bar, men nu foo, bar, baz, qux.
- Tilføjet eksperimentel støtte til hukommelsesallokering til strenge ved hjælp af VWA (Variable Width Allocation) mekanismen.
- Opdaterede versioner af indbyggede ædelstensmoduler og dem, der er inkluderet i standardbiblioteket. Net-ftp, net-imap, net-pop, net-smtp, matrix, prime og debug-pakker er indbygget.
Kilde: opennet.ru