WAH: um interpretador de WebAssembly feito em um único arquivo de cabeçalho
(github.com/lifthrasiir)Fazia tempo que eu não criava uma biblioteca em C. Como o nome diz, é um interpretador de WebAssembly em que tudo está contido em um único arquivo de cabeçalho C. Claro, não é só um interpretador puro e simples:
- Suporta 100% da especificação WebAssembly 3.0. Sim, incluindo GC e tudo mais.
- O WebAssembly tem uma opção chamada perfil determinístico (
deterministic profile), que faz com que o mesmo resultado seja produzido em qualquer ambiente; esta opção é implementada aqui. Portanto, é útil para obter resultados reproduzíveis. - Há otimizações específicas de arquitetura para x86-64 e AArch64 NEON.
- Inclui os recursos necessários para fazer sandbox de código não confiável. Há suporte a
fuel metering, em que a execução consome “combustível” a cada instrução e para quando ele acaba, além de permitir interromper a execução após um certo tempo e controlar o uso de memória. - A API foi feita para permitir retomar a execução mesmo depois de uma interrupção durante o processamento.
- É possível gerar módulos WebAssembly apenas com código ou vincular vários módulos em um único módulo.
- Dá para restringir recursos tanto em tempo de compilação (reduzindo o código compilado) quanto em tempo de execução.
- Foi projetado desde o início com o objetivo de manter a ABI fixa. As estruturas de dados podem ser alocadas na stack de C, mas o layout foi fixado previamente para que a ABI não quebre mesmo com novas versões.
- Além disso, há testes em abundância, a ponto de parecer exagero, e bastante fuzz testing. (Na verdade, o fuzzer ainda está rodando neste exato momento...)
Originalmente, isso seria parte de outro projeto, então eu não pretendia levá-lo a esse nível de rigor. Mas, para rodar os testes da implementação de referência do WebAssembly (chamados de spectest), no fim foi preciso implementar tudo... e assim acabei chegando a 100%. Como foi que isso aconteceu?
Seguindo a tendência atual, o código foi escrito no começo com Gemini CLI e, da metade em diante, com Claude Code e ocasionalmente Codex; para planejamento, usei principalmente o Codex. Pessoalmente, este também acabou sendo um projeto que provou que agentes de programação conseguem lidar bastante bem até com programação de sistemas hardcore, desde que sejam bem conduzidos. Quando se faz vibe coding, até sai algo aparentemente convincente, mas nos detalhes fica uma bagunça; eu também queria um pouco que isso servisse como contraexemplo a essa avaliação.
2 comentários
Se a especificação a ser testada é clara, parece que a abordagem de montar um workflow com agentes de codificação para fazê-lo convergir funciona bem. Isso também me faz lembrar de casos como vinext e pretext.
Mudando de assunto, será que vocês poderiam dar uma olhada no serviço de CSS do jornal...? Mesmo depois de bastante tempo, ainda há muitos bons textos que eu gostaria de indicar para as pessoas ao meu redor, mas ao acessar pelo desktop o CSS não carrega T_T
O servidor que servia o CSS caiu
ㅠㅠ; desculpem, mas por enquanto usem a Wayback Machine...