Google, Microsoft, Mozilla y los ingenieros del proyecto WebKit han anunciado un nuevo formato binario para compilar aplicaciones para la web. Hay razones para ello. Si nos vamos a la historia de la web, Javascript es prácticamente su primer lenguaje de programación. Con los años se ha encontrado que trabajar con este lenguaje lleva a ciertas limitaciones y por ende, se han construido compiladores que pasen el código de lenguajes poderosos a Javascript directamente. Algunos de estos proyectos buscan añadir nuevas características a los lenguajes, como por ejemplo Typescript, de Microsoft, o bien, buscan acelerar Javascript, como el proyecto asm.js de Mozilla. Ahora, sin embargo, muchos de estos proyectos están empezando a tomar una forma común llamada WebAssembly.
El nuevo formato permite a los programadores compilar sus respectivos códigos para el navegador (enfocándose por el momento en C/C++, aunque se espera que se incorporen más lenguajes), los cuales se ejecutan dentro del motor de Javascript. En lugar de tener que analizar todo el código, el cual puede ser algo lento, sobre todo en las plataformas móviles, WebAssembly puede decodificarlo significativamente más rápido. Así, la idea de WebAssembly dará a los desarrolladores una compilación a una sola plataforma para toda la web y eventualmente se espera que se convierta en un estándar de forma tal que se implemente en todos los navegadores.
Por definición, los archivos Javascript son archivos de texto que se descargan del servidor y entonces se analizan y se compilan por el motor de Javascript en el navegador. El equipo de WebAssembly decidió definir un formato binario porque el código puede así comprimirse más incluso que en Javascript y porque es mucho más rápido para dicho motor decodificar el formato binario (hasta 23 veces más rápido en el prototipo actual), que hacer el análisis lexicográfico de código asm.js, por ejemplo.
Asm.js, de Mozilla ha buscado dar velocidades casi de código nativo en la web. El proyecto de Google de Cliente Nativo para poder correr código nativo en el navegador busca lo mismo, pero no ha tenido mucha aceptación. Parece ser que con WebAssembly se puede tener lo mejor de los proyectos mencionados para el navegador hoy por hoy.
Como primer paso, el equipo de WebAssembly busca ofrecer al menos la misma funcionalidad de asm.js (lo que hará posible que los programadores puedan usar la misma herramienta Emscripten para WebAssembly, que es la que usan para el código asm.js). En esta primera etapa, el equipo planea lanzar una biblioteca llamada polyfill, que traduciría WebAssembly a Javascript por lo que en principio podría correrse en cualquier navegador. Con el tiempo, el equipo construiría más herramientas: compiladores, depuradores, etcétera, y añadiría soporte a muchos otros lenguajes, Rust, Go, y C#, por ejemplo. El inventor de Javascript (y Mozilla CEO por corto tiempo), Brendan Eich apunto que una vez que los principales navegadores soporten el formato nativo, Javascript y WebAssembly podrán de nuevo tomar sus propios caminos.
Cabe decir que el equipo de WebAssembly dice que no quiere reemplazar Javascript, sino permitir que muchos otros lenguajes puedan ser compilados para la web. De hecho, la idea parece estupenda y si además, tomamos en cuenta quiénes están detrás de este proyecto, pues definitivamente es algo que dará de qué hablar en los meses futuros.
Referencias: