Артефакт WebImage з backend = "wasm-gc" компілює Java або Kotlin у WasmGC: модуль
WebAssembly, об’єкти якого живуть у купі браузера зі збиранням сміття, і завантажувач на JavaScript, що завантажує та
запускає модуль. Як запустити наявний файл .wasm в Elide, описано на сторінці WebAssembly.
Вимоги
- Binaryen 119 або новіший, з
wasm-asуPATHпід час збирання. - Код, що відповідає вимогам Native Image: метадані досяжності для рефлексії, ресурсів і проксі; без нативних залежностей.
Збирання
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 buildРезультат потрапляє до .dev/artifacts/native-image/:
| Файл | Розгортати | Розмір hello world |
|---|---|---|
hello.js | Так: завантажувач. | 110 КБ |
hello.js.wasm | Так: модуль. | 1,3 МБ (480 КБ у gzip) |
hello.js.wat | Ні: текстова форма для перегляду. | 32 МБ |
hello.js.map | За бажанням: створюється з sourceMap = true. |
| Властивість | Значення для браузера |
|---|---|
backend | "wasm-gc" (за замовчуванням). |
runtime | "browser" або "generic", щоб зберегти підтримку Node у тому самому завантажувачі. |
autoRun | true (за замовчуванням) запускає main під час завантаження hello.js. |
Інші властивості та параметри компілятора: WebImage.
Завантаження на сторінці
Покладіть index.html поруч із бандлом:
<!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-imageВідкрийте http://localhost:8000/; Hello from WasmGC з’явиться в консолі браузера.
- Завантажувач запитує модуль за власною URL-адресою з додаванням
.wasm, тому тримайтеhello.jsіhello.js.wasmв одному каталозі. - Підключайте його класичним
<script>. Зtype="module"завантажувач натомість запитує URL-адресу сторінки з додаванням.wasm. - Роздавайте файли через HTTP або HTTPS; адреси
file://не працюють. System.outпише в консоль браузера.
Для розгортання скопіюйте hello.js, hello.js.wasm і сторінку на будь-який статичний хостинг.
Підтримка браузерами
Бандлам WasmGC потрібні збирання сміття WebAssembly та обробка винятків з exnref:
| Браузер | Мінімальна версія |
|---|---|
| Chrome, Edge | 137 |
| Firefox | 131 |
| Safari | 18.4 |
Старіший браузер відхиляє модуль із CompileError під час завантаження сторінки. Для хостів без WasmGC див.
Edge WASM.