Node.js 与 WebAssembly
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.