Linguagem orientada a aspetos para transformação de Webassembly - Rodrigues, João Paulo Mendes (2022)
A execução de um programa de Webassembly numa máquina cliente implica o descarregamento do código do servidor. Isto significa que qualquer alteração que o cliente pretenda fazer no código deve ser feita diretamente no código compilado. Estas transformações podem ser motivadas por diversas razões, tais como: reparação imediata de erros/problemas encontrados em produção, neutralização de código potencialmente malicioso, melhorias de desempenho, etc. Outras aplicações de transformações diretas de código binário Webassembly noutros contextos incluem a instrumentação do código, a geração de um conjunto de variações a partir do mesmo código binário, por exemplo, com variações otimizadas para diferentes arquiteturas (no cliente ou servidor) – sem recompilação do programa, uma vez que existe sempre a versão base (compilada a partir do código fonte), e um conjunto de versões relativas às variações - ou a monitorização do desempenho das atividades realizadas pelo programa. Com isto, o trabalho desenvolvido neste documento consiste numa ferramenta para manipulação de código WebAssembly que permite a realização de pesquisas no código, e a sua substituição por um conjunto de instruções definidas pelo programador. A ferramenta tem o nome de WasmManipulator e seguirá uma abordagem orientada a aspetos para alcançar a flexibilidade e simplicidade pretendidas. Para além disso, dado que rotinas de Webassembly podem ser fortemente interdependentes do código JavaScript que as usa, a ferramenta possui determinadas funcionalidades que permitem tirar partido e explorar essa dependência. Isto inclui a definição de tipos adicionais no código WASM, e interpretação/execução de expressões em tempo de execução. O WasmManipulator foi desenvolvido com recurso à linguagem Go, e recorreu a outras tecnologias e ferramentas para se auxiliar no seu desenvolvimento, tais como, YAML, WABT e Comby. Para implementar o módulo JavaScript utilizou-se o TypeScript, que juntamente com o GulpJS, geraram o respetivo código. Com a implementação de todos os requisitos estabelecidos para a ferramenta, validados através da utilização de cenários de uso típicos em código disponível publicamente, dão-se por atingidos os objetivos previstos para a ferramenta.