- En la reciente 108.ª reunión de TC39, 9 propuestas que marcarán el futuro de JavaScript avanzaron en sus respectivas etapas de estandarización
- En Stage 4 (aprobación final) se incluyen funciones como
using, Array.fromAsync y Error.isError, orientadas a mejorar la productividad y la seguridad del desarrollo
- En Stage 3~1 se están discutiendo varias propuestas útiles, como ArrayBuffer inmutable, random con semilla, clamp, mejoras para NumberFormat y funciones Random
- Deno participa activamente en la adopción y experimentación con los estándares más recientes, y algunas funciones ya pueden usarse en Deno y en navegadores modernos
- Se espera que las discusiones de estandarización continúen en el futuro, y que el ecosistema de JavaScript evolucione hacia algo más seguro y conciso
Últimas tendencias de estandarización en TC39 y principales nuevas funciones de JavaScript
Stage 4: funciones que se adoptarán oficialmente
Gestión explícita de recursos (using)
- La declaración
using garantiza la limpieza automática al finalizar la vida útil de objetos de recursos, como archivos o sockets de red
- Inspirado en estructuras de C# y Python, el objeto implementa los métodos
[Symbol.dispose]() o [Symbol.asyncDispose]() para que se invoquen al salir del bloque
- La limpieza se realiza automáticamente incluso si ocurre una excepción, lo que reduce el riesgo de fugas de recursos como file handles
- Ya cuenta con soporte en Chrome 134, Firefox 134, Deno v2.3 y otros; en Deno puede usarse de inmediato en trabajo real con archivos, sockets y más
Array.fromAsync
- Método estándar que convierte iterables asíncronos en arreglos y devuelve una Promise
- Recolecta valores secuencialmente desde un async generator y al final entrega el arreglo resultante mediante una Promise
- Su uso es similar al de
Array.from síncrono y admite función de mapping y thisArg
- Tiene soporte en todos los navegadores principales, Node v22 y Deno v1.38 o superior
Error.isError
- Función integrada que permite determinar fácilmente si un valor es un objeto Error real
- Funciona de forma confiable incluso en casos complejos, como cross-realm y errores con subclases
- Mejora la confiabilidad al desarrollar polyfills y librerías
Stage 3: ArrayBuffer inmutable
Immutable ArrayBuffer
- Está previsto agregar los métodos
transferToImmutable() y sliceToImmutable() para admitir la inmutabilidad de ArrayBuffer
- Un buffer inmutable, una vez creado, no puede modificarse ni separarse, lo que ayuda a compartirlo de forma segura entre threads y workers y mejora el rendimiento
- En entornos como Deno, puede aprovecharse eficientemente al procesar datos binarios sin copias innecesarias
Stage 2: nuevas funciones propuestas
Random.Seeded
- Con un PRNG basado en semilla (
Random.Seeded(seed)), es posible generar la misma secuencia de números aleatorios entre ejecuciones repetidas
- Es útil en áreas donde la reproducibilidad es importante, como juegos y simulaciones
- A diferencia de
Math.random(), ofrece funciones avanzadas como especificar la semilla y clonar el estado
Number.prototype.clamp
- Método para limitar rangos numéricos que ajusta automáticamente un valor al intervalo mínimo-máximo indicado
- Sustituye de forma más breve y clara el patrón
Math.min(Math.max(x, min), max)
Stage 1: propuestas en discusión inicial
Keep Trailing Zeros
- Nueva opción de
Intl.NumberFormat para controlar con precisión si se mantienen o eliminan los 0 después del punto decimal
- Refuerza la expresividad deseada en interfaces para montos, decimales fijos y casos similares
Comparisons
- Busca estandarizar una representación legible para humanos de los valores y la salida de diff, de forma similar a
util.inspect de Node.js
- Aporta consistencia en frameworks de pruebas, salidas de consola y más
Random Functions
- Introducción de un nuevo namespace
Random, con funciones relacionadas con aleatoriedad como generación de números, sampling y shuffle de forma segura y concisa
- Ayuda a prevenir errores off-by-one y admite de manera intuitiva varios patrones de recolección y muestreo
El futuro de Deno y del ecosistema JavaScript
- Deno participa activamente en las discusiones de estandarización y refleja rápidamente las funciones más recientes en el trabajo práctico
- Ejemplo: propagación de async context, OpenTelemetry integrado y nuevos patrones de gestión de recursos
- Está previsto que las discusiones de estandarización continúen en reuniones adicionales de TC39 después de septiembre
- Los desarrolladores de JavaScript podrán experimentar en adelante un entorno de lenguaje más potente, seguro y conveniente
3 comentarios
propuesta de operaciones
awaitEsto, ¿cuándo...
¿Cuándo lo agregarán? El pattern matching ya me da curiosidad.
Hay
signalsen stage 1, pero parece que todavía falta bastante para su lanzamiento oficial.