Publicado por naruse el 2023-09-14
Traducción de vtamara
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
- 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 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?
yModule#===
. - 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
yRubyVM::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 depry-byebug
(doc). - Soporte de paginador en ordenes como
ls
yshow_cmds
. - Las ordenes
ls
yshow_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 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
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.