Así es AssemblyScript, tu próximo lenguaje de programación
Nota: el SDK de AssemblyScript (@fastly/as-compute) para Compute@Edge de Fastly se ha sustituido por el SDK de JavaScript (@fastly/js-compute), más actual y completo en cuanto a funcionalidades.
¡Buenas! Me llamo Aaron Turner y soy Senior Software Engineer de Compute@Edge</u>, nuestro entorno informático sin servidores, además de miembro del equipo principal de AssemblyScript. En este artículo sobre Compute@Edge anunciamos que íbamos a añadir compatibilidad con AssemblyScript, así que vamos a ver en qué consiste este lenguaje más o menos reciente. Curiosamente, creo que la mejor forma de empezar es hablando de otro lenguaje: JavaScript.
JavaScript es uno de los lenguajes de programación más utilizados</u>, pero no es perfecto para algunas cosas, como ejecutar lógica en el edge</u>. El mayor problema de JavaScript es que, al ser un lenguaje que se escribe e interpreta de forma dinámica, requiere un tiempo de ejecución.
Los tiempos de ejecución de JavaScript deben estar muy optimizados y utilizar técnicas como la compilación en tiempo real para rendir a más o menos el mismo nivel que un lenguaje de escritura y compilación estáticas, y eso en el mejor de los casos. V8 y otros tiempos de ejecución son capaces de ejecutar JavaScript utilizando una cantidad razonable de recursos, pero tiene más sentido optar por un lenguaje que se escriba o interprete de forma dinámica. ¿Y si JavaScript pudiera ofrecer una experiencia similar a los desarrolladores con las ventajas de un lenguaje de escritura y compilación estáticas?
TypeScript despeja parte de esta ecuación añadiendo tipos a JavaScript y, por tanto, seguridad de tipos en las aplicaciones de JavaScript. TypeScript está muy extendido entre los desarrolladores de JavaScript. De hecho, aproximadamente el 80 % de estos profesionales utilizan o quieren aprender a utilizar TypeScript</u>. Sin embargo, TypeScript no llega a ser un lenguaje compilado al cien por cien, ya que comprueba los tipos pero, en última instancia, se deshace de ellos para producir código de JavaScript en estado puro en vez de un binario totalmente compilado.
AssemblyScript entra en juego
AssemblyScript es una variante de TypeScript que produce binarios de WebAssembly; es decir, en el formato que utiliza Compute@Edge de Fastly</u>. Esta nueva tecnología es compatible con la mayoría de los navegadores y, en comparación con JavaScript, ofrece un rendimiento predecible, por lo que resulta ideal para tareas exigentes en cuanto a recursos informáticos. WebAssembly también destaca en cuanto a portabilidad, ya que se puede distribuir fácilmente en repositorios de paquetes (como npm) y funcionar en tiempos de ejecución tanto en el navegador como independientes (como Lucet</u>).
Aunque AssemblyScript requiere una escritura más precisa que TypeScript, se ciñe todo lo posible a la sintaxis y la semántica de TypeScript. Esto significa que la mayoría de los desarrolladores de JavaScript se sentirán cómodos con AssemblyScript, un lenguaje que ofrece una mayor compatibilidad con el ecosistema moderno de JavaScript. Sin ir más lejos, el compilador de AssemblyScript está disponible en npm</u>, al igual que herramientas y bibliotecas de AssemblyScript tan comunes como as-pect</u>. Los archivos de AssemblyScript también utilizan la extensión «.ts» de TypeScript, y el lenguaje incluye mecanismos de escritura que le permiten incorporar herramientas de TypeScript, como su depurador de código. Es más, basta con hacer unos pequeños ajustes para poder utilizar AssemblyScript con el compilador de TypeScript.
Esto está muy bien, ya que a AssemblyScript se lo pone fácil a los desarrolladores para aprender a leer y escribir un lenguaje con el que producir en formato WebAssembly, así como utilizar un montón de herramientas que ya forman parte de sus procesos con JavaScript. La comunidad de WebAssembly suele decir que AssemblyScript es el punto de partida ideal para que los desarrolladores de aplicaciones se familiaricen con WebAssembly. En definitiva, si estás empezando de cero y no sabes demasiado de JavaScript o TypeScript, AssemblyScript es una gran opción si te interesa aprender un lenguaje relacionado con WebAssembly.
No obstante, AssemblyScript presenta algunos inconvenientes que no podemos pasar por alto.
Desventajas de AssemblyScript en 2020
AssemblyScript es un lenguaje muy reciente, así que no es de extrañar que tenga algunas carencias. Una de ellas es la ausencia de compatibilidad con clausuras y expresiones regulares. La falta de clausuras complica el paso de unas funciones a otras, algo muy común en JavaScript y TypeScript, y la falta de expresiones regulares lo pone difícil para dividir y modificar cadenas, lo cual resulta fundamental en algunas aplicaciones. Por suerte, ambas funcionalidades están en desarrollo para AssemblyScript.
También debemos tener en cuenta que AssemblyScript es un lenguaje muy joven, al igual que su comunidad y su ecosistema. A medida que la comunidad vaya creciendo, habrá más versiones de bibliotecas comunes de JavaScript y TypeScript para AssemblyScript que se podrán compartir en repositorios de paquetes de JavaScript tan habituales como npm. En cualquier caso, ya hay alternativas nada desdeñables a las bibliotecas comunes de JavaScript para AssemblyScript. Por ejemplo, as-pect</u> es un marco de pruebas unitarias para AssemblyScript que tiene mucho en común con Jest, y as-wasi</u> es una biblioteca de alto nivel que se suma a WASI (la interfaz del sistema de WebAssembly) y permite actuar con recursos del sistema (FileSystem, Time, etc.) como la API Node.
¿Es AssemblyScript la mejor opción para ti?
En primer lugar, me gustaría explicar para qué no se debe utilizar AssemblyScript. Como ya hemos dicho un par de veces al principio del artículo, AssemblyScript no sustituye a tus aplicaciones de JavaScript o TypeScript actuales. No esperes ejecutar una aplicación de ts-node o un fragmento de JavaScript que requiera objetos globales del navegador (como «window») directamente en el compilador de AssemblyScript así como así.
AssemblyScript es un lenguaje fácil de aprender y un excelente punto de partida para migrar código de JavaScript o TypeScript, así como sus dependencias, a AssemblyScript. Esto se debe a que tu nueva aplicación de AssemblyScript y las dependencias migradas (si es que no existen dependencias alternativas) se pueden compilar en WebAssembly mediante el compilador de AssemblyScript. Si tu aplicación o biblioteca no depende de valores globales de la plataforma (o, dicho de otra forma, tu JavaScript o TypeScript es isomorfo o universal), entonces la migración puede ser un proceso tan sencillo como añadir o modificar algunos tipos de código. En cambio, si tu proyecto o sus dependencias utilizan valores específicos de la plataforma, esto puede resultar más complejo, puesto que será necesario volver a implementarlos o importarlos a través del tiempo de ejecución del host. Más adelante publicaremos un artículo sobre la migración de aplicaciones de JavaScript a AssemblyScript, así que mantente al tanto.
Si estás empezando de cero, AssemblyScript es un lenguaje ideal para ponerte en marcha con WebAssembly. Y si tu equipo tiene experiencia con JavaScript o TypeScript, aprender AssemblyScript será coser y cantar. Las similitudes en cuanto a sintaxis y los procesos de JavaScript modernos lo ponen fácil para familiarizarse con AssemblyScript e integrarlo en los proyectos en curso. Si no sabes JavaScript o TypeScript, las funcionalidades adicionales de AssemblyScript te allanarán el camino. Por ejemplo, AssemblyScript ofrece acceso de bajo nivel y ayuda con las API para los conceptos en torno a WebAssembly, de modo que debería resultarte más sencillo entender cómo se ejecuta el código y cómo los datos llegan a tu aplicación mientras se ejecuta como un módulo de WebAssembly.AssemblyScript es un lenguaje nuevo y con muchas posibilidades, así que tenemos muchas ganas de ver cómo crece su comunidad.
Si quieres obtener más información, abajo tienes el vídeo de la charla que di en la conferencia Web Directions Code de 2020. Esperamos que este lenguaje sea útil para ti, para Fastly y para nuestros clientes. Le seguiremos la pista a AssemblyScript y te animamos a hacer lo mismo.