O que é WebAssembly?
- WebAssembly é um conjunto de instruções padronizado e um formato de bytecode projetado para executar código cliente não confiável em navegadores web com velocidade próxima à nativa.
- Evoluiu a partir do Emscripten, um compilador de C/C++ para JavaScript, que inicialmente convertia LLVM IR em JavaScript para permitir a execução de código C e C++ na web.
- Com o tempo, desenvolvedores de navegadores colaboraram com o projeto Emscripten para criar um subconjunto simples de JavaScript voltado à otimização de desempenho, que foi padronizado como asm.js.
- Depois, para evitar a sobrecarga do JavaScript, foi projetado um formato de bytecode independente, que é o Wasm.
- Recentemente, o WebAssembly também vem ganhando popularidade fora dos navegadores, e Fastly e Shopify estão construindo produtos de Edge Compute e Functions com base em engines de WebAssembly.
- O WebAssembly é uma plataforma atraente para construir ecossistemas de plugins por poder ser alvo de várias linguagens de origem.
Por que um interpretador WebAssembly?
- Como muitos engenheiros de software, eu estava preso ao padrão de começar novos projetos paralelos e perder o interesse depois de algumas semanas.
- Eu precisava de um projeto grande no qual pudesse investir esforço por um período contínuo, e que me expusesse a camadas mais baixas da pilha de computação.
- Passei a me interessar pelo hype em torno do WebAssembly, e ele pareceu atraente como uma ferramenta de engenharia de plataforma na qual eu poderia projetar chamadas de sistema personalizadas.
Semblance
- Decidi escrever um interpretador WebAssembly para me familiarizar com a WebAssembly Core Specification.
- Como o objetivo do projeto era aprendizado, eu não planejava implementar todos os opcodes nem passar em toda a suíte principal de testes.
- Eu já ficaria satisfeito se conseguisse executar um "Hello, World!".
Resultado
- O projeto é considerado um grande sucesso. A cobertura de opcodes não é completa, mas ele consegue executar um programa simples de "Hello, World!".
- O código é bagunçado, lento, tem vazamentos de memória e pode ser vulnerável a módulos maliciosos, mas funciona.
- Aprendi muito sobre a especificação principal do WebAssembly e consegui sair da minha zona de conforto como engenheiro.
- Agora sinto que adquiri conhecimento suficiente sobre WebAssembly para contribuir com runtimes de nível industrial, como o Wasmtime.
1 comentários
Comentários do Hacker News
Já tive a experiência de escrever um interpretador de Wasm em Scheme, então fico feliz em ver outras pessoas escrevendo um por conta própria. Wasm é menos difícil do que parece, e eu recomendaria tentar implementar só o suficiente para se divertir, sem precisar cobrir todas as instruções
Pergunta de iniciante:
Encontrei um artigo interessante sobre interpretar WASM manualmente
Abordagem interessante, e um excelente trabalho
Acho que teria sido uma boa ideia adotar a Wasm-C-API como interface padrão
Ponto controverso:
Recomendo dar uma olhada no Orca. Pode ser uma boa oportunidade para contribuir: https://orca-app.dev
É realmente incrível ver alguém mergulhando fundo em WebAssembly e construindo um interpretador do zero
Excelente texto, e me deu motivação para voltar à implementação de WASM
Trabalho realmente muito legal