gpt4 book ai didi

javascript - Rust wasm : How to access Webassembly. 当前实例的内存(来自 Rust)?

转载 作者:行者123 更新时间:2023-12-02 21:48:07 36 4
gpt4 key购买 nike

查看 js_sys::Uint8Array::new_with_byte_offset_and_length 的函数签名

pub fn new_with_byte_offset_and_length(
buffer: &JsValue,
byte_offset: u32,
length: u32
) -> Uint8Array

它需要一个参数buffer来引用当前wasm实例的内存缓冲区。

如何从 Rust 端访问这样的对象? (被编译为 wasm)

最佳答案

It needs an argument buffer which refers to the current wasm instance's memory buffer.

首先,值得注意的是,这不一定是真的。该绑定(bind)适用于标准 JavaScript API - Uint8Array - 它允许您从任意缓冲区或容量创建字节数组。

如果您只想将字节数组 View 传递给 Rust 内存或将 Rust 内存中的字节返回给 JavaScript,则实际上并不需要此构造函数 - 为此,请使用 wasm-bindgen的标准功能和通过/返回 &[u8]Vec<u8>就像在常规 Rust 代码中一样。

但是,为了以防万一,回答问题的第二部分

How do I access such an object from the Rust side ? (that gets compiled to wasm)

从 Rust 方面,您可以使用 wasm_bindgen::memory ,这将为您提供一个内存实例。默认情况下,它将作为通用 JsValue 返回。 ,但您可以将其转换为 WebAssembly.Memory 使用.unchecked_into::<js_sys::WebAssembly::Memory>() ,这将让您访问 buffer您需要的属性(property)。

请注意,创建短暂的 Uint8Array像这样的 Rust 内存 View 也在内置 API 中实现 js_sys::Uint8Array::view ,但它被标记为 unsafe有充分的理由:buffer任何分配都可能会失效,许多内置 API 会调用这些分配,因此您需要非常小心地处理此类 View ,并确保它们在创建后立即使用。避免问题的最佳方法是,完全不依赖这种低级访问,而是使用 #[wasm_bindgen]生成任何绑定(bind)。

关于javascript - Rust wasm : How to access Webassembly. 当前实例的内存(来自 Rust)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60199564/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com