11个版本
0.2.7 | 2022年9月21日 |
---|---|
0.2.6 | 2022年9月15日 |
0.2.5 | 2022年6月29日 |
0.2.3 | 2022年2月14日 |
0.1.1 | 2021年12月24日 |
#490 in WebAssembly
37 每月下载量
用于 massa-sc-runtime
31KB
520 代码行
AssemblyScript绑定
目前,此绑定库与Wasmer兼容,我们正在研究与WasmTime的兼容性。使用这些辅助工具可以读取、写入并使用从AssemblyScript编译的WebAssembly模块中的分配。
读取
我们提供了两个辅助工具,StringPtr
和 BufferPtr
。字符串对应AssemblyScript中的字符串,而 BufferPtr
对应 ArrayBuffer
。如果您想读取本地函数的返回值,这非常简单
use as_ffi_bindings::{Read, StringPtr};
let instance = Instance::new(&module, &import_object)?;
let memory = instance.exports.get_memory("memory").expect("get memory");
// Instanciation of your wasmer things
let get_string = instance
.exports
.get_native_function::<(), StringPtr>("getString")?;
// Get native function in your module
let str_ptr: StringPtr = get_string.call()?;
// Get directly a string pointer
let string: String = str_ptr.read(memory)?;
注意:如果您选择使用 as_ffi_bindings::Env
,在您使用env(使用Wasmer)声明本地函数时,您也可以访问内存,因此实例的内存始终可用
let str_ptr: BufferPtr = get_buffer.call()?;
// Get directly a buffer pointer
let buffer: Vec<u8> = buffer_ptr.read(memory)?;
分配/写入
use as_ffi_bindings::{Write};
Write
特性允许您释放(开发中)、写入和分配 StringPtr
和 BufferPtr
。这允许您从Rust向AssemblyScript模块发送值
let input: Vec<u8> = vec![0x03, 0x02, 0x00, 0x01];
// instanciate a vector
let buffer_ptr = BufferPtr::alloc(&input, &env)?;
// Allocate a new buffer on the defined environment
sort_buffer.call(buffer_ptr.offset() as i32)?;
// Sort your buffer in webassembly
所有内容在Rust端仍然可访问。您可以使用 .write()
方法在Rust端修改变量,显然在WebAssembly模块中也可以。所以最好将其视为一个不安全的操作,请注意 🥲。
no_thread功能
启用 'no_thread' 功能可以有效地将缓冲区复制到BufferPtr。为了避免数据竞争,您应该只使用1个线程来处理您的Wasmer实例的内存。
Env实例化
您需要初始化您的环境以分配和写入,这是因为您需要使用导出函数作为 __new
、__pin
,根据AssemblyScript内存文档的美妙之处 📚。当Wasmer在 ImportObject
中使用带有环境(即将提供示例)的函数调用函数时,它会自动初始化。
但是当Wasmer不在后面时,您必须亲自操作!看
let mut env = Env::default();
env.init(&instance)?;
不难吧?
更多使用示例
还有一些更微妙的事情需要初始化,比如在ImportObject
中的abort
函数。使用特性的完整示例在test_features.rs文件中,我们尽量使用简单的示例。
许可证
您可以根据自己的选择,在Apache License, Version 2.0或MIT许可证下获得许可。
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交的任何贡献,将如上所述双重许可,不附加任何额外条款或条件。
致谢
您可以查看原始的@onsails wasmer-as
实验,该仓库是基于此实验的分支。
最小Rust版本:1.56.1
依赖项
~6–15MB
~194K SLoC