GraalWasm

Java向けのハイパフォーマンス埋め込み可能なWebAssemblyランタイム

メリット

interoperability icon

Java向けのWasm

WebAssemblyモジュールと関数を直接Javaでロードして利用できます
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. wat2wasmを使用して、WebAssemblyモジュールを作成します


  (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クイックスタート

このスタータープロジェクトで始めましょう