Pular para o conteúdo

Runtime WebAssembly

O runtime WASM e uma extensao experimental. A configuracao e estavel, mas os detalhes internos do runtime podem mudar entre versoes.

O Wippy executa modulos WebAssembly como entradas de registro de primeira classe junto com codigo Lua. Funcoes e processos WASM sao executados dentro do mesmo agendador, compartilham o mesmo modelo de seguranca e interoperam com Lua atraves do registro de funcoes.

KindDescricao
function.watFuncao em formato WebAssembly Text inline definida em YAML
function.wasmBinario WASM pre-compilado carregado de uma entrada de sistema de arquivos
process.wasmBinario WASM executado como processo (comandos CLI ou longa duracao)
  1. Modulos WASM sao declarados como entradas de registro em _index.yaml
  2. Na inicializacao, os modulos sao compilados e colocados em pools de workers
  3. Codigo Lua (ou outro WASM) os chama via funcs.call()
  4. Argumentos e valores de retorno sao mapeados automaticamente entre tabelas Lua e tipos WIT
  5. Operacoes assincronas (I/O, sleep, HTTP) cedem controle atraves do dispatcher, da mesma forma que Lua

O Wippy suporta o WebAssembly Component Model com WIT (WebAssembly Interface Types). Modulos de componentes recebem mapeamento completo de tipos entre o host e o guest:

  • Records mapeiam para tabelas Lua com campos nomeados
  • Lists mapeiam para arrays Lua
  • Results mapeiam para tuplas de retorno (value, error)
  • Primitivos (s32, f64, string, etc.) mapeiam diretamente

Modulos WASM raw/core tambem sao suportados com assinaturas WIT explicitas.

Funcoes WASM sao chamadas da mesma forma que qualquer outra funcao no registro:

local funcs = require("funcs")
-- Sem argumentos
local result, err = funcs.call("myns:answer_wat")
-- Com argumentos
local result, err = funcs.call("myns:compute", 6, 7)
-- Com dados complexos
local users = {
{id = 1, name = "Alice", tags = {"admin"}, active = true},
{id = 2, name = "Bob", tags = {"user"}, active = false},
}
local transformed, err = funcs.call("myns:transform_users", users)

Execucoes WASM herdam o contexto de seguranca do chamador por padrao:

  • A identidade do ator e herdada
  • O escopo e herdado
  • O contexto da requisicao e herdado

Capacidades do host sao opt-in atraves de imports explicitos. Cada entrada declara exatamente quais interfaces WASI precisa (wasi:cli, wasi:filesystem, etc.), limitando a superficie de acesso do modulo.

  • Funcoes - Configuracao de entradas de funcoes WASM
  • Funcoes Host - Interfaces WASI e Wippy host disponiveis
  • Processos - Executando WASM como processos de longa duracao