Un artefact WebImage avec backend = "wasm-gc" compile Java ou Kotlin en WasmGC : un module
WebAssembly dont les objets vivent dans le tas à ramasse-miettes du navigateur, accompagné d’un chargeur JavaScript qui
le récupère et le démarre. Pour exécuter un fichier .wasm existant avec Elide, voir WebAssembly.
Prérequis
- Binaryen 119 ou ultérieur, avec
wasm-asdans lePATHau moment du build. - Du code conforme aux exigences de Native Image : métadonnées d’accessibilité pour la réflexion, les ressources et les proxys ; aucune dépendance native.
Construire
hello-wasm/
elide.pkl
src/main/java/Hello.javapublic class Hello {
public static void main(String[] args) {
System.out.println("Hello from WasmGC");
}
}amends "elide:project.pkl"
import "elide:Jvm.pkl" as jvm
import "elide:NativeImage.pkl" as nativeImage
name = "hello-wasm"
artifacts {
["app-jar"] = new jvm.Jar {
sources { "main" }
}
["web"] = new nativeImage.WebImage {
from { "app-jar" }
name = "hello"
entrypoint = "Hello"
backend = "wasm-gc"
runtime = "browser"
}
}elide buildLa sortie va dans .dev/artifacts/native-image/ :
| Fichier | À déployer | Taille d’un hello world |
|---|---|---|
hello.js | Oui : le chargeur. | 110 Ko |
hello.js.wasm | Oui : le module. | 1,3 Mo (480 Ko compressé avec gzip) |
hello.js.wat | Non : forme texte, pour l’inspection. | 32 Mo |
hello.js.map | Facultatif : produit avec sourceMap = true. |
| Propriété | Valeur pour le navigateur |
|---|---|
backend | "wasm-gc" (par défaut). |
runtime | "browser", ou "generic" pour conserver la prise en charge de Node dans le même chargeur. |
autoRun | true (par défaut) exécute main au chargement de hello.js. |
Autres propriétés et options du compilateur : WebImage.
Le charger dans une page
Placez index.html à côté du bundle :
<!doctype html>
<html lang="en">
<meta charset="utf-8" />
<title>Hello WasmGC</title>
<body>
<script src="./hello.js"></script>
</body>
</html>elide dev --no-tui --port 8000 .dev/artifacts/native-imageOuvrez http://localhost:8000/ ; Hello from WasmGC s’affiche dans la console du navigateur.
- Le chargeur demande le module à sa propre URL suivie de
.wasm: gardezhello.jsethello.js.wasmdans le même répertoire. - Chargez-le avec un
<script>classique. Avectype="module", le chargeur demande à la place l’URL de la page suivie de.wasm. - Servez-le en HTTP ou HTTPS ; les URL
file://ne fonctionnent pas. System.outécrit dans la console du navigateur.
Pour déployer, copiez hello.js, hello.js.wasm et la page sur n’importe quel hébergement statique.
Prise en charge des navigateurs
Les bundles WasmGC nécessitent le ramasse-miettes de WebAssembly et la gestion des exceptions avec exnref :
| Navigateur | Version minimale |
|---|---|
| Chrome, Edge | 137 |
| Firefox | 131 |
| Safari | 18.4 |
Un navigateur plus ancien rejette le module avec une CompileError au chargement de la page. Pour les hôtes sans
WasmGC, voir Edge WASM.