Publicado por naruse el 2023-05-12
Traducción de vtamara
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
- Remplaza Bison con el generador de analizadores sintácticos LALR Lrama Característica #19637
- Si tiene interés por favor vea la visión futura de los analizadores sintácticos de Ruby
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?
yModule#===
. - 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
yRubyVM::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 deext/readline
. Dependeremos dereline
a futuro. Si necesita usarext/readline
, puede instalarext/readline
vía rubygems.org congem install readline-ext
. - Ya no necesitamos instalar librerías como
libreadline
olibedit
.
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.