AssemblyScript es un lenguaje de programación basado en TypeScript (esencialmente JavaScript con tipos estáticos) que está optimizado para WebAssembly y compilado en WebAssembly usando asc , el compilador de AssemblyScript de referencia. Está desarrollado por AssemblyScript Project [6] y la comunidad de AssemblyScript.
Paradigma | Multi-paradigma : funcional , genérico , imperativo , orientado a objetos |
---|---|
Familia | JavaScript , TypeScript |
Diseñada por | Daniel Wirtz, [1] Max Graey [2] |
Desarrollador | El proyecto de AssemblyScript [1] |
Apareció por primera vez | 2017 [3] |
Lanzamiento estable | 0.18.29 / 28 de abril de 2021 [4] |
Disciplina de mecanografía | Estático |
Alcance | Léxico |
Licencia | Licencia de Apache 2.0 [5] |
Extensiones de nombre de archivo | .ts |
Formatos de archivo | Texto , Unicode (fuente) .wasm formato binario (objeto) |
Sitio web | www |
Implementaciones importantes | |
asc (compilador de AssemblyScript) | |
Influenciado por | |
JavaScript , TypeScript , WebAssembly |
Descripción general
En 2017, la disponibilidad de apoyo para WebAssembly , una definición estándar para un bajo nivel de código de bytes y un asociado máquina virtual , se generalizó entre los principales navegadores de Internet , proporcionando a los desarrolladores Web un nivel inferior y potencialmente objetivo de la compilación de mayor rendimiento para el lado del cliente programas y aplicaciones para ejecutar dentro de los navegadores web, además del lenguaje de secuencias de comandos web JavaScript interpretado (y también típicamente compilado dinámicamente ) . [7] WebAssembly permite que los programas y el código se compilen estáticamente con anticipación para que se ejecuten a un nivel potencialmente nativo o un rendimiento " bare-metal " dentro de los navegadores web, sin la sobrecarga de interpretación o 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 tenía como objetivo un subconjunto de JavaScript llamado asm.js , agregó soporte para WebAssembly como un objetivo de compilación en Emscripten, lo que permite Programas y código C y / o C ++ que se compilarán directamente en WebAssembly. [9]
Mientras que Emscripten y los compiladores similares permiten a los desarrolladores web escribir código nuevo, o portar código existente, escrito en un lenguaje de alto nivel como C, C ++, Go y Rust a WebAssembly para lograr un rendimiento de ejecución de nivel nativo potencialmente más alto en los navegadores web. , esto obliga a los desarrolladores web acostumbrados a desarrollar scripts y aplicaciones web del lado del cliente en JavaScript (el lenguaje de programación del lado del cliente de facto en los navegadores web) a usar un lenguaje diferente para apuntar a WebAssembly que JavaScript. AssemblyScript, como una variante de TypeScript que es sintácticamente casi idéntica a JavaScript, permite a los desarrolladores acostumbrados a JavaScript utilizar un lenguaje familiar para apuntar a WebAssembly, lo que potencialmente reduce la curva de aprendizaje de un lenguaje separado que se puede compilar en WebAssembly. Además, debido a que AssemblyScript fue diseñado para ser un lenguaje fuente óptimo para WebAssembly, el sistema de tipos del lenguaje refleja de cerca el de WebAssembly, [10] y el lenguaje proporciona funciones estándar de bajo nivel (generalmente implementadas como macros ) que se asignan directamente a las instrucciones de WebAssembly que Reflejar instrucciones de hardware especializadas proporcionadas por procesadores modernos como SIMD e instrucciones vectoriales e instrucciones más especializadas como clz
(contar los bits del cero a la izquierda), ctz
(contar los bits del cero al final) y popcnt
( contar la población ), que se utilizan en aplicaciones como el cifrado y las bibliotecas criptográficas. [11]
El compilador de AssemblyScript asc se basa en Binaryen, una cadena de herramientas de compilación de back-end desarrollada por Alon Zakai que se compila en WebAssembly y es un componente de Emscripten (que también desarrolló Zakai). La El compilador asc y otras herramientas están disponibles a través del administrador de paquetes npm .
Si bien WebAssembly se diseñó originalmente para su ejecución dentro de los navegadores web, el desarrollo de WASI (WebAssembly System Interface), una especificación de la comunidad para una API estándar que permite a los programas WebAssembly acceder a las llamadas del sistema y otras funciones del sistema operativo , [12] ha llevado al desarrollo de entornos de ejecución de WebAssembly de proyectos como Wasmtime [13] y Wasmer [14] que permiten que WebAssembly, y código escrito en lenguajes como AssemblyScript que se puede compilar en él, se ejecute también en entornos no Web.
Compatibilidad con JavaScript
AssemblyScript se compila para módulos WebAssembly, que luego se pueden crear instancias en las páginas web a nivel de cliente utilizando métodos estándar tales como JavaScript WebAssembly.compileStreaming
y WebAssembly.instantiateStreaming
al igual que los binarios WebAssembly estándar. [15] Los datos que pasan 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. [dieciséis]
Debido a que el lenguaje AssemblyScript es principalmente un subconjunto de TypeScript (también tiene un pequeño superconjunto de TypeScript), es posible escribir un programa AssemblyScript usando el subconjunto y compilarlo tanto en JavaScript simple como en WebAssembly, usando tanto el compilador TypeScript como el compilador AssemblyScript. , respectivamente. Esto permite código portátil que se ejecuta en entornos JavaScript y WebAssembly.
Uso
En marzo de 2021,[actualizar]aproximadamente 3000 proyectos alojados en GitHub están escritos, total o parcialmente, en AssemblyScript, [17] con aproximadamente 5000 descargas del compilador de AssemblyScript por semana a través de npm . [18]
Recepción
El desarrollador líder de Emscripten, Alon Zakai, ha caracterizado a AssemblyScript como “diseñado con WebAssembly y el tamaño del código en mente. No es un lenguaje existente que estamos usando para un nuevo propósito, pero es un lenguaje diseñado para WebAssembly. Tiene una gran wasm-opt
integración, de hecho, está construido con él, y es muy fácil obtener un buen tamaño de código ". [19]
El músico noruego Peter Salomonsen, en una charla de la Cumbre WebAssembly 2020 titulada "WebAssembly Music", demostró el uso de AssemblyScript para la compilación en tiempo real de WebAssembly en síntesis de música electrónica en vivo, diciendo: "Elegí AssemblyScript porque tiene una legibilidad de alto nivel y control de bajo nivel; es como un lenguaje de alto nivel, pero tiene esa sensación de bajo nivel, e incluso puede escribir elementos intrínsecos directos de WebAssembly si lo desea ". [20]
Aaron Turner, ingeniero senior de Fastly , un proveedor de servicios de computación en la nube que usa WebAssembly para el entorno de computación sin servidor Compute @ Edge de la compañía, en una revisión de AssemblyScript escribió: [21]
Si bien AssemblyScript requiere una escritura más estricta que TypeScript, se apega lo más posible a la sintaxis y la semántica de TypeScript, lo que significa que la mayoría de los desarrolladores de JavaScript encontrarán que AssemblyScript es cómodo de usar, y permite un gran soporte para el ecosistema de JavaScript moderno. 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 los archivos de TypeScript ' .ts 'extensión de archivo, e incluye mecanografía adecuada para permitir que AssemblyScript aproveche las herramientas de TypeScript, como el linter de TypeScript. Con los pequeños ajustes adecuados, AssemblyScript incluso se puede utilizar con el compilador de TypeScript.
Esto es muy emocionante, ya que AssemblyScript ofrece un punto de entrada de bajo costo para que los desarrolladores de JavaScript seleccionen un lenguaje para generar WebAssembly, tanto en términos de aprender a leer y escribir en AssemblyScript, como en el uso de muchas de las herramientas preexistentes. que ya puede estar en el flujo de trabajo de un desarrollador de JavaScript. En la comunidad de WebAssembly a menudo se hace referencia a AssemblyScript como una excelente puerta de entrada para adquirir WebAssembly. Ofrece a un gran grupo de desarrolladores que ya escriben aplicaciones para la web un camino para aprender y aprender WebAssembly. Incluso si está comenzando desde cero y no está particularmente familiarizado con JavaScript o TypeScript, AssemblyScript es una opción sólida al elegir un lenguaje para comenzar a generar WebAssembly.
Sin embargo, Turner continuó citando la relativa novedad del lenguaje y, por lo tanto, su falta de algunas características disponibles en lenguajes de programación más grandes, más complejos y establecidos como posibles deficiencias del lenguaje.
Ver también
- Emscripten
- JavaScript
- Mecanografiado
- WebAssembly
Referencias
- ^ a b The AssemblyScript Project (24 de abril de 2020). "Grupo de trabajo de AssemblyScript" . GitHub.com . Proyecto AssemblyScript . Consultado el 10 de febrero de 2021 .
Daniel Wirtz (@dcodeIO) - Autor de AssemblyScript
- ^ Aaron Turner (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
- ^ El proyecto de AssemblyScript (2017). "script de ensamblaje 0.1.0" . npmjs.com . Proyecto AssemblyScript . Consultado el 10 de febrero de 2021 .
- ^ The AssemblyScript Project (28 de abril de 2021). "guión de ensamblaje" . npmjs.com . El proyecto de AssemblyScript . Consultado el 28 de abril de 2021 .
- ^ The AssemblyScript Project (29 de septiembre de 2017). "LICENCIA" . GitHub.com . El proyecto de AssemblyScript . Consultado el 10 de febrero de 2021 .
AssemblyScript / assemblyscript tiene la licencia Apache License 2.0
- ^ El proyecto de AssemblyScript. "El proyecto de AssemblyScript" . GitHub.com . El proyecto de AssemblyScript . Consultado el 10 de febrero de 2021 .
- ^ WebAssembly Community Group (noviembre de 2017). "Hoja de ruta" . WebAssembly.org . Grupo de comunidad de WebAssembly . 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 .
- ^ Colaboradores de Alon Zakai y Emscripten. "Emscripten" . Emscripten.org . Proyecto Emscripten . Consultado el 10 de febrero de 2021 .
- ^ El proyecto de AssemblyScript. "Tipos" . AssemblyScript.org . El proyecto de AssemblyScript . Consultado el 10 de febrero de 2021 .
- ^ El proyecto de AssemblyScript. "Medio Ambiente" . AssemblyScript.org . El proyecto de 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 tiempo 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 tiempo de ejecución de Universal WebAssembly" . Wasmer.io . Wasmer, Inc . Consultado el 10 de febrero de 2021 .
- ^ Red de desarrolladores de Mozilla. "Carga y ejecución de código de WebAssembly" . developer.mozilla.org . Red de desarrolladores de Mozilla . Consultado el 10 de febrero de 2021 .
- ^ Red de desarrolladores de Mozilla. "Uso de la API de JavaScript de WebAssembly" . developer.mozilla.org . Red de desarrolladores de Mozilla . Consultado el 10 de febrero de 2021 .
- ^ GitHub. "Gráfico de dependencia de AssemblyScript / assemblyscript" . GitHub.com . GitHub . Consultado el 11 de marzo de 2021 .
- ^ npmjs. "Descargas semanales de assemblyscript" . npmjs.com . npmjs.com . Consultado el 11 de marzo de 2021 .
- ^ Alon Zakai (19 de febrero de 2020). "Envío de pequeñas compilaciones 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 a AssemblyScript: tu próximo lenguaje informático" . Fastly.com . Rápidamente . Consultado el 10 de febrero de 2021 .
enlaces externos
- AssemblyScript.org (sitio oficial)
- Documentación de AssemblyScript (página del proyecto)
- El proyecto de AssemblyScript (en GitHub)
- Assemblyscript (en npm )