Wren 0.6.21
Wren 0.6.21 runs far more of the web's WebAssembly, and starts it faster: DuckDB, Python and older .NET and C++ builds.
This is still a beta, under development, and Windows-only.
Highlights
- Modules built with the old form of WebAssembly exceptions run.
try,catch,rethrowanddelegateare what older Emscripten and .NET builds use, and Wasmtime refuses them: they are now translated at compilation. DuckDB's shell (3.8 MB of C++) starts. - Python runs.
new WebAssembly.Memory({shared: true})works for one agent, as other browsers allow without isolation, so Pyodide starts and answersrunPython. - Faster. A script going through a module's memory one element at a time is 3 to 4 times faster, and an instance with thousands of exports takes 104 ms instead of 5.7 s: Pyodide starts in 5.7 s instead of 11.5 s.
- A module can catch what JavaScript throws (
catch_all,WebAssembly.JSTag), a call can have any number of values, and externrefs are released once the module has dropped them. - Service workers:
event.waitUntil()works from the promise given torespondWith, as the specification allows. bitplatform.dev's Blazor application starts. - Streams: releasing a reader during a read no longer reports an unhandled rejection, which stopped DuckDB's worker and failed
pipeTotests.
Changes you may notice
- Without cross-origin isolation a page has no global
SharedArrayBuffer, as in other browsers. Scripts that use it when available no longer wait on a copy that nothing shares: SQLite Fiddle now says OPFS is unavailable.
Limits
- Still no WebAssembly threads: a module declaring a shared memory does not compile, so Emscripten builds with pthreads do not run. Details:
docs/js/webassembly-api.md.