We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
一直使用 lunar,现在有看到 6tail 积极迭代新版的 typme4ts,很是感动,尤其是维护多语言版本是个非常消耗时间的工作,为了让 6tali 的精力聚焦到核心的算法上,提议使用 rust/c++ 编写核心算法,编译成 wasm 后提供,目前主流语言都支持直接加载 wasm 使用(或者提供薄薄的一层语言绑定),这样可以减少多语言维护压力,保持核心算法一致性,提升性能。
Rust/C++ -> wasm -> js/ts/java/go/python/c#
以下是使用 JavaScript、Java、Go 和 Python 调用 WebAssembly (WASM) 模块的代码示例。假设我们有一个简单的 WASM 模块 example.wasm,它导出一个函数 add,用于将两个数字相加。
<!DOCTYPE html> <head> <meta charset="utf-8"> <title>WebAssembly Add example</title> <style> div { font-size : 30px; text-align : center; color:blue; } </style> </head> <body> <div id="textcontent"></div> <script> let sum; fetch("add.wasm") .then((response) => response.arrayBuffer()) .then((bytes) => WebAssembly.instantiate(bytes)) .then((results) => { sum = results.instance.exports.add(13, 12); console.log("The result of 13 + 12 = " +sum); document.getElementById("textcontent").innerHTML = "The result of 13 + 12 = " +sum; }); </script> </body> </html>
const fs = require('fs'); const wasmBuffer = fs.readFileSync('example.wasm'); WebAssembly.instantiate(wasmBuffer).then(result => { const add = result.instance.exports.add; console.log(add(2, 3)); // 输出: 5 });
Java 可以使用 wasmtime-java 库来调用 WASM。
首先,添加依赖:
<dependency> <groupId>org.wasmtime</groupId> <artifactId>wasmtime</artifactId> <version>0.30.0</version> </dependency>
然后,编写代码:
import org.wasmtime.*; public class WasmExample { public static void main(String[] args) throws Exception { Engine engine = new Engine(); Module module = Module.fromFile(engine, "example.wasm"); Store<Void> store = new Store<>(engine); Instance instance = new Instance(store, module, new Linker(store).link()); Func add = instance.getFunc(store, "add").orElseThrow(); int result = add.invoke(store, 2, 3).orElseThrow(); System.out.println(result); // 输出: 5 } }
Go 可以使用 wasmer-go 库来调用 WASM。
首先,安装库:
go get github.com/wasmerio/wasmer-go/wasmer
package main import ( "fmt" "github.com/wasmerio/wasmer-go/wasmer" ) func main() { wasmBytes, _ := wasmer.ReadBytes("example.wasm") store := wasmer.NewStore(wasmer.NewEngine()) module, _ := wasmer.NewModule(store, wasmBytes) importObject := wasmer.NewImportObject() instance, _ := wasmer.NewInstance(module, importObject) add := instance.Exports.GetFunction("add") result, _ := add(2, 3) fmt.Println(result) // 输出: 5 }
Python 可以使用 wasmer-python 库来调用 WASM。
pip install wasmer
from wasmer import engine, store, module, instance # 加载 WASM 文件 with open('example.wasm', 'rb') as f: wasm_bytes = f.read() # 创建引擎和存储 engine = engine.JIT() store = store.Store(engine) # 编译模块 module = module.Module(store, wasm_bytes) # 实例化模块 instance = instance.Instance(module) # 调用导出的函数 add = instance.exports.add result = add(2, 3) print(result) # 输出: 5
这些示例展示了如何在不同语言中调用 WASM 模块。请确保你已经安装了相应的库,并且 WASM 模块 example.wasm 存在于你的工作目录中。
The text was updated successfully, but these errors were encountered:
非常感谢,tyme已经有tyme4j,tyme4net,tyme4rust,tyme4go,tyme4php,tyme4swift也在路上了,wasm很美好,但我感觉驾驭不住,因为说实话我自己都很讨厌rust的很多设计理念,更不敢保证转出来的东西能变得易用。当然,我也会去尝试wasm方面的研究。
Sorry, something went wrong.
👍 能编译成 wasm 的不止 rust,还有其他不少语言,不过可以等熟悉后考虑,期待后面第三代等见到~
No branches or pull requests
一直使用 lunar,现在有看到 6tail 积极迭代新版的 typme4ts,很是感动,尤其是维护多语言版本是个非常消耗时间的工作,为了让 6tali 的精力聚焦到核心的算法上,提议使用 rust/c++ 编写核心算法,编译成 wasm 后提供,目前主流语言都支持直接加载 wasm 使用(或者提供薄薄的一层语言绑定),这样可以减少多语言维护压力,保持核心算法一致性,提升性能。
以下是使用 JavaScript、Java、Go 和 Python 调用 WebAssembly (WASM) 模块的代码示例。假设我们有一个简单的 WASM 模块 example.wasm,它导出一个函数 add,用于将两个数字相加。
JavaScript(浏览器)
JavaScript(node.js)
Java
Java 可以使用 wasmtime-java 库来调用 WASM。
首先,添加依赖:
然后,编写代码:
Go
Go 可以使用 wasmer-go 库来调用 WASM。
首先,安装库:
然后,编写代码:
Python
Python 可以使用 wasmer-python 库来调用 WASM。
首先,安装库:
然后,编写代码:
这些示例展示了如何在不同语言中调用 WASM 模块。请确保你已经安装了相应的库,并且 WASM 模块 example.wasm 存在于你的工作目录中。
The text was updated successfully, but these errors were encountered: