WebAssembly: significado, ventajas, casos de uso y más

¿Atrapado en la exageración de WebAssembly, pero no está exactamente seguro de qué es? Aquí está el detalle.

WebAssembly o Wasm es un formato de código binario para crear programas que pueden ejecutarse en cualquier arquitectura de computadora.

El sistema consta de una máquina virtual y un compilador que traduce el código informático de los lenguajes de programación, como C o C++, a los formatos .wat y binario .wasm legibles por humanos.

El objetivo original de WebAssembly era permitir a los programadores desarrollar aplicaciones de alto rendimiento para páginas web al permitir velocidades de ejecución casi nativas dentro de un navegador. Pero la tecnología ahora parece estar evolucionando más allá de los navegadores y hacia la nube.

Esta guía le muestra todo lo que necesita saber sobre esta tecnología en evolución, sus fortalezas y debilidades, así como su potencial futuro.

¿Qué es WebAssembly?

WebAssembly es un formato de código binario que se ejecuta en una máquina virtual y en el que se pueden compilar diferentes lenguajes. Está diseñado para ser portátil y puede ejecutarse en un navegador web o como una aplicación de servidor.

Lanzado por primera vez en 2017, WebAssembly es una recomendación del W3C desde 2019 y es mantenido por numerosos colaboradores, incluidos Mozilla, Google, Microsoft, Red Hat y muchos más.

El objetivo original era desarrollar velocidades de ejecución casi nativas como las que encontraría con las aplicaciones C/C++ dentro del navegador. También pretende ser un estándar web seguro, de estándar abierto, depurable y sin versiones que sea compatible con versiones anteriores y compatible con JavaScript.

¿Cómo funciona WebAssembly?

WebAssembly está diseñado como un motor de tiempo de ejecución, como Java o JavaScript, que se puede incrustar en un navegador o entorno de servidor para ejecutar código de computadora compilado en los formatos de texto .wat o binario .wasm.

Para escribir código para la ejecución de WebAssembly, el desarrollador escribe el programa en cualquiera de los numerosos lenguajes admitidos. Luego compílelo usando un compilador WebAssembly ya sea AOT (Ahead of Time) o JIT (justo a tiempo).

Este código puede realizar la mayor parte del trabajo en el entorno de ejecución, pero no puede acceder ni modificar los objetos DOM de un navegador. Cualquier interacción de este tipo debe pasar a través de JavaScript.

Cómo crear una aplicación WebAssembly de muestra

Es posible crear una aplicación Wasm simple para el navegador web con solo unos pocos pasos, como puede ver a continuación:

  1. Descarga e instala el SDK de Emscripten.
  2. Escribe tu muestra holamundo.c código o hacerlo en C++/Rust si lo prefiere.
  3. Ejecutar emcc holamundo.c -s WASM=1 -s holamundo.html en una terminal para compilar el código en WebAssembly con Emscripten. Creará los archivos binarios, HTML y JavaScript de Wasm que necesita (código de pegamento).
  4. Sirve la página helloworld.html a través de tu navegador web.

Las ventajas de WebAssembly

Hay muchas razones para adoptar WebAssembly y sus tecnologías relacionadas, que incluyen:

  • Rendimiento casi nativo – WebAssembly tiene un diseño de nivel tan bajo que ofrece un rendimiento similar al de lenguajes de bajo nivel como C y C++.
  • Seguridad – El sistema está diseñado para ser seguro aislándolo en un entorno virtual con acceso limitado al sistema.
  • Estándar abierto – Muchas organizaciones e individuos están contribuyendo a WebAssembly y es una recomendación oficial del W3C.
  • Ligeros – WebAssembly compila en código binario para ser ejecutado en una máquina virtual. Este código es portátil y no necesita archivos del sistema ni viene con ellos.
  • Soporte multilenguaje – Se pueden compilar más de 50 idiomas en WebAssembly.
  • Plataforma independiente – La máquina virtual WebAssembly está diseñada para que cada arquitectura presente el mismo entorno de tiempo de ejecución. Todo lo que tiene que hacer un desarrollador es escribir código para WebAssembly.

