Артефакт 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; URL вида
file://не работают. System.outпишет в консоль браузера.
Для развёртывания скопируйте hello.js, hello.js.wasm и страницу на любой статический хостинг.
Поддержка браузерами
Бандлам WasmGC нужны сборка мусора WebAssembly и обработка исключений с exnref:
| Браузер | Минимальная версия |
|---|---|
| Chrome, Edge | 137 |
| Firefox | 131 |
| Safari | 18.4 |
Более старый браузер отклоняет модуль с CompileError при загрузке страницы. Для хостов без WasmGC см.
Edge WASM.