Lanzamiento del lenguaje de programación Ruby 3.1

Se lanzó Ruby 3.1.0, un lenguaje de programación dinámico orientado a objetos que es altamente eficiente en el desarrollo de programas e incorpora las mejores características de Perl, Java, Python, Smalltalk, Eiffel, Ada y Lisp. El código del proyecto se distribuye bajo las licencias BSD (“BSDL de 2 cláusulas”) y “Ruby”, que hace referencia a la última versión de la licencia GPL y es totalmente compatible con GPLv3.

Principales mejoras:

  • Se agregó un nuevo compilador JIT experimental en proceso, YJIT, creado por los desarrolladores de la plataforma de comercio electrónico Shopify como parte de una iniciativa para mejorar el rendimiento de los programas Ruby que utilizan el marco Rails y llaman a muchos métodos. La diferencia clave con el compilador MJIT JIT utilizado anteriormente, que se basa en el procesamiento de métodos completos y utiliza un compilador externo en lenguaje C, es que YJIT utiliza Lazy Basic Block Versioning (LBBV) y contiene un compilador JIT integrado. Con LBBV, JIT primero compila solo el comienzo del método y compila el resto algún tiempo después, después de que se determinan los tipos de variables y argumentos utilizados durante la ejecución. Al utilizar YJIT, se registró un aumento del 22 % en el rendimiento al ejecutar la prueba de banco de rieles y un aumento del 39 % en la prueba de renderizado líquido. Actualmente, YJIT está limitado a admitir sistemas operativos tipo Unix en sistemas con arquitectura x86-64 y está deshabilitado de forma predeterminada (para activarlo, debe especificar el indicador “--yjit” en la línea de comando).
  • Rendimiento mejorado del antiguo compilador MJIT JIT. Para proyectos que utilizan Rails, el tamaño máximo de caché predeterminado (--jit-max-cache) se ha aumentado de 100 a 10000 1000 instrucciones. Dejé de usar JIT para métodos con más de XNUMX instrucciones. Para admitir Zeitwerk of Rails, el código JIT ya no se descarta cuando TracePoint está habilitado para eventos de clase.
  • Incluye un depurador debug.gem completamente reescrito, que admite la depuración remota, no ralentiza la aplicación depurada, admite la integración con interfaces de depuración avanzadas (VSCode y Chrome), se puede utilizar para depurar aplicaciones multiproceso y multiproceso, proporciona una interfaz de ejecución de código REPL, ofrece capacidades de seguimiento avanzadas, puede grabar y reproducir fragmentos de código. El depurador lib/debug.rb ofrecido anteriormente se eliminó de la distribución base.
    Lanzamiento del lenguaje de programación Ruby 3.1
  • Se implementó el resaltado visual de errores en los informes de seguimiento de llamadas. La señalización de errores se proporciona mediante el paquete de gemas integrado y habilitado de forma predeterminada error_highlight. Para deshabilitar el marcado de errores, puede utilizar la configuración “--disable-error_highlight”. $ rubí prueba.rb prueba.rb:1:en " ": método indefinido "tiempo" para 1:Integer (NoMethodError) 1.time {} ^^^^^ ¿Quiso decir? veces
  • El shell de cálculos interactivos IRB (REPL, Read-Eval-Print-Loop) implementa la finalización automática del código ingresado (a medida que escribe, se muestra una sugerencia con opciones para continuar ingresando, entre las cuales puede moverse con Tab o Shift+ Tecla de tabulación). Después de seleccionar la opción de continuación, se muestra un cuadro de diálogo cercano que muestra la documentación asociada al elemento seleccionado. El método abreviado de teclado Alt+d se puede utilizar para acceder a la documentación completa.
    Lanzamiento del lenguaje de programación Ruby 3.1
  • La sintaxis del lenguaje ahora permite omitir valores en literales hash y argumentos de palabras clave al llamar a funciones. Por ejemplo, en lugar de la expresión "{x: x, y: y}", ahora puede especificar "{x:, y:}", y en lugar de "foo(x: x, y: y)" - foo( x:, y: )".
  • Soporte estabilizado para coincidencias de patrones de una sola línea (ary => [x, y, z]), que ya no están marcados como experimentales.
  • El operador "^" en coincidencias de patrones ahora puede contener expresiones arbitrarias, por ejemplo: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • En coincidencias de patrones de una sola línea, puede omitir los paréntesis: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • El lenguaje de anotación de tipos RBS, que le permite determinar la estructura del programa y los tipos utilizados, ha agregado soporte para especificar el límite superior de los parámetros de tipo usando el símbolo "<", agregó soporte para alias de tipos genéricos, implementó soporte para colecciones para administrar gemas, mejoró el rendimiento e implementó muchas firmas nuevas para bibliotecas integradas y estándar.
  • Se agregó soporte experimental para entornos de desarrollo integrados al analizador de tipos estáticos TypePro, que genera anotaciones RBS basadas en análisis de código sin información de tipos explícita (por ejemplo, se ha preparado un complemento para integrar TypePro con el editor VSCode).
  • Se ha cambiado el orden de procesamiento de múltiples asignaciones. Por ejemplo, anteriormente los componentes de la expresión “foo[0], bar[0] = baz, qux” se procesaban en el orden baz, qux, foo, bar, pero ahora foo, bar, baz, qux.
  • Se agregó soporte experimental para la asignación de memoria para cadenas utilizando el mecanismo VWA (Asignación de ancho variable).
  • Versiones actualizadas de los módulos de gemas integrados y los incluidos en la biblioteca estándar. Los paquetes net-ftp, net-imap, net-pop, net-smtp, Matrix, Prime y Debug están integrados.

Fuente: opennet.ru

Añadir un comentario