AssemblyScript es un lenguaje de programación basado en TypeScript , optimizado para WebAssembly y compilado estáticamente para este lenguaje (actualmente utiliza asc , el compilador de referencia de AssemblyScript). Similar a ECMAScript y JavaScript , pero con tipos de datos estáticos , el lenguaje es desarrollado por el Proyecto AssemblyScript [ 6 ] con contribuciones de la comunidad AssemblyScript.
Descripción general
En 2017, la disponibilidad de soporte para WebAssembly , una definición estándar para un código de bytes de bajo nivel y una máquina virtual asociada , se generalizó entre los principales navegadores web , proporcionando a los programas web un destino de compilación de nivel inferior y potencialmente de mayor rendimiento para que los programas y aplicaciones del lado del cliente se ejecuten dentro de los navegadores web, junto con el lenguaje de scripting web JavaScript interpretado (y en la práctica compilado dinámicamente ) . [ 7 ] WebAssembly permite que los programas y el código se compilen estáticamente con anticipación para ejecutarse potencialmente a nivel nativo o con rendimiento de máquina (metal) en los navegadores web, sin la sobrecarga de la interpretación ni la latencia inicial de la compilación dinámica . [ 8 ]
Con la adopción de WebAssembly en los principales navegadores web, Alon Zakai, creador de Emscripten , un compilador de C y C++ basado en LLVM - Clang que apuntaba a un subconjunto de JavaScript llamado asm.js , agregó soporte para WebAssembly como destino de compilación en Emscripten, lo que permite compilar programas y código C y/o C++ directamente a WebAssembly. [ 9 ]
Si bien Emscripten y compiladores similares permiten escribir código nuevo o portar código existente, escrito en lenguajes de programación de alto nivel como C, C++, Go y Rust a WebAssembly para lograr un rendimiento de ejecución potencialmente superior, similar al de los navegadores web, esto obliga a los desarrolladores web acostumbrados a desarrollar scripts y aplicaciones web del lado del cliente en ECMAScript-JavaScript (el lenguaje de programación del lado del cliente por excelencia en los navegadores web) a utilizar un lenguaje diferente a JavaScript para WebAssembly. AssemblyScript, como una variante de TypeScript sintácticamente similar a JavaScript, permite a los desarrolladores familiarizados con JavaScript utilizar un lenguaje conocido para WebAssembly, lo que potencialmente reduce la curva de aprendizaje de un lenguaje independiente que se puede compilar a WebAssembly. Además, dado que AssemblyScript fue diseñado para ser un lenguaje fuente óptimo para WebAssembly, el sistema de tipos del lenguaje refleja fielmente el de WebAssembly, [ 10 ] y el lenguaje proporciona funciones estándar de bajo nivel (normalmente implementadas como macros ) que se asignan directamente a instrucciones de WebAssembly que reflejan las instrucciones disponibles en los procesadores modernos, como las instrucciones SIMD ( Single Instruction, Multiple Data ) y las instrucciones vectoriales , así como instrucciones más especializadas como clz(contar bits cero iniciales), ctz(contar bits cero finales) y popcnt( conteo de población ), utilizadas en aplicaciones como bibliotecas de cifrado y criptográficas. [ 11 ]
asc , el compilador de referencia de AssemblyScript, se basa en Binaryen , una cadena de herramientas de compilación de back-end desarrollada por Alon Zakai que compila a WebAssembly y es un componente de Emscripten (que Zakai también desarrolló). El compilador asc y otras herramientas están disponibles a través del gestor de paquetes npm .
Aunque WebAssembly fue diseñado originalmente para ejecutarse dentro de navegadores web, el desarrollo de WASI (WebAssembly System Interface), una especificación comunitaria para una API estándar que permite a los programas WebAssembly acceder a llamadas al sistema y otras funciones del sistema operativo , [ 12 ] ha llevado al desarrollo de entornos de ejecución de WebAssembly de proyectos como Wasmtime , [ 13 ] WebAssembly Micro Runtime , Wasmer , [ 14 ] WasmEdge y wazero que permiten que WebAssembly, y el código escrito en lenguajes como AssemblyScript que pueden compilarse a él, se ejecute también en entornos que no son web. [ 15 ]
Compatibilidad con JavaScript
AssemblyScript se compila en módulos WebAssembly, que luego se pueden instanciar en páginas web del lado del cliente utilizando métodos JavaScript estándar, al igual que WebAssembly.compileStreaminglos WebAssembly.instantiateStreamingbinarios WebAssembly estándar. [ 16 ] El paso de datos entre JavaScript y los módulos WebAssembly compilados, así como las llamadas a funciones entre JavaScript y WebAssembly, son los mismos que para cualquier módulo WebAssembly. [ 17 ]
Dado que el lenguaje AssemblyScript es principalmente un subconjunto de TypeScript, teóricamente es posible escribir un programa AssemblyScript utilizando este subconjunto y compilarlo tanto a JavaScript puro como a WebAssembly, usando el compilador de TypeScript y el compilador de AssemblyScript, respectivamente. Esto permite potencialmente la portabilidad del código , que puede utilizarse en entornos de ejecución de JavaScript o WebAssembly .
Usar
A partir de mayo de 2025 , más de 29.000 proyectos alojados en GitHub están escritos, total o parcialmente, en AssemblyScript, [ 18 ] con aproximadamente 50.000 descargas del compilador de AssemblyScript por semana a través de npm . [ 19 ] [ 20 ]
En 2021, Webpack comenzó a usar AssemblyScript para acelerar el cálculo de funciones hash como xxhash y md4 sources . Esto también permitió eliminar las dependencias nativas.
Recepción
El desarrollador principal de Emscripten, Alon Zakai, ha descrito AssemblyScript como un lenguaje "diseñado teniendo en cuenta WebAssembly y el tamaño del código. No es un lenguaje existente que estemos utilizando para un nuevo propósito, sino un lenguaje diseñado para WebAssembly. Tiene una gran wasm-optintegración —de hecho, está construido con él— y es muy fácil obtener un buen tamaño de código". [ 21 ]
El músico noruego Peter Salomonsen, en una charla de la Cumbre WebAssembly 2020 titulada "Música WebAssembly", demostró el uso de AssemblyScript para la compilación en tiempo real a WebAssembly en la síntesis de música electrónica en vivo, diciendo: "Elegí AssemblyScript porque tiene legibilidad de alto nivel y control de bajo nivel; es como un lenguaje de alto nivel, pero obtienes esa sensación de bajo nivel, e incluso puedes escribir intrínsecos de WebAssembly directamente si quieres". [ 22 ]
Aaron Turner, ingeniero sénior de Fastly , un proveedor de servicios de computación en la nube que utiliza WebAssembly para el entorno de computación sin servidor Compute@Edge de la empresa, escribió en una revisión de AssemblyScript: [ 23 ]
Aunque AssemblyScript requiere una tipificación más estricta que TypeScript, se apega lo más posible a la sintaxis y semántica de TypeScript, lo que significa que la mayoría de los desarrolladores de JavaScript encontrarán AssemblyScript cómodo de usar, y permite una gran compatibilidad con el ecosistema moderno de JavaScript. Por ejemplo, el compilador de AssemblyScript está disponible en npm , así como herramientas y bibliotecas comunes de AssemblyScript como as-pect . Los archivos de AssemblyScript también usan la extensión de archivo ' .ts ' de TypeScript e incluyen tipificaciones adecuadas para que AssemblyScript pueda aprovechar las herramientas de TypeScript, como el linter de TypeScript. Con algunos ajustes, AssemblyScript incluso se puede usar con el compilador de TypeScript.
Esto resulta útil, ya que AssemblyScript ofrece un punto de entrada sencillo para que los desarrolladores de JavaScript aprendan un lenguaje para generar código WebAssembly, tanto en lo que respecta a aprender a leer y escribir AssemblyScript como al uso de muchas herramientas ya existentes que pueden formar parte de su flujo de trabajo. En la comunidad WebAssembly, AssemblyScript suele considerarse una excelente puerta de entrada a este lenguaje. Ofrece a un gran número de desarrolladores que ya crean aplicaciones web una vía para aprender WebAssembly. Incluso si se empieza desde cero y no se está familiarizado con JavaScript o TypeScript, AssemblyScript es una opción sólida para comenzar a generar código WebAssembly.
Sin embargo, Turner procedió a citar la relativa novedad del lenguaje y, por lo tanto, su falta de algunas características disponibles en lenguajes de programación más grandes, complejos y consolidados, como deficiencias potenciales pero temporales del mismo.
Véase también
Referencias
- 1 2 "Grupo de trabajo de AssemblyScript" . GitHub.com . Proyecto AssemblyScript. 24 de abril de 2020. Consultado el 10 de febrero de 2021. Daniel
Wirtz (@dcodeIO) - Autor de AssemblyScript
- ↑ Turner, Aaron (28 de marzo de 2019). "WebAssembly para desarrolladores de Javascript" . YouTube.com . WebAssembly SF . Consultado el 10 de febrero de 2021.
@dcodeIO [Daniel Wirtz] y @MaxGraey [Max Graey] son los dos principales desarrolladores de AssemblyScript
. - ↑ "assemblyscript 0.1.0" . npmjs.com . Proyecto AssemblyScript. 2017. Consultado el 10 de febrero de 2021 .
- ↑ "Versión 0.28.19" . 12 de junio de 2026. Consultado el 13 de junio de 2026 .
- ↑ "Licencia" . GitHub.com . El proyecto AssemblyScript. 29 de septiembre de 2017. Consultado el 10 de febrero de 2021.
AssemblyScript/assemblyscript está bajo la licencia Apache License 2.0
. - ↑ "El proyecto AssemblyScript" . GitHub.com . El proyecto AssemblyScript . Consultado el 10 de febrero de 2021 .
- ↑ "Hoja de ruta" . WebAssembly.org . Grupo de la comunidad WebAssembly. Noviembre de 2017. Consultado el 10 de febrero de 2021 .
- ↑ Grupo de trabajo de WebAssembly. "WebAssembly" . WebAssembly.org . Grupo de trabajo de WebAssembly . Consultado el 10 de febrero de 2021 .
- ↑ Zakai, Alon; Otros. "Emscripten" . Emscripten.org . Proyecto Emscripten . Consultado el 10 de febrero de 2021 .
- ↑ "Tipos" . AssemblyScript.org . El proyecto AssemblyScript . Consultado el 10 de febrero de 2021 .
- ↑ "Entorno" . AssemblyScript.org . El proyecto AssemblyScript . Consultado el 10 de febrero de 2012 .
- ↑ El proyecto Wasmtime. "WASI: La interfaz del sistema WebAssembly" . WASI.dev . El proyecto Wasmtime . Consultado el 10 de febrero de 2021 .
- ↑ El proyecto Wasmtime. "Wasmtime: Un entorno de ejecución pequeño y eficiente para WebAssembly y WASI" . Wasmtime.dev . El proyecto Wasmtime . Consultado el 10 de febrero de 2021 .
- ↑ Wasmer, Inc. "Wasmer: El entorno de ejecución universal de WebAssembly" . Wasmer.io . Wasmer, Inc. Consultado el 10 de febrero de 2021 .
- ↑ Jaghori, Sasan (1 de agosto de 2023). Computación eficiente sin servidor con WebAssembly (tesis de maestría). Universidad de Ciencias Aplicadas, Campus de Viena.
- ↑ Mozilla Developer Network. "Carga y ejecución de código WebAssembly" . developer.mozilla.org . Mozilla Developer Network . Consultado el 10 de febrero de 2021 .
- ↑ Mozilla Developer Network. "Uso de la API de JavaScript WebAssembly" . developer.mozilla.org . Mozilla Developer Network . Consultado el 10 de febrero de 2021 .
- ↑ "Gráfico de dependencias de AssemblyScript/assemblyscript" . GitHub.com . GitHub . Consultado el 26 de mayo de 2025 .
- ↑ npmjs. "Descargas semanales de assemblyscript" . npmjs.com . Consultado el 26 de mayo de 2025 .
- ↑ "Resolver error en TypeScript" . 3 de junio de 2022.Sábado, 7 de mayo de 2022
- ↑ Alon Zakai (19 de febrero de 2020). "Envío de compilaciones pequeñas de WebAssembly" . YouTube.com . WebAssembly-Summit.org . Consultado el 10 de febrero de 2021 .
- ↑ Peter Salomonsen (19 de febrero de 2020). "Música de WebAssembly" . YouTube.com . WebAssembly-Summit.org . Consultado el 10 de febrero de 2021 .
- ↑ Aaron Turner (29 de octubre de 2020). "Conoce AssemblyScript: tu próximo lenguaje de programación" . Fastly.com . Fastly . Consultado el 10 de febrero de 2021 .
Enlaces externos
- Mecanografiado
- Familia de lenguajes de programación JavaScript
- Lenguajes de programación de tipado estático
- Software multiplataforma
- Software que utiliza la licencia Apache.