Publicado Ruby 3.3.0-preview2

Nos complace anunciar la publicación de Ruby 3.3.0-preview2. 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 mayores en desempeño respecto a 3.2
    • Mejorado el soporte para argumentos splat y para el resto de argumentos.
    • Los registros se localizan para operaciones en pila de la máquina virtual.
    • Se compilan más llamados con argumentos opcionales.
    • Los manejadores de excepciones también se compilan.
    • Las variables de instancia ya no salen al interprete con Formas de Objetos mega-mórficas.
    • Se optimizaron de manera especial Integer#!=, String#!=, Kernel#block_given?, Kernel#is_a?, Kernel#instance_of? y Module#===.
    • Ahora es 3 veces más rápido que el interprete normal con optcarrot!
  • Los metadatos para el código compilado usan mucha menos memoria.
  • Generación de código más compacto 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 haya completado el arranque.
  • La estadística ratio_in_yjit producida por --yjit-stats ahora está disponible en compilaciones publicadas, ya no se requiere una estadística especial o una compilación de desarrollo.
  • La opción para salir del modo con trazas ahora soporta muestreo
    • --trace-exits-sample-rate=N
  • Pruebas más extensas y 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

IRB

IRB ha recibido diversas mejoras, incluyendo –no limitadas a estas:

  • Integración avanzada irb:rdbg que provee una experiencia de depuración equivalente a la de pry-byebug (doc).
  • Soporte de paginador en ordenes como ls y show_cmds.
  • Las ordenes ls y show_cmds dan información más precisa y útil.

Además, IRB ha experimentado una re-factorización extensa y ha recibido docenas de correcciones a fallas que facilitan ampliaciones futuras.

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

RubyGems y Bundler avisan cuando el usuario requiere gemas que están programadas para convertirse en gemas incluidas en versiones futuras de Ruby.

Las siguientes gemas predeterminadas se han actualizado.

  • RubyGems 3.5.0.dev
  • bigdecimal 3.1.4
  • bundler 2.5.0.dev
  • csv 3.2.8
  • erb 4.0.3
  • fiddle 1.1.2
  • fileutils 1.7.1
  • irb 1.7.4
  • nkf 0.1.3
  • optparse 0.4.0.pre.1
  • psych 5.1.0
  • reline 0.3.8
  • stringio 3.0.9
  • strscan 3.0.7
  • syntax_suggest 1.1.0
  • time 0.2.2
  • timeout 0.4.0
  • uri 0.12.2
  • yarp 0.9.0

Las siguientes gemas incluidas han sido actualizadas.

  • minitest 5.19.0
  • test-unit 3.6.1
  • rexml 3.2.6
  • rss 0.3.0
  • net-imap 0.3.7
  • rbs 3.2.1
  • typeprof 0.21.8
  • debug 1.8.0

La siguiente gema predeterminada pasa a ser gema incluida.

  • racc 1.7.1

Ver la publicación en GitHub como Logger o bien la bitácora de cambios con detalles de las gemas predeterminadas y las gemas incluidas.

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

¡Con estos cambios, 4970 archivos cambiados, 239635 inserciones(+), 165275 eliminaciones(-) desde Ruby 3.2.0!

Descargas

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

    SIZE: 21074209
    SHA1: cf7329019235dc36b8e3f382a8b8b744922b1163
    SHA256: 30ce8b0fe11b37b5ac088f5a5765744b935eac45bb89a9e381731533144f5991
    SHA512: 1c5a13e519e8487fd40d932b96d14fa729521925c288e7841ab5eada628e506ceca2605bae36eea1aa505d9253383d53cd933b7a4bff96e6de5b1130c7c558e6
    
  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview2.tar.xz

    SIZE: 15600992
    SHA1: 606d6423137a24eef4f6b07d167596b63c7aaa17
    SHA256: 62b1c4f586c70bf1cb58f2d909d0d824506315782e835f9dd3fcc0b659a70fc1
    SHA512: 5ff609a66b7359006df0d87477cf70e6e26c5f40ced81b8254f8154f4fc82c77fed297471b55706c1a4466f2a4257999e933b2ed085f695ace265757ab9500a2
    
  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview2.zip

    SIZE: 26095651
    SHA1: 4441cd0db23d133e6e2f7dea28f931a68dac6ca5
    SHA256: c9771d24c9b1eab532c04ed076087285601693e4d1c63f131fd078c47c5c0cea
    SHA512: bfeed21d011f891fe22510fe7242992c98f7fd2ce863d8be5740f56a34b726134cb3f5304e8b2dcd468fbc939648f10aae482eee15c1bf6c64b705484ed9e197
    

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.