Module WebAssembly avec une seule variable globale

Exemple simple d’un module WebAssembly avec une variable globale i32 initialisée à 42 et une fonction exportée pour lire sa valeur.

Brève Introduction

Module WebAssembly avec une seule variable globale (wasm)
DESCRIPTION :
Exemple de base d'un module WebAssembly qui définit une variable globale entière, l'initialise et fournit une fonction pour la lire.

NOTES SUPPLÉMENTAIRES :
Cet exemple est conçu pour les débutants absolus et montre comment définir et utiliser une variable globale en WebAssembly. Le code est prêt à être compilé et chargé dans un environnement WebAssembly.

EXPLICATIONS :
- La section '(global $g (mut i32) (i32.const 42))' définit une variable globale mutable de type i32 initialisée à 42.
- La fonction '(func (export "leggiGlobale") (result i32) global.get $g)' renvoie la valeur de la variable globale.
- Le mot-clé 'export' rend la fonction accessible depuis l'extérieur du module WebAssembly.
- Le format WAT est un format textuel qui représente le module WebAssembly et peut être compilé en binaire avec des outils comme wat2wasm.

Code d'Exemple : wasm

(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
  )
)
×
×
×
Veux-tu régénérer la réponse ?
×
Exporter le chat
Choisissez le format d'export
⏳ Generazione PDF in corso…
Allegati
×
⚠️ Vous êtes sur le point de fermer le chat et de passer au générateur d’images. Si vous n’êtes pas connecté, vous perdrez notre conversation. Confirmez-vous ?
👁 Tu consultes une discussion partagée en mode temporaire. Elle ne sera pas enregistrée.
💬
×
Prompts enregistrés
×
Note privée
×
Étiquette
×
Rechercher dans toutes les discussions
×
Vos insights
Analyse en cours…
×
Préférences IA
Nom de l'assistant 30
Longueur des réponses
Modèle IA
Réponses structurées
Inclure des exemples
Utiliser des emojis
Guide-moi, ne résous pas Des indices et des questions plutôt que la réponse toute faite
Plus de réglages →
×
Partager cette discussion
Toute personne ouvrant ce lien pourra consulter la discussion ou l'ajouter à son profil comme discussion personnelle.
⚠️ Attention : les pièces jointes de la discussion seront également partagées. Qui l'ajoutera recevra une copie des fichiers dans son dossier.
Discussion partagée
Quelqu'un a partagé une discussion avec toi. Veux-tu seulement la consulter ou l'ajouter à tes discussions ?
⚠️ Attention : les pièces jointes de la discussion seront également partagées. Qui l'ajoutera recevra une copie des fichiers dans son dossier.
×

📌 Messages enregistrés

Chargement...

×

Historique des discussions

programmes-exemples · HISTORIQUE DU CHAT

Chargement...

Préférences IA

×
  • 🟢 BasiqueRéponses rapides et essentielles pour étudier
  • 🔵 MoyenQualité supérieure pour étude et programmation
  • 🟣 AvancéRaisonnement complexe et analyses détaillées
Expliquer les étapes

Exemple Complet

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>

Qu'est-ce qu'il faut ?

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).

Sujets Similaires

Bonjour WebAssembly : votre premier module minimal
Exemple minimal de module WebAssembly en WAT exportant une fonction somma pour additionner deux entiers, idéal pour débutants en WebAssembly.
Affichage d’un message avec WebAssembly et JavaScript
Exemple simple montrant comment afficher un message avec WebAssembly et JavaScript, idéal pour débutants, sans dépendances externes.
Somme de deux nombres en WebAssembly
Exemple complet en WebAssembly pour additionner deux nombres entiers avec un module WAT simple, idéal pour débutants en WebAssembly.
Mini calculatrice d’addition en WebAssembly
Mini calculatrice d’addition en WebAssembly : additionnez deux entiers avec un code WAT simple, compilable et exécutable dans tout environnement WebAssembly.
Retour d’une constante depuis un module WebAssembly
Exemple simple de module WebAssembly en WAT exportant une fonction retournant une constante entière, avec intégration JavaScript expliquée.
Conversion simple int → float en WebAssembly
Exemple simple de conversion d’un entier en float 32 bits en WebAssembly avec code WAT et JavaScript, idéal pour débutants en wasm.
Fonction de multiplication de base en WebAssembly
Exemple complet d’une fonction WebAssembly en WAT qui multiplie deux entiers 32 bits, avec commentaires en italien pour débutants.
Appeler une fonction WebAssembly depuis JavaScript
Exemple simple pour appeler une fonction WebAssembly (WASM) depuis JavaScript, additionnant deux entiers avec explications détaillées pour débutants.