Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Epic] WebAssembly Features tracking #2087

Open
jeromelaban opened this issue Nov 14, 2019 · 1 comment
Open

[Epic] WebAssembly Features tracking #2087

jeromelaban opened this issue Nov 14, 2019 · 1 comment
Labels
difficulty/challenging 🤯 Categorizes an issue for which the difficulty level is reachable with internals understanding epic platform/wasm 🌐 Categorizes an issue or PR as relevant to the WebAssembly platform project/core-tools 🛠️ Categorizes an issue or PR as relevant to core and tools

Comments

@jeromelaban
Copy link
Member

jeromelaban commented Nov 14, 2019

WebAssembly Key Missing Features

.NET Runtime Features

  • SDK Binaries Distribution. Current distribution is done though explicit Url capture of the CI’s artifacts. This makes for a very fast pace of evolution, but could also be a problem in the future, with versions of the Uno.Bootstrapper (and others) using discarded mono CI artifacts. The AOT toolchain is particularly large (zipped, the whole SDK weighs 210MB, without macOS binaires).
    Update 2020-11-23: This is being worked on with .NET 6, where the SDK will be distributed through nuget. Current .NET 6 builds nuget packages are around 70MB zipped.
    Update 2021-08-29: The bootstrapper still uses its own build of the runtime, but is less heavy (~40MB) that it was with mono. It's currently distributed through a CDN, but should be migrated ultimately to be a nuget package.

  • MSBuild-based toolchain, compatible with Windows and macOS. It would be a toolchain that is exposed through msbuild, without having to resort to the use of the packager explicitly. For now, only linux is fully supported, because the CI’s artifacts only contain working Linux binaries.
    Update 2020-11-23: This is being worked on with .NET 6, where the SDK is now including MSBuild tasks to replace the mono packager.
    Update 2021-08-29: The bootstrapper still uses its own packaging, but the runtime tooling is maturing quickly. It is still very much blazor aligned, but likely will be generalized for .NET 7. Windows build is now supported.

Released

  • Profiling, to allow for the same kind of performance investigations available in X.I or X.A. For now, profiling is only realistic in AOT, but does not highlight slow paths under the interpreter. This makes mixed mode scenarios difficult to troubleshoot and optimize.
    Update 2020-11-23: Profiling inner workings are available in the runtime, though nothing exposes it it properly in net6.
    Update 2021-08-29: Profiling is now available in .NET 6, see the bootstrapper documentation

  • Profile-based mixed mode, similar to the startup tracing in Xamarin.Android.
    Update 2020-11-23: This is now available as part of the 1.3.x bootstrapper for mono, also in the boostrapper 2.0.

  • Nuget integration. Addition of a “runtime” entry would be very useful. Mono itself will have this problem very soon with the wasm-specific types (Bindings, HttpClient, WebSockets, etc…) for which there is no easy way to reference in nuget packages, or even in the main binary.
    Update 2020-11-23: This is not a concern anymore, as the .NET team does not mentioned it will not be supported, but that the net-browser runtime ID is available. As far as uno is concerned, cross-target libraries handle this using unoruntime folders in nuget packages.

  • Full VS Debugger experience, the ability to debug a mono-wasm app from VS, without having to jump through the current debugger proxy hoops. This also includes a more advanced debugging support, with watches, globals support, and interpreter stacktrace unmangling.
    Update 2020-11-23: This is available as a preview in VS 2019 16.8 and later.

  • Threading, pthreads via emscripten support for all browsers. This is available in the new Edge and Chrome, flagged in Firefox, not implemented in Safari. This was a work in progress in mono, descoped for .NET 6. Will likely be worked on for .NET 7.
    Update 2022-11-04: Available in Bootstrapper 7.0

  • Exceptions support, to avoid the back and forth with javascript. This is particularly expensive at runtime when using the try/finally construct, which is used extensively in the BCL. It also most probably impacts the package size.
    Update 2022-11-04: Available in Bootstrapper 7.0

@carldebilly carldebilly added the platform/wasm 🌐 Categorizes an issue or PR as relevant to the WebAssembly platform label Oct 8, 2020
@jeromelaban jeromelaban added the project/core-tools 🛠️ Categorizes an issue or PR as relevant to core and tools label Nov 23, 2020
@jeromelaban jeromelaban added the difficulty/tbd Categorizes an issue for which the difficulty level needs to be defined. label Feb 15, 2021
@MartinZikmund MartinZikmund added difficulty/challenging 🤯 Categorizes an issue for which the difficulty level is reachable with internals understanding and removed difficulty/tbd Categorizes an issue for which the difficulty level needs to be defined. labels Jun 1, 2021
@jeromelaban
Copy link
Member Author

For those tracking this issue, threading and exception handling are making progress in the runtime, the issue description has been updated.

@MartinZikmund MartinZikmund changed the title WebAssembly Features tracking [Epic] WebAssembly Features tracking Jun 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
difficulty/challenging 🤯 Categorizes an issue for which the difficulty level is reachable with internals understanding epic platform/wasm 🌐 Categorizes an issue or PR as relevant to the WebAssembly platform project/core-tools 🛠️ Categorizes an issue or PR as relevant to core and tools
Projects
None yet
Development

No branches or pull requests

3 participants