Exemple simple d’un module WebAssembly avec une variable globale i32 initialisée à 42 et une fonction exportée pour lire sa valeur.
(module
;; Définition d'une variable globale mutable de type i32 initialisée à 42
(global $g (mut i32) (i32.const 42))
;; Fonction exportée qui renvoie la valeur de la variable globale
(func (export "leggiGlobale") (result i32)
global.get $g
)
)html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Exemple WebAssembly avec variable globale</title>
</head>
<body>
<h1>Exemple WebAssembly avec variable globale</h1>
<button id="btn">Lire la variable globale</button>
<p>Valeur globale: <span id="valeur">?</span></p>
<script>
// Le module WebAssembly en texte (WAT) tel que fourni
const wasmCode = `(module
;; Définition d'une variable globale mutable de type i32 initialisée à 42
(global $g (mut i32) (i32.const 42))
;; Fonction exportée qui renvoie la valeur de la variable globale
(func (export "leggiGlobale") (result i32)
global.get $g
)
)`;
// Fonction pour compiler le module WAT en binaire
async function compileWasmFromWat(wat) {
// Utilisation de l'API WebAssembly Text Format (WAT) n'est pas native dans tous les navigateurs,
// donc on utilise un outil externe (comme wat2wasm) ou un service en ligne.
// Ici, pour l'exemple, on utilise la fonction WebAssembly.compileStreaming si on avait un fichier wasm.
// Comme on a du WAT, on doit le convertir en wasm binaire.
// Pour simplifier cet exemple, on va utiliser un outil en ligne via fetch.
// Ici on utilise un service public pour convertir WAT en wasm binaire
const response = await fetch('https://wasmexplorer-service.herokuapp.com/compile', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({source: wat, type: 'wat'})
});
const result = await response.json();
if (result.error) throw new Error(result.error);
const binary = Uint8Array.from(atob(result.binary), c => c.charCodeAt(0));
return binary;
}
document.getElementById('btn').addEventListener('click', async () => {
try {
const binary = await compileWasmFromWat(wasmCode);
const module = await WebAssembly.compile(binary);
const instance = await WebAssembly.instantiate(module);
const val = instance.exports.leggiGlobale();
document.getElementById('valeur').textContent = val;
} catch (e) {
alert('Erreur lors de l\'exécution du WebAssembly: ' + e.message);
}
});
</script>
</body>
</html>Module WebAssembly écrit en texte WAT (format texte WebAssembly).
Variable globale de type i32 (entier 32 bits) initialisée à 42.
Fonction exportée 'leggiGlobale' qui renvoie la valeur de la variable globale.
Aucune dépendance externe requise, peut être compilé avec des outils standard comme wat2wasm.
Configuration : le module est autonome et peut être chargé dans n'importe quel environnement supportant WebAssembly.
Arduino : non applicable dans cet exemple, car le code est du WebAssembly pur et n'interagit pas avec le matériel.
Logiciel : pour compiler le code WAT en binaire wasm, vous pouvez utiliser l'outil 'wat2wasm' disponible dans le WebAssembly Binary Toolkit (wabt).