WASM
#WebAssembly
WebAssembly (WASM) est un format binaire portable conçu pour être exécuté dans les navigateurs web. Il permet d'exécuter du code à des vitesses proches du natif, tout en restant sécurisé et sandboxé.
#Format binaire portable
WASM est conçu pour être un format de compilation cible pour des langages comme C, C++, Rust, etc. Il est indépendant de la plateforme et peut être exécuté dans n'importe quel navigateur moderne.
#Exemple de module WASM : Fibonacci
Voici un exemple de module WASM qui calcule le n-ième nombre de la suite de Fibonacci.
#Code source (WAT - WebAssembly Text)
1(module2 (func $fib (param $n i32) (result i32)3 (if (i32.lt_s (local.get $n) (i32.const 2))4 (then5 (local.get $n)6 )7 (else8 (i32.add9 (call $fib (i32.sub (local.get $n) (i32.const 1)))10 (call $fib (i32.sub (local.get $n) (i32.const 2)))11 )12 )13 )14 )
#Explication
- La fonction
$fib
prend un paramètren
de typei32
(entier 32 bits) et retourne uni32
. - Si
n
est inférieur à 2, elle retournen
directement. - Sinon, elle fait un appel récursif à
$fib(n-1)
et$fib(n-2)
et retourne leur somme.
#Exécution dans le navigateur
Le module WASM est compilé et instancié dans le navigateur. Une fois chargé, ses fonctions exportées peuvent être appelées depuis JavaScript.
#Exemple JavaScript
1// Charger et instancier le module WASM2WebAssembly.instantiateStreaming(fetch('fib.wasm'))3 .then(result => {4 const fib = result.instance.exports.fib;5 console.log(fib(10)); // Affiche 556 });
#Playground interactif
Ce playground exécute un module WASM qui renvoie 42
. Vous pouvez modifier le code WAT et voir le résultat en temps réel.
#Avantages de WebAssembly
- Performance : Exécution à des vitesses proches du natif.
- Sécurité : Exécution sandboxée dans le navigateur.
- Portabilité : Fonctionne dans tous les navigateurs modernes.
- Interopérabilité : Peut interagir avec JavaScript et le DOM.
#Limitations
- Complexité : Écrire directement en WAT est complexe. Les compilateurs sont généralement utilisés.
- Débogage : Le débogage de WASM peut être plus difficile que le JavaScript.
- Taille : Les modules WASM peuvent être volumineux.
#Exercice : Module WASM pour le carré d'un nombre
Créez un module WASM qui exporte une fonction square(x)
qui retourne le carré de x
.
#Instructions
- Écrivez le code WAT pour une fonction
square
qui prend un paramètrei32
et retourne son carré. - Utilisez l'instruction
i32.mul
pour effectuer la multiplication. - Exportez la fonction pour qu'elle puisse être appelée depuis JavaScript.
#Exemple de code WAT
1(module2 (func $square (param $x i32) (result i32)3 local.get $x4 local.get $x5 i32.mul)6 (export "square" (func $square))7)
#Compilation et exécution
Compilez ce code WAT en WASM et testez-le dans le navigateur avec le playground interactif ci-dessous.
#Playground interactif
- Jeux vidéos dans le navigateur.
- Éditeurs de photo/vidéo en ligne.
- Applications scientifiques et de calcul.
- Remplacement de plugins (Flash, Silverlight).