WebAssembly - Converter WAT em WASM

No capítulo anterior, vimos como escrever código em .watou seja, formato de texto WebAssembly. O formato de texto WebAssembly não funcionará diretamente dentro do navegador e você precisa convertê-lo em formato binário, ou seja, WASM para funcionar dentro do navegador.

WAT para WASM

Vamos converter .WAT em .WASM.

O código que vamos usar é o seguinte -

(module 
   (func $add (param $a i32) (param $b i32) (result i32) 
      get_local $a 
      get_local $b 
      i32.add
   ) 
   (export "add" (func $add)) 
)

Agora vá para WebAssembly Studio, que está disponível em https://webassembly.studio/.

Você deve ver algo assim, quando clicar no link -

Clique em Esvaziar projeto Wat e clique no botão Criar na parte inferior.

Isso o levará a um projeto vazio, conforme mostrado abaixo -

Clique em main.wat e substitua o código existente pelo seu e clique no botão Salvar.

Depois de salvar, clique na construção para converter para .wasm -

Se a compilação for bem-sucedida, você deverá ver o arquivo .wasm criado conforme mostrado abaixo -

Baixe o arquivo main.wasm e use-o dentro do seu arquivo .html para ver a saída conforme mostrado abaixo.

Por exemplo - add.html

<!doctype html>
<html>
   <head>
      <meta charset="utf-8">
      <title>WebAssembly Add Function</title>
   </head>
   <body>
      <script> 
         let sum; 
         fetch("main.wasm")
            .then(bytes => bytes.arrayBuffer()) 
            .then(mod => WebAssembly.compile(mod)) .then(module => {
            
            return new WebAssembly.Instance(module) 
         })
         .then(instance => {
            sum = instance.exports.add(10,40); 
            console.log("The sum of 10 and 40 = " +sum); 
         }); 
      </script>
   </body>
</html>

A função add é exportada conforme mostrado no código. Os parâmetros passados ​​são 2 valores inteiros 10 e 40 e retorna a soma deles.

Resultado

A saída é exibida no navegador.