GraalWasm

適用於 Java 的高效能可嵌入 WebAssembly 執行環境

優點

interoperability icon

適用於 Java 的 Wasm

直接在 Java 中載入和使用 WebAssembly 模組和函式
compatibility icon

WebAssembly 1.0 支援

完整的 WebAssembly 1.0 相容性和 WASI 功能擴展
high performance icon

JVM 上最快的 Wasm

Graal JIT 編譯 WebAssembly 以達到原生程式碼的速度
integration icon

JavaScript 整合

簡化使用具有 JavaScript 包裝函式的 WebAssembly 模組
pure java icon

100% Java

以純 Java 編寫,不含原生相依性

如何開始

1. 從 Maven Central 新增 GraalWasm 作為相依性


  <dependency>
    <groupId>org.graalvm.polyglot</groupId>
    <artifactId>polyglot</artifactId> 
    <version>24.1.1</version>
  </dependency>
  <dependency>
    <groupId>org.graalvm.polyglot</groupId>
    <artifactId>wasm</artifactId> 
    <version>24.1.1</version>
    <type>pom</type>
  </dependency>
  


  implementation("org.graalvm.polyglot:polyglot:24.1.1")
  implementation("org.graalvm.polyglot:wasm:24.1.1")
    

2. 建立 WebAssembly 模組,例如使用 wat2wasm


  (module
    (func (export "addTwo") (param i32 i32) (result i32)
      local.get 0
      local.get 1
      i32.add))

3. 在 Java 中嵌入 WebAssembly 模組


  import java.net.URL;

  import org.graalvm.polyglot.Context;
  import org.graalvm.polyglot.Source;
  import org.graalvm.polyglot.Value;

  try (Context context = Context.create()) {
      URL wasmFile = Main.class.getResource("add-two.wasm");
      String moduleName = "main";
      context.eval(Source.newBuilder("wasm", wasmFile).name(moduleName).build());
      Value addTwo = context.getBindings("wasm").getMember(moduleName).getMember("addTwo");
      System.out.println("addTwo(40, 2) = " + addTwo.execute(40, 2));
  }
                

GraalWasm 快速開始

立即使用此入門專案

與我們聯繫