web-platform-tests / interop

web-platform-tests Interop project
https://wpt.fyi/interop
318 stars 27 forks source link

Resizable buffers integration in Wasm/JS API #876

Open dtig opened 1 month ago

dtig commented 1 month ago

Description

This feature lets the Wasm/JS API vend resizable buffers in WebAssembly.Memory, making the Wasm API more ergonomic for JS integration.

Resizable buffers is an existing JS feature that added the ability to resize ArrayBuffer instances and to grow SharedArrayBuffer instances.

Specification

The Wasm/JS API is already merged into the Wasm spec (PR). The JS feature is already Stage 4 (merged into the standard)

Additional Signals

Emscripten would benefit from using this feature, as WebAssembly buffers has always been able to resize/grow. Since Wasm memories are exposed as ArrayBuffers, which by default cannot resize nor grow, growing the memories has to be expressed in unergonomic ways like detaching and requires manual polling.

mehagar commented 1 month ago

As a user of Emscripten, this is especially useful when using its support for multithreading and memory growth, since we have to constantly check if the buffer has been replaced before using it.