Publicado Ruby 3.3.0-preview1

Nos complace anunciar la publicación de Ruby 3.3.0-preview1. Ruby 3.3 añade un nuevo compilador JIT en puro Ruby llamado RJIT, usa Lrama como generador del analizador sintáctico así como muchas mejoras de desempeño especialmente de YJIT.

RJIT

  • Se introdujo RJIT un compilador JIT en puro Ruby que remplaza a MJIT.
    • RJIT soporta sólo la arquitectura x86_64 en plataformas Unix.
    • A diferencia de MJIT, no require de un compilador C en tiempo de ejecución.
  • RJIT existe sólo con propósitos experimentales.
    • Debería seguir usando YJIT en producción.
  • Si le interesa desarrollar un compilador JIT para Ruby, por favor revise la presentación de k0kubun en el día 3 de RubyKaigi.

Usa Lrama en lugar de Bison

YJIT

  • Mejoras en desempeño significativas respecto a 3.2
    • Mejorado el soporte para argumentos splat y para el resto de argumentos.
    • Los registros se localizan para una operación en pila de la máquina virtual.
    • Se compila más llamados con argumentos opcionales.
    • Se optimizaron especialmente Integer#!=, String#!=, Kernel#block_given?, Kernel#is_a?, Kernel#instance_of? y Module#===.
    • Las variables de instancia ya no salen al interprete con Formas de Objetos mega-mórficas.
  • Los metadatos para el código compilado usa mucha menos memoria.
  • Generación de código mejorada en ARM64
  • Opción para iniciar YJIT en modo pausado para después habilitarlo manualmente
    • --yjit-pause y RubyVM::YJIT.resume
    • Esto puede usarse para habilitar YJIT sólo después de que su aplicación hay completado el arranque.
  • La opción para salir del modo con trazas ahora soporta muestreo
    • --trace-exits-sample-rate=N
  • Correcciones a múltiples fallas

Otros Características Nuevas Notables

Lenguaje

Mejoras en desempeño

  • defined?(@ivar) se optimiza con Formas de Objetos.

Otros cambios notables desde 3.2

Incidentes de compatibilidad

Nota: Correciones a falla que excluía características.

Constantes elminadas

Las siguientes constantes que eran despreciadas han sido eliminadas.

Métodos eliminados

Los siguientes métodos que eran despreciados han sido eliminados.

Problemas de compatibilidad con Stdlib

Eliminación de ext/readline

  • Tenemos reline que es una implementación en Ruby puro compatible con el API de ext/readline. Dependeremos de reline a futuro. Si necesita usar ext/readline, puede instalar ext/readline vía rubygems.org con gem install readline-ext.
  • Ya no necesitamos instalar librerías como libreadline o libedit.

Actualizaciones al API en C

APIs en C actualizados

Los siguientes APIs han sido actualizados.

APIs en C eliminados

Los siguientes APIs despreciados han sido eliminados.

Actualizaciones a la librería estándar

Las siguientes gemas predeterminadas se han actualizado.

  • RubyGems 3.5.0.dev
  • bigdecimal 3.1.4
  • bundler 2.5.0.dev
  • csv 3.2.7
  • fiddle 1.1.2
  • fileutils 1.7.1
  • irb 1.6.4
  • optparse 0.4.0.pre.1
  • psych 5.1.0
  • reline 0.3.3
  • stringio 3.0.7
  • strscan 3.0.7
  • syntax_suggest 1.0.4
  • time 0.2.2
  • timeout 0.3.2
  • uri 0.12.1

Las siguientes gemas incluídas han sido actualizadas.

  • minitest 5.18.0
  • rbs 3.1.0
  • typeprof 0.21.7
  • debug 1.8.0

Ve la publicación en GitHub com Logger o ben la bitácora de cambios con detalles de las gemas predeterminadas y las gemas incluidas.

Ver detalles en el archivo NEWS o en la bitácora de cambios.

¡Con estos cambios, 1922 archivos cambiados, 75283 inserciones(+), 44896 eliminaciones(-) desde Ruby 3.2.0!

Descargas

  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.tar.gz

    SIZE: 20428213
    SHA1: 5445eec1cd9ddb44e03e74568cac94209c91b42d
    SHA256: c3454a911779b8d747ab0ea87041030d002d533edacb2485fe558b7084da25ed
    SHA512: 0f891f140ddc6372aa7c4459f8784126e0c341db7b80e72c51e441c5153c43c2d7b965f7807c076862ac84b9b8b0c6a66bbf66fc341746016151397bb21c782a
    
  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.tar.xz

    SIZE: 15074600
    SHA1: 4c22ebca287c87811e1050bf4d59b7d32255b212
    SHA256: ae300b49e06c13087dd163b97eddd38db895dc8e0c9904284119795d75303fbb
    SHA512: 46c1134dba5810847f7f6b4298900a91f5225679d7873548b271f4ef2ad1dc168722562a2e468a2ccf136314176ee613d8c7792fd4411a3f7a44c80b93b417ee
    
  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.zip

    SIZE: 24846962
    SHA1: 31774fa653c54107b6afc30adda3a0350d8f41d2
    SHA256: 6ecafecf83f2cacf446b2326012f2b6ee1a0614d8dd29bb1fb3f105c27e2c553
    SHA512: 794bef847fefbbdbbdced85975a00c9289ef6464810408af3f0f2055052d6b5ef5576dbd41e0d87bb73f1ad276d8e27c36018610f8e2b9936828c0e692f611f0
    

Qué es Ruby

Ruby primero fue desarrollado por Matz (Yukihiro Matsumoto) en 1993, y ahora es desarrollado como Código Abierto. Corre en múltiples plataformas y es usado en todo el mundo especialmente para desarrollo web.