Llançament del llenguatge de programació Ruby 3.1

Es va llançar Ruby 3.1.0, un llenguatge de programació dinàmic orientat a objectes que és molt eficient en el desenvolupament de programes i incorpora les millors característiques de Perl, Java, Python, Smalltalk, Eiffel, Ada i Lisp. El codi del projecte es distribueix sota les llicències BSD ("2-clause BSDL") i "Ruby", que fa referència a la darrera versió de la llicència GPL i és totalment compatible amb GPLv3.

Principals millores:

  • S'ha afegit un nou compilador JIT experimental en procés, YJIT, creat pels desenvolupadors de la plataforma de comerç electrònic Shopify com a part d'una iniciativa per millorar el rendiment dels programes Ruby que utilitzen el marc Rails i criden molts mètodes. La diferència clau amb el compilador MJIT JIT utilitzat anteriorment, que es basa en processar mètodes sencers i utilitza un compilador extern en llenguatge C, és que YJIT utilitza Lazy Basic Block Versioning (LBBV) i conté un compilador JIT integrat. Amb LBBV, JIT compila primer només l'inici del mètode, i compila la resta un temps després, després de determinar els tipus de variables i arguments utilitzats durant l'execució. Quan s'utilitza YJIT, es va registrar un augment del 22% en el rendiment quan s'executava la prova del banc de rails i un augment del 39% en la prova de rendibilitat líquida. Actualment, YJIT està limitat al suport per a sistemes operatius semblants a Unix en sistemes amb arquitectura x86-64 i està desactivat per defecte (per activar-lo, especifiqueu la marca "--yjit" a la línia d'ordres).
  • Rendiment millorat de l'antic compilador MJIT JIT. Per als projectes que utilitzen Rails, la mida màxima per defecte de la memòria cau (--jit-max-cache) s'ha augmentat de 100 a 10000 instruccions. Va deixar d'utilitzar JIT per a mètodes amb més de 1000 instruccions. Per donar suport a Zeitwerk of Rails, el codi JIT ja no es descarta quan TracePoint està habilitat per als esdeveniments de classe.
  • Inclou un depurador debug.gem completament reescrit, que admet la depuració remota, no alenteix l'aplicació depurada, admet la integració amb interfícies de depuració avançades (VSCode i Chrome), es pot utilitzar per depurar aplicacions multiprocés i multiprocés, proporciona una interfície d'execució de codi REPL, ofereix capacitats de traça avançades, pot gravar i reproduir fragments de codi. El depurador lib/debug.rb ofert anteriorment s'ha eliminat de la distribució base.
    Llançament del llenguatge de programació Ruby 3.1
  • S'ha implementat el ressaltat visual d'errors als informes de traça de devolució de trucades. La senyalització d'errors es proporciona mitjançant el paquet de gemmes integrat i activat per defecte error_highlight. Per desactivar la senyalització d'errors, podeu utilitzar la configuració "--disable-error_highlight". $ ruby ​​​​test.rb test.rb:1:in " ": mètode indefinit "time" per a 1:Integer (NoMethodError) 1.time {} ^^^^^ Volíeu dir? vegades
  • L'intèrpret de càlculs interactius IRB (REPL, Read-Eval-Print-Loop) implementa la finalització automàtica del codi introduït (a mesura que escriviu, es mostra una pista amb opcions per continuar l'entrada, entre les quals us podeu moure amb la pestanya o Shift+). tecla Tab). Després de seleccionar l'opció de continuació, es mostra un quadre de diàleg a prop que mostra la documentació associada a l'element seleccionat. La drecera de teclat Alt+d es pot utilitzar per accedir a la documentació completa.
    Llançament del llenguatge de programació Ruby 3.1
  • La sintaxi del llenguatge ara permet ometre valors en literals hash i arguments de paraula clau en cridar funcions. Per exemple, en lloc de l'expressió "{x: x, y: y}" ara podeu especificar "{x:, y:}", i en lloc de "foo(x: x, y: y)" - foo( x:, y:)".
  • Suport estabilitzat per a coincidències de patrons d'una sola línia (ary => [x, y, z]), que ja no es marquen com a experimentals.
  • L'operador "^" de les coincidències de patrons ara pot contenir expressions arbitràries, per exemple: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • En les coincidències de patrons d'una sola línia, podeu ometre els parèntesis: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • El llenguatge d'anotació de tipus RBS, que us permet determinar l'estructura del programa i els tipus utilitzats, ha afegit suport per especificar el límit superior dels paràmetres de tipus mitjançant el símbol "<", ha afegit suport per a àlies de tipus genèrics, ha implementat suport per a col·leccions per gestionar gemmes, va millorar el rendiment i va implementar moltes signatures noves per a biblioteques integrades i estàndard.
  • S'ha afegit suport experimental per a entorns de desenvolupament integrats a l'analitzador de tipus estàtic TypePro, que genera anotacions RBS basades en l'anàlisi de codi sense informació de tipus explícita (per exemple, s'ha preparat un complement per integrar TypePro amb l'editor VSCode).
  • S'ha canviat l'ordre de processament de diverses tasques. Per exemple, anteriorment els components de l'expressió “foo[0], bar[0] = baz, qux” es processaven en l'ordre baz, qux, foo, bar, però ara foo, bar, baz, qux.
  • S'ha afegit suport experimental per a l'assignació de memòria per a cadenes mitjançant el mecanisme VWA (Variable Width Allocation).
  • Versions actualitzades dels mòduls gem integrats i els inclosos a la biblioteca estàndard. Els paquets net-ftp, net-imap, net-pop, net-smtp, matrix, prime i debug estan integrats.

Font: opennet.ru

Afegeix comentari