Saltar al contenido

Browser WASM

Compile Java o Kotlin a WasmGC con Elide: genere un módulo WebAssembly y un cargador JavaScript, cárguelo desde una página web y compruebe la compatibilidad de los navegadores.

En esta página

Un artefacto WebImage con backend = "wasm-gc" compila Java o Kotlin a WasmGC: un módulo WebAssembly cuyos objetos viven en el heap con recolección de basura del navegador, más un cargador JavaScript que lo descarga y lo inicia. Para ejecutar un archivo .wasm existente con Elide, consulte WebAssembly.

Requisitos previos

  • Binaryen 119 o posterior, con wasm-as en el PATH durante la compilación.
  • Código que cumpla los requisitos de Native Image: metadatos de alcanzabilidad para reflexión, recursos y proxies; sin dependencias nativas.

Compilar

hello-wasm/
  elide.pkl
  src/main/java/Hello.java
public 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

La salida va a .dev/artifacts/native-image/:

ArchivoDesplegarTamaño de un hola mundo
hello.jsSí: el cargador.110 KB
hello.js.wasmSí: el módulo.1,3 MB (480 KB con gzip)
hello.js.watNo: forma de texto, para inspección.32 MB
hello.js.mapOpcional: se genera con sourceMap = true.
PropiedadValor para el navegador
backend"wasm-gc" (el predeterminado).
runtime"browser", o "generic" para mantener la compatibilidad con Node en el mismo cargador.
autoRuntrue (por defecto) ejecuta main cuando se carga hello.js.

Otras propiedades y opciones del compilador: WebImage.

Cargarlo en una página

Coloque index.html junto al paquete:

<!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

Abra http://localhost:8000/; Hello from WasmGC aparece en la consola del navegador.

  • El cargador solicita el módulo en su propia URL más .wasm, así que mantenga hello.js y hello.js.wasm en el mismo directorio.
  • Cárguelo con un <script> clásico. Con type="module" el cargador solicita en su lugar la URL de la página más .wasm.
  • Sírvalo por HTTP o HTTPS; las URL file:// no funcionan.
  • System.out escribe en la consola del navegador.

Para desplegar, copie hello.js, hello.js.wasm y la página a cualquier alojamiento estático.

Compatibilidad de navegadores

Los paquetes WasmGC necesitan la recolección de basura de WebAssembly y el manejo de excepciones con exnref:

NavegadorVersión mínima
Chrome, Edge137
Firefox131
Safari18.4

Un navegador más antiguo rechaza el módulo con un CompileError al cargar la página. Para hosts sin WasmGC, consulte Edge WASM.

¿Te resultó útil esta página?