Asamblea web fue diseñado originalmente para brindar a las aplicaciones web en el navegador una forma de ejecutar archivos binarios portátiles, aislados y de alto rendimiento. Como WASM madura más allá del navegador, están surgiendo nuevos usos para la tecnología. El uso de WASM para crear programabilidad y extensibilidad en aplicaciones es un caso de uso que está ganando fuerza.
El Biblioteca de software de extismo le permite escribir programas que pueden interactuar con extensiones escritas en WebAssembly. Extism maneja la interfaz de llamada de funciones y datos entre el código escrito en su aplicación host y las extensiones WASM. Esto le permite concentrarse en escribir la funcionalidad en su aplicación y extensiones, en lugar de lidiar manualmente con los tipos de datos de WASM o las convenciones de llamada.
Escribir una aplicación basada en Extism
La biblioteca Extism funciona con casi cualquier lenguaje ampliamente utilizado. Actualmente, soporta C/C++, Java, javascript, Ir, Óxido, Rubí, Pitónla familia de lenguajes .NET (C# y F#, en particular), Elixir, PHP, OCaml, ZigHaskell y D. Dado que la biblioteca en sí está escrita en Rust y expone una interfaz de tipo C, cualquier lenguaje con una interfaz de función externa C puede apoya el extismo con un poco de trabajo.
Los complementos, o extensiones WASM, se pueden escribir en cualquier lenguaje que se compile en WASM. Rust es una opción obvia, ya que es el lenguaje en el que está escrito Extism, pero los desarrolladores pueden usar AssemblyScript (que se compila directamente en WASM) o JavaScript, Go, C#, F#, C, Haskell o Zig.
La filosofía de Extism es admitir programas de escritura de tal manera que su funcionalidad pueda ampliarse libremente con complementos escritos en WASM. Esta extensibilidad puede ser tan superficial o profunda como desee. El tiempo de ejecución WASM de Extism también maneja automáticamente cosas como la ejecución del sandboxing y el acceso a la memoria. Como tal, proporciona más protección de procesos que otras soluciones que podría utilizar para ampliar la funcionalidad de un programa, como incorporar un intérprete de Lua.
Ejemplo de un complemento de Extism
A continuación se muestra un ejemplo sencillo de un complemento de Extism y una aplicación anfitriona que lo utiliza. El complemento tiene una única función, greet
, que toma una cadena y devuelve un saludo usando la cadena proporcionada. Esta encarnación del complemento (también adaptada de los documentos de Extism) está escrita en AssemblyScript para simplificar:
import { Host } from '@extism/as-pdk';
export function greet(): i32 {
let name = Host.inputString();
let output = `Hello, ${name}!`;
Host.outputString(output);
return 0;
}
El extismo kit de desarrollo de complementos, o PDK, proporciona objetos que utilizamos para crear interfaces con el mundo exterior. El Host
El objeto contiene varias abstracciones para tomar información del host y devolverla en diferentes formatos (en este caso, cadenas). Otra opción es aceptar y devolver JSON, ya que es una manera conveniente de manejar datos estructurados en Extism, pero las cadenas funcionan para este ejemplo.
También necesitamos definir qué funciones de nuestro complemento están disponibles externamente. Esto varía según el idioma, pero en AssemblyScript se realiza a través del export
palabra clave. También podríamos definir funciones avanzadas de manejo de errores (por ejemplo, una función para llamar si el complemento arroja un error), pero lo omitiremos por simplicidad.
Ejemplo de una aplicación de Extismo
Para escribir una aplicación que utilice un complemento de Extism, utilice la biblioteca Extism para el lenguaje que esté utilizando para escribir la aplicación. Para este ejemplo, usaremos Pitónya que tanto el lenguaje como la forma de trabajar con Extism son bastante sencillos.
Aquí está el programa Python que estamos usando para trabajar con este complemento:
import extism
manifest = {"wasm": [{"path":"myplugin/example.wasm"}]}
plugin = extism.Plugin(manifest)
def greet(text: str):
return plugin.call("greet", text)
print(greet("Jeffrey"))
Ejecute esto y obtendrá la respuesta: Hello, Jeffrey!
Para utilizar nuestro complemento, necesitamos crear un manifiesto(un diccionario de Python, en este caso) que describe dónde se puede encontrar el complemento (aquí, en un subdirectorio del proyecto llamado myplugin
). Los manifiestos también se pueden usar para describir otros comportamientos, como cuánta memoria puede asignar el complemento o qué rutas en el disco puede usar.
Una vez que creamos un objeto para representar el complemento, podemos realizar llamadas a funciones usando el .call()
método.
Tenga en cuenta que este ejemplo simple solo funciona para un único complemento predeterminado. Si su aplicación quiere aceptar complementos arbitrarios, deberá definir interfaces para conectar los complementos. Luego puede descubrir la presencia de complementos automáticamente o utilizar algún tipo de metadatos proporcionados por el usuario.
Conclusión
Extism, como el propio WASM, es relativamente joven y sus mejores casos de uso aún están evolucionando. Con su baja barrera de entrada tanto para escribir complementos WASM como para crear aplicaciones que los utilicen, Extism es una forma útil de experimentar con WASM fuera del navegador. Cosecharás las recompensas en forma de descubrimientos y dividendos.
Copyright © 2024 IDG Communications, Inc.