wasm3, un intérprete de WebAssembly libera su primera versión
Hace poco, se dio a conocer la primera versión de wasm3, el cual es un intérprete muy rápido del código intermedio de WebAssembly, pues está diseñado principalmente para ejecutar aplicaciones de WebAssembly en microcontroladores y plataformas para las cuales no hay implementación JIT para WebAssembly, no hay suficiente memoria para que JIT funcione o la creación de páginas de memoria ejecutables necesarias para Implementación JIT.
Para quienes desconocen de WebAssembly, deben saber que este es un lenguaje de bajo nivel, diseñado inicialmente como un formato de destino en la compilación desde C y C++, aunque también soporta código fuente de otros lenguajes, como Rust y Go. Este formato de código binario portable es utilizado para la ejecución íntegra de scripts desde el navegador del lado del cliente.
Sobre wasm3
Wasm3 pasa las pruebas de compatibilidad con la especificación WebAssembly 1.0 y se puede usar para ejecutar muchas aplicaciones WASI, proporcionando un rendimiento solo 4-5 veces menor que los motores JIT y 11.5 veces menor que la ejecución del código nativo.
En comparación con otros intérpretes de WebAssembly (wac, life, wasm-micro-runtime), wasm3 fue 15.8 veces más rápido.
Wasm3 comenzó como un proyecto de investigación y sigue siéndolo por muchos medios. La evaluación del motor en diferentes entornos es parte de la investigación. Dado que tenemos Lua, JS, Python, Lisp, (…) ejecutándose en MCU, WebAssembly es en realidad una alternativa prometedora. Proporciona un entorno completamente aislado, bien definido y predecible. Entre los casos de uso prácticos, podemos enumerar la informática de vanguardia, las secuencias de comandos, la ejecución de reglas de IoT, los contratos de blockchain, etc.
Wasm3 requiere 64Kb de memoria para el código y 10Kb de RAM, lo que le permite utilizar el proyecto para ejecutar aplicaciones compiladas en WebAssembly en microcontroladores como Arduino MKR *, Arduino Due, Particle Photon, ESP8266, ESP32, Air602 (W600), nRF52, nRF51 Blue Píldora (STM32F103C8T6), MXChip AZ3166 (EMW3166), Maix (K210), HiFive1 (E310), Fomu (ICE40UP5K) y ATmega1284, así como en placas y computadoras basadas en arquitecturas x86, x64, ARM, MIPS, RISC-V y Xtens.
El alto rendimiento se logra mediante el uso de la técnica Massey Meta Machine (M3) en el intérprete, en el cual, para reducir la sobrecarga de decodificar el bytecode, el bytecode se traduce de manera proactiva en operaciones más eficientes que generan código de pseudo-máquina y el modelo de ejecución de la máquina virtual apilada se convierte en un registro más eficiente enfoque las operaciones en M3 son funciones C, cuyos argumentos son los registros de la máquina virtual, que pueden reflejarse en los registros de la CPU.
Los flujos de trabajo frecuentes para la optimización se convierten en operaciones de resumen.
Además, los resultados del estudio se pueden observar a WebAssembly en la Web, después de analizar 948 mil de los sitios más populares calificados por Alexa, los investigadores encontraron que WebAssembly se usa en 1639 sitios (0.17%), es decir en 1 de cada 600 sitios.
En total, los sitios web revelaron la carga de 1950 módulos de WebAssembly, de los cuales 150 son únicos.
Al considerar el alcance de WebAssembly, se extrajeron conclusiones decepcionantes: en más del 50% de los casos, WebAssembly se utilizó con fines maliciosos, por ejemplo, para extraer criptomonedas (55,7%) y para ocultar el código de scripts maliciosos (0,2%).
De los sistemas operativos con soporte para Wasm3, podremos encontrar a Linux incluidos los enrutadores basados en OpenWRT, Windows, macOS, Android e iOS. También fue posible compilar wasm3 en el código intermedio de WebAssembly para ejecutar el intérprete en un navegador o para autohospedaje.
De los usos legítimos de WebAssembly, se observó la ejecución de la biblioteca (38.8%), la creación de juegos (3.5%) y la ejecución de código nativo escrito que no está en JavaScript (0.9%). En el 14,9% de los casos, WebAssembly se utilizó para analizar el entorno para la identificación del usuario (huellas digitales).
Probar wasm3
Para quienes estén interesados en poder utilizar este interprete en su sistema, pueden consultar la documentación así como el código del proyecto que está escrito en C y distribuido bajo la licencia MIT, en el siguiente enlace.