Las limitaciones de WebAssembly

  • Trabajo en progreso – El estándar aún está en desarrollo y, por lo tanto, aún quedan muchas características y mejoras por venir.
  • Sin recolección de basura – WebAssembly todavía carece de recolección de basura, aunque pronto podría implementarse.
  • Sin acceso DOM – No puede acceder al DOM de un navegador web directamente desde WebAssembly, deberá pasar por JavaScript.

WebAssembly vs Java

Java es una de las primeras implementaciones de WebAssembly. Fue diseñado como un lenguaje de escritura única y ejecución en cualquier lugar, pero desarrolló muchos problemas en el camino.

Al igual que con Java, WebAssembly usa un RE (Entorno de tiempo de ejecución) para ejecutar su código, pero a diferencia de Java, puede escribir WebAssembly en el idioma de su elección.

WebAssembly vs JavaScript

WebAssembly se ejecuta en el navegador u otro entorno host, al igual que JavaScript. Sin embargo, donde JavaScript se entrega al entorno de ejecución en formato de texto y se compila justo a tiempo, WebAssembly tiene formatos de texto y binarios.

Dentro de los navegadores web, JavaScript tiene acceso al DOM, mientras que WebAssembly no. Sin embargo, cuando se trata de la velocidad de ejecución, WebAssembly supera a JavaScript, con sus velocidades de ejecución de código casi nativas.

La velocidad es donde brilla WebAssembly y la razón por la que es ideal para tantos usos. Puede cargar WebAssembly en un navegador usando JavaScript y los dos códigos pueden ejecutarse juntos y compartir recursos.

WebAssembly, Docker, Kubernetes

Docker y Kubernetes son dos de las tecnologías populares que impulsan la nube informática. Docker es una tecnología de contenedor que permite a los desarrolladores empaquetar una aplicación con todas sus dependencias del sistema en un solo paquete. Esto facilita la implementación de la aplicación en cualquier entorno de nube en un segundo o menos.

Kubernetes, por otro lado, es un De código abierto sistema para administrar e implementar aplicaciones en contenedores como Docker, CRI-O, Containerd y cualquier implementación de Kubernetes CRI (Container Runtime Interface). Kubernetes también facilita la escalación de implementaciones en la nube en múltiples servidores o máquinas virtuales.

Desde este punto de vista, WebAssembly es más similar a Docker y puede ejecutarse como una aplicación en la nube en contenedores utilizando Kubernetes. También ofrece muchas ventajas sobre Docker, pero probablemente no lo reemplace.

Más allá del navegador

Al principio, había servidores web. Tenías que dedicar una máquina completa como servidor. Luego, hubo máquinas virtuales, o VM, que permitieron que un servidor se ejecutara en solo uno o más subprocesos de CPU. Aún así, tenía que tener una máquina virtual dedicada.

La computación en la nube hizo posible lanzar y ejecutar servidores solo cuando era necesario al contener las aplicaciones. Esto condujo a una reducción de costos, ya que solo tenía que pagar por lo que usa, no más máquinas dedicadas. Pero todavía hay algunos problemas.

En primer lugar, los archivos de Docker pueden tener un tamaño de varios Gigabytes, y esto significa un pequeño retraso en inicio y otras cuestiones de gestión. Sin embargo, un archivo Wasm similar puede tener sólo unos pocos MB de tamaño porque es un binario precompilado. Esto le da un tiempo de inicio mucho más rápido que Docker, perfecto para ciertas aplicaciones en las que el tiempo es crítico.

En segundo lugar, el diseño de WebAssembly significa que el desarrollador no tiene que administrar ni asignar recursos del sistema, simplemente puede llegar al punto utilizando el lenguaje de programación que elija.

Estas funciones hacen que WebAssembly sea ideal para ejecutar microservicios en la nube, aunque las aplicaciones Docker siguen siendo preferibles para aplicaciones que requieren más control sobre el entorno operativo y el sistema de archivos.

Para más información, proyectos como WasmCloud y WasmBorde están desarrollando WebAssembly en una plataforma informática viable.

Casos de uso de Wasm

Hay muchos casos de uso para WebAssembly, dada su peculiar naturaleza. Se pueden dividir en tres grandes grupos; Configuraciones en el navegador, fuera del navegador e híbridas.

El tipo en el navegador se explica por sí mismo y fuera del navegador se refiere principalmente a implementaciones de servidor, IoT y nube, mientras que el híbrido se refiere a una combinación de los dos.

El siguiente es un vistazo a los casos de uso en los que Wasm puede sobresalir:

  • Código de alto rendimiento ya existente – Código antiguo pero maravilloso que puede transferir a WebAssembly.
  • Nuevo código de alto rendimiento – Los que tienes que diseñar e implementar desde cero.
  • Portar aplicaciones de escritorio a la web – Esto podría abrir una nueva generación de soluciones de escritorio basadas en la web, como edición de video basada en la web.
  • La computación en la nube – Correr junto a Docker y Kubernetes en busca de nuevas oportunidades.

El siguiente es un vistazo a aplicaciones y escenarios específicos en los que Wasm puede sobresalir:

  • Edición de vídeo e imagen
  • Diseño de juego
  • AI aplicaciones
  • Aplicaciones de realidad virtual y aumentada
  • Aplicaciones de musica
  • Aplicaciones P2P
  • Aplicaciones del lado del servidor
  • Cómputos en la nube/clúster
  • Diseño asistido por ordenador
  • Simulación de plataforma de sistema operativo
  • Cifrado
  • servidor web local
  • Aplicaciones de escritorio remoto
  • visualizaciones científicas
  • Aplicaciones nativas híbridas en teléfonos inteligentes
  • En dispositivos IoT

Lista de lenguajes y marcos admitidos

Más de 50 idiomas se compilan en WebAssembly y estos son algunos de los más populares:

  • C
  • C + +
  • R
  • Rubí
  • rápido
  • Go
  • Kotlin
  • Herrumbre
  • PHP
  • Blazor – Un marco para desarrolladores de .NET.
  • JwebAsamblea – Compilador para código de bytes de Java y lenguajes relacionados como JRuby, Jython, Groovy, Scala y Kotlin.
  • Tejo – Un marco Rust para crear aplicaciones web de subprocesos múltiples utilizando WebAssembly.
  • Script de ensamblaje – Un lenguaje diseñado específicamente para crear código WebAssembly.
  • Granos – Un lenguaje funcional fuertemente tipado.
  • Motoko

Puedes encontrar más idiomas aquí.

Lista de tiempos de ejecución y herramientas de WebAssembly

  • Todos los principales navegadores son compatibles con Wasm
  • pioduro – Tiempo de ejecución de Python en el navegador con la pila científica de Python, incluidos Pandas, NumPy, SciPy.
  • cálido
  • wagui – Para microservicios y aplicaciones web
  • Wasi – Interfaz de sistema modular
  • WasmTime – Tiempo de ejecución WebAssembly rápido y seguro.
  • aguacero
  • lucet
  • wasmNube – Entorno en la nube
  • Krustlet – Kubernetes kublete para ejecutar Wasm, escrito en Rust.
  • WasmBorde – Entorno de tiempo de ejecución en la nube y perimetral

Conclusión

Hemos llegado al final de nuestro recorrido por WebAssembly y lo que tiene para la informática. Y como puede ver, promete mucho.

Todavía es un trabajo en progreso, aunque en constante desarrollo. Y si te interesa, puedes encontrar más información aquí, aquíy aquí.

Nnamdi Okeke

Nnamdi Okeke

Nnamdi Okeke es un entusiasta de la informática al que le encanta leer una gran variedad de libros. Tiene preferencia por Linux sobre Windows/Mac y ha estado usando
Ubuntu desde sus inicios. Puedes atraparlo en twitter a través de bongotrax

Artículos: 290

Recibe cosas tecnológicas

Tendencias tecnológicas, tendencias de inicio, reseñas, ingresos en línea, herramientas web y marketing una o dos veces al mes