Está la firma de la función, ¿verdad? Entonces, esos son los argumentos que la función toma, el tamaño de la misma, el número de funciones que estamos exportando. {{^}}Está la sección de exportación, que es la palabra clave export, el tamaño de esa sección, el número de exportaciones. Y a medida que seguimos, está la sección de exportación, que es solo un poco más como el nombre de la exportación, ya sabes, la sección de la función, que es en realidad como el código dentro de ella, la lógica de esa sección y cómo estamos manipulando algunas de las variables que se pasan a ella, y finalmente el final, que denota como el final de ese bloque binario. Y realmente, de nuevo, no vas a necesitar memorizar esto, pero sigue siendo algo interesante, y si quieres leer más al respecto, puedes encontrar la especificación binaria en GitHub.
Así que ahora, consideremos realmente la historia de Wasm. Comenzó en 2011, que es hace mucho tiempo, antes de que yo fuera realmente un desarrollador. Podías usar Emscripten para compilar C y C++ desde 2011 a algo que se ejecutaría en el navegador. Google tenía su propia versión de algo similar a Wasm llamado Native Client, o NACL, y luego en 2013, se introdujo ASM.js, y ASM.js era código JavaScript que luego se pasaría a este compilador ASM.js para que el navegador lo optimizara y ejecutara, y era muy interesante, porque escribirías código JavaScript, pero anotarías tal vez el tipo de una cierta variable para hacerle saber que sería un float o un entero o cosas así. Y luego en 2015, Wasm en sí fue anunciado, ese formato binario real. NACL fue luego deprecado un par de años después a favor de Wasm, porque Google decidió que, sí, ¿por qué construir algo y mantenerlo ellos mismos cuando podrían realmente apoyar un estándar abierto? El soporte amplio de navegadores llegó alrededor de ese mismo tiempo. Después de eso, obtuvimos algo llamado Wasi, que es la interfaz del sistema WebAssembly, que explicaré un poco más aquí en un momento. En 2019, los hilos de Wasm se habilitaron por defecto en Chrome, y en 2022, Wasm 2.0, un borrador para ello fue creado. Hay un poco de controversia alrededor de ese borrador y cómo funciona, pero no vamos a profundizar demasiado en eso ahora mismo. Puede que valga la pena leerlo por tu cuenta.
Así que Wasi es la interfaz del sistema WebAssembly. Está diseñado por Mozilla, y proporciona un conjunto de características similares a POSIX, por lo que puedes obtener como entrada/salida de archivos o redes o cosas que tu sistema operativo maneja por ti que cuando compilas un binario para un cierto sistema operativo, esos son los enlaces que realmente están siendo conectados para ti a ese binario. Así que en su lugar, Wasi te ayuda a hacer eso con código Wasm, y cuando combinas esas cosas juntas, obtienes algo muy poderoso. Solomon Hikes, el creador de Docker, dijo una vez en 2019, si Wasm y Wasi existieran en 2008, no habríamos necesitado crear Docker. Así de importante es. WebAssembly en el servidor es el futuro de la computación. Solo piensa en eso, como realmente poderoso. Así que la portabilidad que obtendríamos para ejecutar Wasm en la Web también significaría que podríamos obtener esa portabilidad a nivel de servidor, y ya sabes, no necesitaríamos Docker en ese punto siempre y cuando haya una interfaz Wasi para exponer estas cosas para nosotros. Y siempre y cuando nuestras dependencias pudieran compilarse a Wasm también. Mi charla favorita y ejemplo de cómo podría ser este futuro es The Birth and Death of JavaScript por Gary Bernhardt. Ahora, el título es engañoso. No es realmente anti-JavaScript. Tiene algunos puntos muy buenos sobre cómo no es un lenguaje perfecto, por supuesto, porque no existe tal cosa. Pero él pasa por y señala que debido a que JavaScript es como es, llevó al futuro que estamos viendo donde la gente está presionando para que Wasm obtenga un código más eficiente de su navegador.
Comments