Node.js 与 WebAssembly

Contributeurs
Table des matières

WebAssembly est un langage de type assembleur très performant qui peut être compilé à partir d'une myriade de langages, notamment C/C++, Rust et AssemblyScript. À l'heure actuelle, il est pris en charge par Chrome, Firefox, Safari, Edge et Node.js !

La spécification WebAssembly détaille deux formats de fichiers, un format binaire appelé module WebAssembly avec une extension .wasm et une représentation textuelle correspondante appelée format WebAssembly Text avec une extension .wat.

Concepts clés

  • Module - Un binaire WebAssembly compilé, c'est-à-dire un fichier .wasm.
  • Mémoire - Un ArrayBuffer redimensionnable.
  • Table - Un tableau redimensionnable de références non stockées en mémoire.
  • Instance - Une instanciation d'un module avec sa mémoire, sa table et ses variables.

Afin d'utiliser WebAssembly, vous avez besoin d'un fichier binaire .wasm et d'un ensemble d'API pour communiquer avec WebAssembly. Node.js fournit les API nécessaires via l'objet global WebAssembly.

JS

Génération de modules WebAssembly

Il existe de nombreuses méthodes pour générer des fichiers binaires WebAssembly, notamment :

  • écrire WebAssembly (.wat) à la main et le convertir au format binaire à l'aide d'outils tels que wabt.
  • Utilisation de emscripten avec une application C/C++.
  • Utilisation de wasm-pack avec une application Rust
  • Utilisation de AssemblyScript si vous préférez une expérience de type TypeScript.

Certains de ces outils génèrent non seulement le fichier binaire, mais aussi le code JavaScript "glue" et les fichiers HTML correspondants à exécuter dans le navigateur.

Comment l'utiliser

Une fois que vous avez un module WebAssembly, vous pouvez utiliser l'objet WebAssembly de Node.js pour l'instancier.

JS

Interaction avec le système d'exploitation

Les modules WebAssembly ne peuvent pas accéder directement aux fonctionnalités du système d'exploitation par eux-mêmes. Un outil tiers Wasmtime peut être utilisé pour accéder à cette fonctionnalité. Wasmtime utilise l'API WASI pour accéder aux fonctionnalités du système d'exploitation.

Ressources