Node.js com a WebAssembly

Descubra o porquê da WebAssembly ser uma ferramenta impressionante e aprenda a usá-la sozinho.

Autores do Artigo
Tabela de Conteúdos

WebAssembly é uma linguagem de alto desempenho parecida com a linguagem Assembly que pode ser compilada a partir de várias linguagens, incluindo C, C++, Rust, e AssemblyScript. Atualmente, é suportada pelo Chrome, Firefox, Safari, Edge, e a Node.js!

A especificação da WebAssembly detalhe dois formatos de ficheiro, um formato binário chamado de Módulo de WebAssembly com a extensão .wasm e a representação correspondente de texto chamada de formato de Texto de WebAssembly com a extensão .wat.

Conceitos Chaves

  • Módulo - Um binário de WebAssembly compilado, por exemplo um ficheiro .wasm.
  • Memória - Um ArrayBuffer redimensionável.
  • Tabela - Um arranjo redimensionável de referências tipadas não guardadas na Memória.
  • Instância - Uma instanciação de um Módulo com sua Memória, Tabela e variáveis.

Para usares a WebAssembly, precisas de um ficheiro binário .wasm e um conjunto de APIs para comunicar com a WebAssembly. A Node.js fornece as APIs necessárias através do objeto global WebAssembly.

Gerando Módulos de WebAssembly

Existem vários métodos disponíveis para gerar ficheiros binários de WebAssembly incluindo:

  • Escrevendo o WebAssembly (.wat) a mão e convertendo-o para formato binário usando ferramentas tais como wabt.
  • Usando emscripten com uma aplicação de C ou C++.
  • Usando wasm-pack com uma aplicação de Rust.
  • Usando AssemblyScript se preferires uma experiência parecida com a da TypeScript.

Algumas destas ferramentas geram não apenas o ficheiro binário, mas o código "cola" de JavaScript e os ficheiros de HTML correspondentes para executarem no navegador.

Como Usá-lo

Uma vez que tens um módulo de WebAssembly, podes usar o objeto WebAssembly da Node.js para instância-lo:

Interagindo com o Sistema Operacional

Os módulos de WebAssembly não podem por si mesmos acessar as funcionalidade do sistema operacional diretamente. Uma ferramenta de terceiro Wasmtime pode ser usada para acessar estas funcionalidades. A wasmtime utiliza a API WASI para acessar as funcionalidades do sistema operacional.

Recursos