Wren

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, rethrow and delegate are 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 answers runPython.
  • 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 to respondWith, 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 pipeTo tests.

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.

Edit this page on GitHub