第一個執行WebAssembly的Java庫:Wasmer JNI

banq發表於2020-05-15

Wasmer JNI是一個可以直接在Java中執行WebAssembly的庫。它嵌入了WebAssembly執行時Wasmer,Wasmer JNI開源專案是:https://github.com/wasmerio/java-ext-wasm

讓我們​​從一個簡單的Rust程式開始,將其編譯為WebAssembly,然後在Java中執行:

#[no_mangle]
pub extern fn sum(x: i32, y: i32) -> i32 {
    x + y
}

彙編WebAssembly後,我們得到這樣一個檔案:這裡,命名為simple.wasm。

以下Java程式sum通過傳遞5和37作為引數來執行匯出的函式:

import org.wasmer.Instance;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

class SimpleExample {
    public static void main(String[] args) throws IOException {
        // Read the WebAssembly bytes.
        byte[] bytes = Files.readAllBytes(Paths.get("simple.wasm"));

        // Instantiate the WebAssembly module.
        Instance instance = new Instance(bytes);

        // Get the `sum` exported function, call it by passing 5 and 37, and get the result.
        Integer result = (Integer) instance.exports.getFunction("sum").apply(5, 37)[0];

        assert result == 42;

        instance.close();
    }
}

我們已經用Java成功執行了一個Rust程式,該程式首先需要編譯為WebAssembly。這非常簡單。該API與標準JavaScript API或我們為PHP,Python,Go,Ruby等設計的其他API非常相似。

 

相關文章