Support WebAssembly (Mono Runtime) (original) (raw)
Support WebAssembly (Mono Runtime)
WebAssembly is a relatively new virtual machine execution environment that can run any program that can be described in and target the web assembly binary instruction format. It is supported by all major browsers, although isn’t browser-specific. We expect more general uses of WebAssembly to become commonplace in the coming years. It is important that .NET developers can publish apps to environments that support WebAssembly.
We released a first version of support for WebAssembly with Bazor WebAssembly 3.2. It was based on the Mono runtime and libraries. Uno Platform also relies on Mono for its WebAssembly support.
In .NET 5.0, we will continue to use the Mono runtime, and will switch to using the .NET 5.0 libraries. There are two major benefits to this change: better throughput performance, and higher compatibility with .NET 5.0 non-WebAssembly code. The compatbility isn’t perfect, since we’re using two different runtimes (Mono for WebAssembly and CoreCLR for everything else), and the WebAssembly environment imposes restrictions on what .NET code can do.
The following work items describe the work items required for the project. These bullets will be changed to links as we create new issues for them.
Mono Runtime Performance
- Interpreter performance improvements
- V8 performance improvement reports
- Add browser wasm support for BenchmarkDotNet
Adopt .NET Runtime Libraries
- Add support for browser based networking
- Enable globalization with ICU
- Support async/tasks in an environment without explicit threads
- Add new library decorations and IL linker capabilities to reduce final application sizes and improve trimming reliability
SDK
- Create browser wasm runtime pack for net5.0 tfm
- Add a reference to the runtime pack in SDK for building and publishing Blazor wasm projects