Skip to content

Commit f52b82e

Browse files
authored
Translate Ruby 3.3.0 rc1 released news post (es) (#3158)
1 parent f3e82a0 commit f52b82e

File tree

1 file changed

+384
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)