Sobre o projeto
Wago é um runtime WebAssembly escrito inteiramente em Go. Em vez de interpretar Wasm, ele compila módulos diretamente para código de máquina nativo, permitindo que seja incorporado em programas Go sem CGO, mantendo as builds comuns de Go e a compilação cruzada simples. O projeto apresenta-se como rápido, compacto e extensível, e afirma que ainda está em beta, o que significa que as APIs e os artefatos .wago gerados podem mudar.
Características destacadas pelo projeto:
- Go puro: a incorporação não requer uma toolchain C.
- Focado em padrões: afirma-se que o runtime passa no conjunto de testes oficial do WebAssembly, além de fuzzing e corpora do mundo real.
- Extensível: WASI, o Component Model e outras capacidades de host residem fora do runtime principal como plugins.
- Executáveis independentes: um arquivo .wasm pode ser compilado em um binário nativo pequeno, o que o README sugere ser útil para ferramentas de CLI.
- Plataformas: Linux, macOS e Windows em amd64 e arm64, com a cobertura de recursos do WebAssembly variando conforme o backend. Um arquivo de matriz de recursos documenta a cobertura exata.
Instalação
No macOS e Linux, o comando de linha única documentado baixa um script de instalação e o envia para o sh; no Windows, usuários de PowerShell executam um comando irm equivalente. Estes instalam um gerenciador, que então instala um runtime. O site de documentação cobre métodos de instalação alternativos, canais de lançamento e builds de código-fonte.
Executando módulos
Após a instalação, um módulo pode ser executado diretamente: executar um pequeno arquivo Wasm de Fibonacci com um argumento imprime o resultado esperado. Para criar um binário independente, o subcomando compile recebe um input .wasm e um caminho de saída, e o executável resultante aceita os mesmos argumentos.
Usando Wago a partir do Go
Desenvolvedores Go adicionam o módulo com go get github.com/wago-org/wago. O repositório fornece exemplos numerados, incluindo um exemplo de runtime tipado que compila um módulo, cria uma instância e chama uma função exportada. Um guia de documentação separado cobre a incorporação do Wago em Go.
Capacidades de host e plugins
As integrações de host são deliberadamente mantidas fora do runtime principal. Um projeto pode ser inicializado com o comando init, e plugins como uma implementação de WASI são adicionados por nome, por exemplo wago-org/wasi. Um site de registro de plugins é fornecido para navegar pelo que está disponível.
Desempenho
O README afirma que o Wago usa alguns kilobytes de RAM e alega tempos de compilação aproximadamente três vezes mais rápidos e execução cerca de 40 por cento mais rápida que o wazero. O projeto linka para uma página de benchmarks e um diretório de benchmarks no repositório. Esses números são medições dos próprios mantenedores e devem ser verificados com suas próprias cargas de trabalho antes de serem confiáveis.
Status do projeto e licenciamento
Wago é lançado sob a Licença Apache 2.0 e desenvolvido gratuitamente, com incentivo ao patrocínio. O repositório inclui documentação, exemplos, uma matriz de recursos, um documento de arquitetura, um roadmap, diretrizes de contribuição e um rastreador de problemas.
No geral, o Wago visa desenvolvedores Go que desejam executar ou incorporar WebAssembly sem uma dependência de C, e que preferem um núcleo de runtime pequeno cujos recursos de host sejam adicionados via plugins. Seu status beta e o fato de que os números de benchmark vêm do próprio projeto são os principais pontos a considerar antes da adoção.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.