- El estándar Wasm 3.0 fue anunciado oficialmente e incluye funciones de gran escala preparadas durante 6 a 8 años
- Con espacio de direcciones de 64 bits, recolección de basura, referencias tipadas, tail calls y manejo de excepciones, ahora es más fácil compilar lenguajes de alto nivel a Wasm
- Las principales novedades ayudan a crear aplicaciones de alto rendimiento, runtimes para múltiples lenguajes, mayor seguridad y escalabilidad
- También es adecuado para casos fuera del entorno web, donde se necesita manejar mayores volúmenes y conjuntos de datos más grandes
- Ya cuenta con soporte en los principales navegadores web y pronto estará completo también en motores independientes como Wasmtime, consolidando aún más a Wasm como una plataforma de ejecución de propósito general
Resumen del lanzamiento de Wasm 3.0
- La versión 3.0 del estándar WebAssembly se lanzó el 17 de septiembre de 2025
- Es la primera gran actualización en 3 años desde la versión 2.0 (finalizada en 2022), que introdujo instrucciones vectoriales, operaciones masivas de memoria, múltiples valores de retorno y tipos de referencia simples
- Mientras el Community Group y el Working Group del W3C siguieron desarrollándolo, esta versión incorpora grandes funciones preparadas durante 6 a 8 años, por lo que representa un cambio de gran magnitud
- Wasm mantiene su filosofía como lenguaje de bajo nivel, pero refuerza su sistema de memoria y de tipos para dar mejor soporte a la compilación de lenguajes de alto nivel
- Las funciones desarrolladas después de la versión 2.0 ya quedaron cerradas y pasan a formar parte del estándar Live, mientras se amplía su soporte en navegadores web y motores independientes
Cambios principales y nuevas funciones
- Espacio de direcciones de 64 bits
- Se pueden declarar memorias y tablas con el tipo i64
- El espacio de direcciones de las aplicaciones Wasm puede expandirse desde unos 4 GB hasta el límite físico (teóricamente 16 exabytes)
- En la web se aplica un límite de 16 GB, pero en el ecosistema no web resulta útil para soportar aplicaciones y conjuntos de datos a gran escala
- Múltiples memorias
- Es posible declarar y acceder directamente a múltiples objetos de memoria dentro de un mismo módulo
- Puede aprovecharse para fusión de módulos, separación del espacio de direcciones, buffering, seguridad y otros usos
- Herramientas de enlace estático como wasm-merge pasan a poder usarse con todos los módulos Wasm
- Recolección de basura (GC)
- Además de la memoria lineal, se admite almacenamiento administrado automáticamente por el runtime de Wasm
- Los compiladores declaran directamente layouts de datos como tipos struct/array y enteros unboxed
- Solo se proporcionan los bloques fundamentales para administración de memoria, mientras que sistemas de objetos de alto nivel o closures pueden diseñarse de forma independiente según el lenguaje de implementación
- Referencias tipadas
- El sistema de tipos de Wasm se amplía para describir con mayor precisión la forma de los valores en heap y las referencias a funciones
- Soporta subtyping y recursión de tipos, y con la nueva instrucción
call_ref permite llamadas indirectas seguras a funciones sin verificación de tipos en runtime
- Tail calls
- Se admite la estructura de tail call, que retorna directamente sin usar espacio adicional en la pila de la función existente
- Puede aprovecharse en lenguajes funcionales o en optimizaciones internas de runtimes
- Manejo de excepciones
- Introduce un sistema nativo de manejo de excepciones dentro de Wasm
- Permite declarar etiquetas y payloads de excepción, captura opcional y manejadores de excepciones a nivel de bloque
- Mejora la portabilidad y el rendimiento sin recurrir a métodos ineficientes que antes se desviaban hacia JS
- Instrucciones vectoriales relaxed
- Para responder a diferencias de hardware en instrucciones SIMD, se ofrecen variantes relaxed que dejan ciertos detalles de comportamiento a libertad de la implementación
- Esto permite diversas optimizaciones dentro del conjunto de comportamientos válidos
- Perfil determinista
- Incluso en situaciones donde el resultado de una misma instrucción puede no ser determinista (como operaciones de punto flotante o relaxed SIMD), se define una ejecución determinista entre plataformas
- Esto permite garantizar reproducibilidad y portabilidad en blockchain, sistemas reproducibles y casos similares
- Sintaxis de anotaciones personalizadas
- Se agrega una sintaxis de anotaciones legible y escribible por humanos dentro del código fuente
- Aunque el estándar no la interpreta directamente, podrá aprovecharse en futuras implementaciones del estándar y sus extensiones
Integración con JavaScript y compatibilidad
- JS string builtins
- Los valores de cadena de JS pueden pasarse y manipularse en Wasm como externref
- Importando nuevas funciones integradas, Wasm puede usar directamente cadenas externas de JS en su interior
Utilidad y perspectivas de Wasm 3.0
- Proporciona una base esencial para la compilación hacia Wasm de lenguajes de programación avanzados
- Lenguajes principales como Java, OCaml, Scala, Kotlin, Scheme, y Dart también han comenzado a aprovechar activamente las funciones de GC
Estado de creación de la especificación y despliegue
- Wasm 3.0 es el primer estándar creado con la nueva cadena de herramientas SpecTec
- La mayoría de los principales navegadores web ya soportan Wasm 3.0, y motores independientes como Wasmtime también estarán completos pronto
- El estado de soporte por motor puede consultarse en la página de Wasm feature status
Aún no hay comentarios.