Frigivelse af Ruby-programmeringssproget 3.1

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.
    Frigivelse af Ruby-programmeringssproget 3.1
  • 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.
    Frigivelse af Ruby-programmeringssproget 3.1
  • 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

Tilføj en kommentar