Lanzamento da linguaxe de programación Ruby 3.1

Lanzouse Ruby 3.1.0, unha linguaxe de programación dinámica orientada a obxectos que é altamente eficiente no desenvolvemento de programas e que incorpora as mellores características de Perl, Java, Python, Smalltalk, Eiffel, Ada e Lisp. O código do proxecto distribúese baixo as licenzas BSD ("BSDL de dúas cláusulas") e "Ruby", que fai referencia á última versión da licenza GPL e é totalmente compatible con GPLv2.

Melloras principais:

  • Engadiuse un novo compilador experimental de JIT en proceso, YJIT, creado polos desenvolvedores da plataforma de comercio electrónico Shopify como parte dunha iniciativa para mellorar o rendemento dos programas Ruby que usan o marco Rails e chaman a moitos métodos. A diferenza fundamental co compilador MJIT JIT usado anteriormente, que se basea en procesar métodos completos e usa un compilador externo en linguaxe C, é que YJIT usa Lazy Basic Block Versioning (LBBV) e contén un compilador JIT integrado. Con LBBV, JIT compila primeiro só o principio do método, e compila o resto algún tempo despois, despois de que os tipos de variables e argumentos utilizados sexan determinados durante a execución. Ao usar YJIT, rexistrouse un aumento do 22 % no rendemento ao realizar a proba de railsbench e un aumento do 39 % na proba de renderizado líquido. Actualmente, YJIT está limitado ao soporte para sistemas operativos tipo Unix en sistemas con arquitectura x86-64 e está desactivado por defecto (para activalo, especifique a marca "--yjit" na liña de comandos).
  • Mellorouse o rendemento do antigo compilador MJIT JIT. Para proxectos que usan Rails, o tamaño máximo predeterminado da caché (--jit-max-cache) aumentou de 100 a 10000 instrucións. Deixou de usar JIT para métodos con máis de 1000 instrucións. Para soportar Zeitwerk of Rails, o código JIT xa non se descarta cando TracePoint está habilitado para eventos de clase.
  • Inclúe un depurador debug.gem completamente reescrito, que admite a depuración remota, non ralentiza a aplicación depurada, admite a integración con interfaces de depuración avanzadas (VSCode e Chrome), pódese usar para depurar aplicacións multiproceso e multiproceso, ofrece unha interface de execución de código REPL, ofrece capacidades de rastrexo avanzadas, pode gravar e reproducir fragmentos de código. O depurador lib/debug.rb ofrecido anteriormente foi eliminado da distribución base.
    Lanzamento da linguaxe de programación Ruby 3.1
  • Implementouse o resaltado visual de erros nos informes de rastrexo de devolución de chamadas. A sinalización de erros proporciónase mediante o paquete de xemas integrado e activado por defecto error_highlight. Para desactivar a sinalización de erros, podes usar a configuración "--disable-error_highlight". $ ruby ​​​​test.rb test.rb:1:in " ": método indefinido "time" para 1:Integer (NoMethodError) 1.time {} ^^^^^ Querías dicir? veces
  • O shell de cálculos interactivos IRB (REPL, Read-Eval-Print-Loop) implementa a completación automática do código introducido (a medida que escribes, móstrase unha suxestión con opcións para continuar a entrada, entre as que podes moverte co tabulador ou Shift+). tecla Tab). Despois de seleccionar a opción de continuación, móstrase un cadro de diálogo preto que mostra a documentación asociada ao elemento seleccionado. O atallo de teclado Alt+d pódese usar para acceder á documentación completa.
    Lanzamento da linguaxe de programación Ruby 3.1
  • A sintaxe da linguaxe agora permite omitir os valores en literales hash e argumentos de palabras clave ao chamar funcións. Por exemplo, en lugar da expresión "{x: x, y: y}" agora pode especificar "{x:, y:}", e no canto de "foo(x: x, y: y)" - foo( x:, y:)".
  • Soporte estabilizado para coincidencias de patróns dunha soa liña (ary => [x, y, z]), que xa non están marcadas como experimentais.
  • O operador "^" nas coincidencias de patróns agora pode conter expresións arbitrarias, por exemplo: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Nas coincidencias de patróns dunha soa liña, pode omitir os parénteses: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • A linguaxe de anotación de tipo RBS, que permite determinar a estrutura do programa e os tipos utilizados, engadiu soporte para especificar o límite superior dos parámetros de tipo mediante o símbolo "<", engadiu soporte para alias de tipos xenéricos, implementou soporte para coleccións para xestionar xoias, mellorou o rendemento e implementou moitas sinaturas novas para bibliotecas integradas e estándar.
  • Engadiuse soporte experimental para contornos de desenvolvemento integrados ao analizador de tipos estáticos TypePro, que xera anotacións RBS baseadas na análise de código sen información de tipo explícita (por exemplo, preparouse un complemento para integrar TypePro co editor VSCode).
  • Cambiouse a orde de procesamento de varias tarefas. Por exemplo, anteriormente os compoñentes da expresión "foo[0], bar[0] = baz, qux" procesábanse na orde baz, qux, foo, bar, pero agora foo, bar, baz, qux.
  • Engadiuse soporte experimental para a asignación de memoria para cadeas mediante o mecanismo VWA (Variable Width Allocation).
  • Versións actualizadas dos módulos gem incorporados e os incluídos na biblioteca estándar. Os paquetes net-ftp, net-imap, net-pop, net-smtp, matrix, prime e depuración están integrados.

Fonte: opennet.ru

Engadir un comentario