Skip to content

Commit ed8cd9d

Browse files
authored
Translate Ruby 3.3.0 released news post (es) (#3170)
1 parent d4ce923 commit ed8cd9d

File tree

1 file changed

+398
-0
lines changed

1 file changed

+398
-0
lines changed
Lines changed: 398 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,398 @@
1+
---
2+
layout: news_post
3+
title: "Publicado Ruby 3.3.0"
4+
author: "naruse"
5+
translator: vtamara
6+
date: 2023-12-25 00:00:00 +0000
7+
lang: es
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "3.3.0" | first %}
11+
12+
Nos complace anunciar la publicación de Ruby {{ release.version }}. Ruby 3.3
13+
añade un nuevo analizador sintáctico llamado Prism, usa Lrama como
14+
generador de analizadores, añade un nuevo compilador JIT en puro Ruby
15+
llamado RJIT, e incluye muchas mejoras de desempeño especialmente de YJIT.
16+
17+
## Prism
18+
19+
* Se introduce [el analizador sintáctico Prism](https://github.com/ruby/prism)
20+
como gema predeterminada.
21+
* Prism es un analizador recursivo-descendente para el lenguaje Ruby
22+
portable, tolerante a errores y mantenible
23+
* Prism está listo para operar en producción es mantenido activamente
24+
y puede emplearlo en lugar de Ripper
25+
* Hay [amplia documentación](https://ruby.github.io/prism/) sobre como
26+
usar Prism
27+
* Prism es tanto una librería en C que es usada internamente por CRuby
28+
como una gema que puede ser usada por cualquier herramienta que
29+
necesite analizar código Ruby.
30+
* Unos métodos notables de la API de Prism son:
31+
* `Prism.parse(fuente)` que retorna el árbol de sintaxis
32+
abstracta (AST) como parte de un objeto con el resultado del
33+
reconocimiento
34+
* `Prism.parse_success?(fuente)` que retorna verdadeor si no
35+
hay errores
36+
* `Prism.parse_comments(fuente)` que retorna los comentarios
37+
* Puede hacer solicitudes de cambio o crear incidentes directamente en el
38+
[repositorio de Prism](https://github.com/ruby/prism) si desea
39+
contribuir.
40+
* Ahora puede usar `ruby --parser=prism` o `RUBYOPT="--parser=prism"`
41+
para experimentar con el compilador Prism. Por favor note que
42+
esta opción es sólo para depurar.
43+
44+
## Uso de Lrama en lugar de Bison
45+
46+
* Se remplazó Bison por [el generador de analizadores LALR Lrama](https://github.com/ruby/lrama)
47+
[[Característica #19637]](https://bugs.ruby-lang.org/issues/19637)
48+
* Si tiene interés, por favor vea
49+
[The future vision of Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html)
50+
* El analizadores interno de Lrama se ha remplazado con un
51+
analizador LR generado por Racc para hacerlo más mantenible.
52+
* Se soportan reglas de parametrización `(?, *, +)`, que serán
53+
usadas en la fuente parse.y de Ruby.
54+
55+
## YJIT
56+
57+
* Mejoras mayores en desempeño respecto a Ruby 3.2
58+
* Mejorado el soporte para argumentos splat y para el resto de argumentos.
59+
* Los registros se localizan para operaciones en la pila de la máquina
60+
virtual.
61+
* Se compilan más llamadas con argumentos opcionales. Los manejadores de
62+
excepciones también se compilan.
63+
* Las llamadas a tipos y los sitios de llamadas mega-mórficas ya no
64+
salen al interprete.
65+
* Métodos básicos como Rails `#blank?` y
66+
[`#present?` especializado](https://github.com/rails/rails/pull/49909)
67+
se manejan inline.
68+
* `Integer#!=`, `String#!=`,
69+
`Kernel#block_given?`, `Kernel#is_a?`, `Kernel#instance_of?` y
70+
`Module#===` fueron optimizados de manera especial.
71+
* La velocidad de compilación es un poco superior a la de Ruby 3.2.
72+
* ¡Ahora es 3 veces más rápido que el interprete normal con Optcarrot!
73+
* Mejora significativa en el uso de memoria respecto a 3.2
74+
* Los meta-datos para el código compilado usan mucha menos memoria.
75+
* `--yjit-call-threshold` se eleva automáticamente de 30 a 120
76+
cuando la aplicación tiene más de 40,000 ISEQs.
77+
* `--yjit-cold-threshold` se agrega para saltarse la compilación
78+
de ISEQs en frio.
79+
* Generación de código más compacto en ARM64
80+
* La velocidad de compilación es ahora un poco más rápida que en 3.2.
81+
* El recolector de basura en el código (code GC) ahora está deshabilitado
82+
de manera predeterminada
83+
* `--yjit-exec-mem-size` es tratado como un límite fuerte
84+
en el que se detendrá la compilación de nuevo código.
85+
* No hay disminuciones inesperadas en el desempeño debidas al
86+
recolector de código basura.
87+
* Aún puede habilitar el recolector de basura en el código si lo
88+
desea con `--yjit-code-gc`
89+
* Añade `RubyVM::YJIT.enable` que puede habilitar YJIT en tiempo de ejecución
90+
* Puede iniciar YJIT sin modificar argumentos en la línea de ordenes
91+
o variables de ambiente.
92+
Rails 7.2 [habilitará YJIT de manera predeterminada](https://github.com/rails/rails/pull/49947)
93+
* Esto también puede usarse para habilitar YJIT sólo después de que la
94+
aplicación haya completado el arranque. `--yjit-disable` puede usarse
95+
si quiere usar otras opciones YJIT mientras deshabilita YJIT durante
96+
el arranque.
97+
* Hay más estadísticas de YJIT disponibles de manera predeterminada
98+
* `yjit_alloc_size` y muchas más estadísticas relacionadas con
99+
metadatos ahora están disponibles de manera predeterminada.
100+
* La estadística `ratio_in_yjit` producida por `--yjit-stats` ahora está
101+
disponible en las compilaciones publicadas, ya no se requiere una
102+
estadística especial o una compilación de desarrollo para acceder
103+
a la mayoría de estadísticas.
104+
* Se agregan más posibilidades para analizar rendimiento
105+
* Se añade `--yjit-perf` para facilitar el análisis de rendimiento
106+
con la herramienta perf de Linux
107+
* `--yjit-trace-exits` ahora soporta muestreo con
108+
`--yjit-trace-exits-sample-rate=N`
109+
* Pruebas más extensas y correcciones a múltiples fallas
110+
111+
## RJIT
112+
113+
* Se introdujo RJIT un compilador JIT en puro Ruby que remplaza a MJIT.
114+
* RJIT soporta sólo la arquitectura x86-64 en plataformas Unix.
115+
* A diferencia de MJIT, no require de un compilador C en tiempo de ejecución.
116+
* RJIT existe sólo con propósitos experimentales.
117+
* Debería seguir usando YJIT en producción.
118+
* Si le interesa desarrollar un compilador JIT para Ruby, por favor
119+
revise la [presentación de k0kubun en el día 3 de RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3).
120+
121+
122+
### Planificador de hilos M:N
123+
124+
* Se introdujo un planificador de hilos M:N. [[Característica #19842]](https://bugs.ruby-lang.org/issues/19842)
125+
* M hilos de Ruby son manejados por N hilos nativos (hilos del
126+
sistema operativo) reduciendo así el costo de creación y
127+
administración.
128+
* Como puede romper la compatibilidad con extensiones en C, el
129+
planificador de hilos M:N está deshabilitado de manera predeterminada
130+
en el Ractor principal.
131+
* La variable de ambiente `RUBY_MN_THREADS=1` habilita los hilos
132+
M:N en el Ractor principal.
133+
* Los hilos M:N se habilitan siempre en Ractors que no son el principal.
134+
* La variable de ambiente `RUBY_MAX_CPU=n` establece el máximo número
135+
de `N` (número máximo de hilos nativos). El valor predeterminado es 8.
136+
* Como sólo un hilo de Ruby por Ractor puede correr al mismo tiempo,
137+
el número de hilos nativos se usará, sera el menor entre
138+
el especificado en `RUBY_MAX_CPU` y el número de Ractors
139+
que estén corriendo. Así que las aplicaciones con un sólo Ractor
140+
(la mayoría de aplicaciones) sólo usarán un hilo nativo.
141+
* Para soportar operaciones de bloqueo, pueden usarse más de
142+
`N` hilos nativos.
143+
144+
145+
## Mejoras en desempeño
146+
147+
* `defined?(@ivar)` se optimiza con Formas de Objetos.
148+
* La resolución de nombres como con `Socket.getaddrinfo` ahora puede
149+
interrumpirse (en ambientes donde estén disponibles pthreads).
150+
[[Característica #19965]](https://bugs.ruby-lang.org/issues/19965)
151+
* Con este propósito, se crea un pthread por cada llamada a
152+
getaddrinfo o getnameinfo. Esto incurre en algo de gasto en la
153+
resolución de nombres (alrededor de 2.5x en nuestros experimentos).
154+
No esperamos que el gasto adicional en la resolución de nombres
155+
sea un problema para la mayoría de aplicaciones, pero si lo nota,
156+
o si ve efectos inesperados que crea que pueden deberse a este
157+
cambio, por favor reportelos.
158+
* Diversas mejoras de desempeño al Recolector de Basura
159+
* Los objetos jóvenes referenciados por objetos viejos ya no se promueve
160+
de inmediato a la generación vieja. Esto reduce significativamente la
161+
frecuencia de recolección del Recolector de Basura (GC).
162+
[[Característica #19678]](https://bugs.ruby-lang.org/issues/19678)
163+
* Se introdujo la nueva variable de ajuste
164+
`REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO`
165+
para controlar el número de objetos no protegidos que activan una
166+
recolección del. De manera predeterminada se establece en `0.01` (1%).
167+
Esto reduce significativamente la frecuencia de las recolecciones
168+
mayores del GC. [[Característica #19571]](https://bugs.ruby-lang.org/issues/19571)
169+
* Se implementaron Barreras de Escritura para muchos tipos básicos a los que
170+
les hacia falta, son notables `Time`, `Enumerator`, `MatchData`,
171+
`Method`, `File::Stat`, `BigDecimal` y muchos otros. Esto reduce
172+
significativamente el tiempo de las recolecciones menores del GC
173+
y la frecuencia de las recolecciones mayores.
174+
* La mayoría de clases ahora usan Localización de Ancho Variable,
175+
son notables `Hash`, `Time`, `Thread::Backtrace`,
176+
`Thread::Backtrace::Location`, `File::Stat`, `Method`.
177+
Esto hace más veloces estas clases para reservar y liberar, que
178+
usen menos memoria y reduce la fragmentación en el montón (*heap*).
179+
* Se ha agregado soporte para referencias débiles en el recolector
180+
de basura. [[Característica #19783]](https://bugs.ruby-lang.org/issues/19783)
181+
182+
183+
## Otros cambios notables desde 3.2
184+
185+
### IRB
186+
187+
IRB ha recibido diversas mejoras, incluyendo --no limitadas a estas:
188+
189+
* Integración avanzada `irb:rdbg` que provee una experiencia
190+
de depuración equivalente a la de `pry-byebug`
191+
([doc](https://github.com/ruby/irb#debugging-with-irb)).
192+
* Soporte de paginador para las ordenes `ls`, `show_source` y `show_cmds`.
193+
* Las ordenes `ls` y `show_cmds` dan información más precisa y útil.
194+
* Autocompletación experimental usando análisis de tipos
195+
([doc](https://github.com/ruby/irb#type-based-completion)).
196+
* Ahora es posible cambiar el color del tipo de letra así como su estilo
197+
en el diálogo de completación gracias a la recien introducida
198+
clase Reline::Face ([doc](https://github.com/ruby/ruby/blob/master/doc/reline/face.md))
199+
200+
Además, IRB ha experimentado una re-factorización extensa y ha recibido
201+
docenas de correcciones a fallas que facilitan ampliaciones futuras.
202+
203+
Para actualizaciones más detalladas, por favor vea
204+
[Unveiling the big leap in Ruby 3.3's IRB](https://railsatscale.com/2023-12-19-irb-for-ruby-3-3/).
205+
206+
## Incidentes de compatibilidad
207+
208+
Nota: Excluyendo correcciones a errores en características
209+
210+
* Se desprecian llamadas a `it` sin argumentos en bloques sin parámetros
211+
ordinarios. `it` será una referencia al primer parámetro de bloque en
212+
Ruby 3.4.
213+
[[Característica #18980]](https://bugs.ruby-lang.org/issues/18980)
214+
215+
### Variables de ambientes eliminadas
216+
217+
* La variable de ambiente `RUBY_GC_HEAP_INIT_SLOTS` es despreciada
218+
y representa la operación de no hacer nada. En su remplazo por favor use las
219+
variables de ambiente `RUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS`.
220+
[[Característica #19785]](https://bugs.ruby-lang.org/issues/19785)
221+
222+
## Problemas de compatibilidad con Stdlib
223+
224+
### Eliminación de `ext/readline`
225+
226+
* Tenemos `reline` que es una implementación en Ruby puro compatible con
227+
el API de `ext/readline`. Dependeremos de `reline` a futuro. Si
228+
necesita usar `ext/readline`, puede instalar `ext/readline` vía rubygems.org
229+
con `gem install readline-ext`.
230+
* Ya no necesitamos instalar librerías como `libreadline` o `libedit`.
231+
232+
## Actualizaciones al API en C
233+
234+
### APIs en C actualizados
235+
236+
Los siguientes APIs han sido actualizados.
237+
238+
239+
240+
### APIs en C eliminados
241+
242+
Los siguientes APIs despreciados han sido eliminados.
243+
244+
## Actualizaciones a la librería estándar
245+
246+
RubyGems y Bundler avisan cuando el usuario hace `require` de las
247+
gemas siguientes sin añadirlas al Gemfile o al gemspec.
248+
Esto porque se convertirán en gemas incluidas en versiones futuras
249+
de Ruby.
250+
251+
Librerías que son objetivo:
252+
* abbrev
253+
* base64
254+
* bigdecimal
255+
* csv
256+
* drb
257+
* getoptlong
258+
* mutex_m
259+
* nkf
260+
* observer
261+
* racc
262+
* resolv-replace
263+
* rinda
264+
* syslog
265+
266+
Se ha añadido la siguiente gema.
267+
268+
* prism 0.19.0
269+
270+
Las siguientes gemas predeterminadas se han actualizado.
271+
272+
* RubyGems 3.5.3
273+
* abbrev 0.1.2
274+
* base64 0.2.0
275+
* benchmark 0.3.0
276+
* bigdecimal 3.1.5
277+
* bundler 2.5.3
278+
* cgi 0.4.1
279+
* csv 3.2.8
280+
* date 3.3.4
281+
* delegate 0.3.1
282+
* drb 2.2.0
283+
* english 0.8.0
284+
* erb 4.0.3
285+
* error_highlight 0.6.0
286+
* etc 1.4.3
287+
* fcntl 1.1.0
288+
* fiddle 1.1.2
289+
* fileutils 1.7.2
290+
* find 0.2.0
291+
* getoptlong 0.2.1
292+
* io-console 0.7.1
293+
* io-nonblock 0.3.0
294+
* io-wait 0.3.1
295+
* ipaddr 1.2.6
296+
* irb 1.11.0
297+
* json 2.7.1
298+
* logger 1.6.0
299+
* mutex_m 0.2.0
300+
* net-http 0.4.0
301+
* net-protocol 0.2.2
302+
* nkf 0.1.3
303+
* observer 0.1.2
304+
* open-uri 0.4.1
305+
* open3 0.2.1
306+
* openssl 3.2.0
307+
* optparse 0.4.0
308+
* ostruct 0.6.0
309+
* pathname 0.3.0
310+
* pp 0.5.0
311+
* prettyprint 0.2.0
312+
* pstore 0.1.3
313+
* psych 5.1.2
314+
* rdoc 6.6.2
315+
* readline 0.0.4
316+
* reline 0.4.1
317+
* resolv 0.3.0
318+
* rinda 0.2.0
319+
* securerandom 0.3.1
320+
* set 1.1.0
321+
* shellwords 0.2.0
322+
* singleton 0.2.0
323+
* stringio 3.1.0
324+
* strscan 3.0.7
325+
* syntax_suggest 2.0.0
326+
* syslog 0.1.2
327+
* tempfile 0.2.1
328+
* time 0.3.0
329+
* timeout 0.4.1
330+
* tmpdir 0.2.0
331+
* tsort 0.2.0
332+
* un 0.3.0
333+
* uri 0.13.0
334+
* weakref 0.1.3
335+
* win32ole 1.8.10
336+
* yaml 0.3.0
337+
* zlib 3.1.0
338+
339+
La siguiente gema incluida ha sido promovida a gema predeterminada.
340+
341+
* racc 1.7.3
342+
343+
Las siguientes gemas incluidas han sido actualizadas.
344+
345+
* minitest 5.20.0
346+
* rake 13.1.0
347+
* test-unit 3.6.1
348+
* rexml 3.2.6
349+
* rss 0.3.0
350+
* net-ftp 0.3.3
351+
* net-imap 0.4.9
352+
* net-smtp 0.4.0
353+
* rbs 3.4.0
354+
* typeprof 0.21.9
355+
* debug 1.9.1
356+
357+
Ver la publicación en GitHub como
358+
[Logger](https://github.com/ruby/logger/releases) o
359+
bien la bitácora de cambios con detalles de las gemas predeterminadas
360+
y las gemas incluidas.
361+
362+
Ver más detalles en el archivo
363+
[NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md)
364+
o en [la bitácora de cambios](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}).
365+
366+
¡Con estos cambios, [{{ release.stats.files_changed }} archivos cambiados, {{ release.stats.insertions }} inserciones(+), {{ release.stats.deletions }} eliminaciones(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket)
367+
desde Ruby 3.2.0!
368+
369+
¡Feliz Navidad, Felices Fiestas, y disfrute programando con Ruby 3.3!
370+
371+
## Descargas
372+
373+
* <{{ release.url.gz }}>
374+
375+
SIZE: {{ release.size.gz }}
376+
SHA1: {{ release.sha1.gz }}
377+
SHA256: {{ release.sha256.gz }}
378+
SHA512: {{ release.sha512.gz }}
379+
380+
* <{{ release.url.xz }}>
381+
382+
SIZE: {{ release.size.xz }}
383+
SHA1: {{ release.sha1.xz }}
384+
SHA256: {{ release.sha256.xz }}
385+
SHA512: {{ release.sha512.xz }}
386+
387+
* <{{ release.url.zip }}>
388+
389+
SIZE: {{ release.size.zip }}
390+
SHA1: {{ release.sha1.zip }}
391+
SHA256: {{ release.sha256.zip }}
392+
SHA512: {{ release.sha512.zip }}
393+
394+
## Qué es Ruby
395+
396+
Ruby primero fue desarrollado por Matz (Yukihiro Matsumoto) en 1993,
397+
y ahora es desarrollado como Código Abieto. Corre en múltiples
398+
plataformas y es usado en todo el mundo especialmente para desarrollo web.

0 commit comments

Comments
 (0)