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. 将 WebAssembly 模块嵌入到 Java 中


  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 快速入门

立即使用此入门项目

联系我们