W3C convirtió a WebAssembly en un estándar recomendado
El mes pasado compartimos aquí en el blog sobre la noticia de que Mozilla, Fastly, Intel y Red Hat se habían unido para desarrollar las tecnologías que hacen de WebAssembly (si quieres conocer más al respecto sobre la noticia, puedes consultarla en este enlace) y ahora pocas semanas después de esa noticia el Consorcio W3C ha anunciado que la tecnología WebAssembly se ha convertido en el estándar recomendado.
Para quienes desconocen de WebAssembly deben saber que este proporciona un middleware universal de bajo nivel independiente del navegador para ejecutar aplicaciones compiladas desde varios lenguajes de programación. WebAssembly se posiciona como una tecnología más prometedora y portátil entre navegadores para crear aplicaciones web de alto rendimiento.
WebAssembly se puede utilizar para resolver tareas que requieren un alto rendimiento, por ejemplo, codificación de video, procesamiento de sonido, gráficos y manipulación 3D, desarrollo de juegos, operaciones criptográficas, cálculos matemáticos y la creación de implementaciones portátiles de lenguajes de programación.
WebAssembly se parece mucho a Asm.js, pero difiere en que es un formato binario que no está vinculado a JavaScript. WebAssembly no requiere el uso de un recolector de basura, ya que se utiliza la gestión explícita de memoria.
Una característica distintiva del modelo de ejecución de aplicaciones que utilizan WASI es el lanzamiento en un entorno de espacio aislado para aislar del sistema principal y el uso de un mecanismo de seguridad basado en la gestión de capacidades, para acciones con cada uno de los recursos (archivos, directorios, sockets, llamadas al sistema, etc.)
Al habilitar JIT para WebAssembly, puede alcanzar niveles de rendimiento cercanos al código nativo. Entre las tareas principales de WebAssembly está la provisión de portabilidad, previsibilidad del comportamiento e identidad de la ejecución del código en diferentes plataformas.
Recientemente, WebAssembly también está avanzando como una plataforma universal para ejecutar código de manera segura en cualquier infraestructura, sistema operativo y dispositivo, no limitado a los navegadores.
W3C ha estandarizado tres especificaciones relacionadas con WebAssembly:
- WebAssembly Core: se define como una máquina virtual de bajo nivel que imita de cerca la funcionalidad de muchos microprocesadores en los que se ejecuta. Ya sea a través de la compilación o interpretación Just-In-Time, el motor de WebAssembly puede funcionar a casi la velocidad del código compilado para una plataforma nativa.
Un recurso .wasm es análogo a un archivo .class de Java en el sentido de que contiene datos estáticos y segmentos de código que operan sobre esos datos estáticos. A diferencia de Java, WebAssembly generalmente se produce como un objetivo de compilación de otros lenguajes de programación como C / C ++ y Rust. - WebAssembly Web API: define una interfaz de programación basada en el mecanismo Promise para solicitar y ejecutar recursos “.wasm”. El formato de recursos de WebAssembly está optimizado para iniciar la ejecución sin esperar a que el archivo se cargue por completo, lo que mejora la capacidad de respuesta de las aplicaciones web.
- Interfaz JavaScript de WebAssembly: proporciona una API para integrarse con JavaScript. Le permite obtener valores y pasar parámetros a las funciones de WebAssembly. La ejecución de WebAssembly corresponde al modelo de seguridad de JavaScript y toda interacción con el sistema principal se lleva a cabo de manera similar a la ejecución del código JavaScript.
En el futuro, está previsto preparar especificaciones para funciones de WebAssembly como:
- Multithreading con memoria compartida y acceso a memoria atómica.
- Operaciones vectoriales basadas en SIMD, que permiten paralelizar la ejecución de ciclos.
- Tipos de referencia para referencias directas a objetos del código de WebAssembly.
- Capacidad para llamar a funciones sin gastar espacio adicional en la pila.
- Integración con módulos ECMAScript: la capacidad de cargar código de WebAssembly desde JavaScript como módulos que cumplen con la especificación ECMAScript 6.
- El modo de trabajo con el recolector de basura.
- Interfaces de depuración.
- WASI (WebAssembly System Interface): API para la interacción directa con el sistema operativo (API POSIX para trabajar con archivos, sockets, etc.).
Si quieres conocer más al respecto puedes consultar la nota original en el siguiente enlace.