dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
14.95k stars 4.65k forks source link

[tracking] .NET support for post-MVP WebAssembly Proposals #94351

Open lambdageek opened 10 months ago

lambdageek commented 10 months ago

Summary

This issue attempts to collect the post-MVP WebAssembly spec proposals. The goal is to provide a convenient place to collect issues for the individual proposals and the status of each proposal with respect to the .NET runtime.

This list of in-progress proposals is from WebAssembly/proposals@0099331e2db3c40c2aae6b3ff4583aaa4e254553

Legend
not currently planned ⏹️
not applicable or no action needed 🈚
supported 🏁
in progress πŸƒ
under consideration πŸ€”
needs investigation 🐌

For the status of support for each proposal by various popular WebAssembly engines, see https://webassembly.org/roadmap/

Accepted proposals

These are the proposals in https://github.com/WebAssembly/spec/tree/main/proposals that have been merged into the spec

Proposal dotnet/runtime issue .NET status
bulk memory operations 🏁 [^1]
multi-value 🈚[^2]
non-trapping float-to-int conversion [^3] 🏁
reference types 🐌
sign extension operators 🏁 [^4]
SIMD https://github.com/dotnet/runtime/issues/53730 🏁

[^1]: Supported by toolchain [^2]: There may be some micro-optimization opportunities for the jiterpreter to return multiple values. Interpreter and AOT use the C stack to return .NET valuetypes not the WASM stack. [^3]: Supported by toolchain, intrinsics added together with SIMD in https://github.com/dotnet/runtime/issues/53730 [^4]: Supported by toolchain

Phase 4 - Standardize the feature (WG)

Proposal dotnet/runtime Issue .NET status
tailcall #94352 🐌
extended constant expressions 🐌
typed function references 🐌
garbage collection https://github.com/dotnet/runtime/issues/94420 ⏹️
multiple memories 🐌
threads https://github.com/dotnet/runtime/issues/68162 πŸƒ
relaxed SIMD 🐌

Phase 3 - Implementation Phase (WG + CG)

Proposal dotnet/runtime issue .NET status
custom annotation syntax in the text format - 🈚[^5]
memory64 https://github.com/dotnet/runtime/issues/94108 🐌
exception handling https://github.com/dotnet/runtime/pull/84573 🏁
web content security policy https://github.com/dotnet/runtime/issues/68374 🏁
branch hinting 🐌
JS promise integration #80904 🐌
type reflection for WebAssembly JavaScript API 🐌

[^5]: .NET does not use the WAT text format directly

Phase 2 - Proposed Spec Text Available (WG + CG)

Proposal dotnet/runtime issue .NET status
ECMAScript module integration 🐌
relaxed dead code validation 🐌
numeric values in WAT data segments 🐌
instrument and tracing technology 🐌
extended name section 🐌

Phase 1 - Feature Proposal (CG)

Proposal dotnet/runtime issue .NET status
type imports 🐌
component model 🐌
WebAssembly C and C++ API 🐌
flexible vectors 🐌
call tags 🐌
stack switching 🐌
constant time 🐌
JS customization for GC Objects 🐌
memory control 🐌
reference-typed strings 🐌
profiles 🐌
JS string builtins 🐌
rounding variants 🐌
shared everything threads #96629 🐌
ghost commented 10 months ago

Tagging subscribers to 'arch-wasm': @lewing See info in area-owners.md if you want to be subscribed.

Issue Details
## Summary This issue attempts to collect the post-MVP WebAssembly spec proposals. The goal is to provide a convenient place to collect issues for the individual proposals and the status of each proposal with respect to the .NET runtime. This list of in-progress proposals is from WebAssembly/proposals@04fa8c810e1dc99ab399e41052a6e427ee988180 | **Legend** | | |-|-| | not planned | ⏹️ | | not applicable or no action needed | ⏸️ | | supported | 🏁 | | in progress | πŸƒ | | under consideration | πŸ€” | | needs investigation | 🐌 | For the status of support for each proposal by various popular WebAssembly engines, see https://webassembly.org/roadmap/ ## Accepted proposals These are the proposals in https://github.com/WebAssembly/spec/tree/main/proposals that have been merged into the spec | Proposal | dotnet/runtime issue | .NET status | |-|-|-| | [bulk memory operations](https://github.com/WebAssembly/spec/blob/main/proposals/bulk-memory-operations/Overview.md) | | 🏁 [^1] | | [multi-value](https://github.com/WebAssembly/spec/blob/main/proposals/multi-value/Overview.md) | | ⏸️[^2] | | [non-trapping float-to-int conversion](https://github.com/WebAssembly/spec/blob/main/proposals/nontrapping-float-to-int-conversion/Overview.md) | [^3] | 🏁 | | [reference types](https://github.com/WebAssembly/spec/blob/main/proposals/reference-types/Overview.md) | | 🐌 | | [sign extension operators](https://github.com/WebAssembly/spec/blob/main/proposals/sign-extension-ops/Overview.md) | | 🏁 [^4] | | [SIMD](https://github.com/WebAssembly/spec/tree/main/proposals/simd) | https://github.com/dotnet/runtime/issues/53730 | 🏁 | [^1]: Supported by toolchain [^2]: There may be some micro-optimization opportunities for the jiterpreter to return multiple values. Interpreter and AOT use the C stack to return .NET valuetypes not the WASM stack. [^3]: Supported by toolchain, intrinsics added together with SIMD in https://github.com/dotnet/runtime/issues/53730 [^4]: Supported by toolchain ## Phase 4 - Standardize the feature (WG) | Proposal | dotnet/runtime Issue | .NET status | |-|-|-| | [tailcall](https://github.com/WebAssembly/tail-call) | | 🐌 | | [extended constant expressions](https://github.com/WebAssembly/extended-const) | | 🐌 | | [typed function references](https://github.com/WebAssembly/function-references) | | 🐌 | | [garbage collection](https://github.com/WebAssembly/gc) | | 🐌 | | [multiple memories](https://github.com/WebAssembly/multi-memory) | | 🐌 | | [threads](https://github.com/webassembly/threads) | https://github.com/dotnet/runtime/issues/68162 | πŸƒ | | [relaxed SIMD](https://github.com/WebAssembly/relaxed-simd) | | 🐌 | ## Phase 3 - Implementation Phase (WG + CG) | Proposal | dotnet/runtime issue | .NET status | |-|-|-| | [custom annotation syntax in the text format](https://github.com/WebAssembly/annotations) | | 🐌 | | [memory64](https://github.com/WebAssembly/memory64) | | 🐌 | | [exception handling](https://github.com/WebAssembly/exception-handling ) | https://github.com/dotnet/runtime/pull/84573| 🏁 | | [web content security policy](https://github.com/WebAssembly/content-security-policy) | https://github.com/dotnet/runtime/issues/68374 | 🏁 | | [branch hinting](https://github.com/WebAssembly/branch-hinting) | | 🐌 | | [JS promise integration](https://github.com/WebAssembly/js-promise-integration) | | 🐌 | | [type reflection for WebAssembly JavaScript API](https://github.com/WebAssembly/js-types) | | 🐌 | ## Phase 2 - Proposed Spec Text Available (WG + CG) | Proposal | dotnet/runtime issue | .NET status | |-|-|-| | [ECMAScript module integration](https://github.com/WebAssembly/esm-integration) | | 🐌 | | [relaxed dead code validation](https://github.com/WebAssembly/relaxed-dead-code-validation) | | 🐌 | | [numeric values in WAT data segments](https://github.com/WebAssembly/wat-numeric-values) | | 🐌 | | [instrument and tracing technology](https://github.com/WebAssembly/instrument-tracing) | | 🐌 | | [extended name section](https://github.com/WebAssembly/extended-name-section) | | 🐌 | ## Phase 1 - Feature Proposal (CG) | Proposal | dotnet/runtime issue | .NET status | |-|-|-| | [type imports](https://github.com/WebAssembly/proposal-type-imports) | | 🐌 | | [component model](https://github.com/WebAssembly/component-model) | | 🐌 | | [WebAssembly C and C++ API](https://github.com/WebAssembly/wasm-c-api) | | 🐌 | | [flexible vectors](https://github.com/WebAssembly/flexible-vectors) | | 🐌 | | [call tags](https://github.com/WebAssembly/call-tags) | | 🐌 | | [stack switching](https://github.com/WebAssembly/stack-switching) | | 🐌 | | [constant time](https://github.com/WebAssembly/constant-time) | | 🐌 | | [JS customization for GC Objects](https://github.com/WebAssembly/gc-js-customization) | | 🐌 | | [memory control](https://github.com/WebAssembly/memory-control) | | 🐌 | | [reference-typed strings](https://github.com/WebAssembly/stringref) | | 🐌 | | [profiles](https://github.com/WebAssembly/profiles) | | 🐌 | | [JS string builtins](https://github.com/WebAssembly/js-string-builtins) | | 🐌 | | [rounding variants](https://github.com/WebAssembly/rounding-mode-control) | | 🐌 |
Author: lambdageek
Assignees: -
Labels: `design-discussion`, `arch-wasm`, `area-Meta`, `tracking`, `os-wasi`, `os-browser`
Milestone: 9.0.0
Anutrix commented 10 months ago

Minor note: ⏸️ symbol seems like 'feature is paused but might continue' when it actually means not applicable or no action needed aka it's conclusion has been reached.

lambdageek commented 10 months ago

Minor note: ⏸️ symbol seems like 'feature is paused but might continue' when it actually means not applicable or no action needed aka it's conclusion has been reached.

Ok, replaced it with 🈚 which apparently means "free of charge". that's pretty close, maybe. There's also πŸ‰‘ which is "acceptable". If this is all too silly, maybe I'll just write "N/A"

lambdageek commented 9 months ago

We should also add the "thread spawning" aka "shared everything" proposal once it is a bit more mature https://github.com/WebAssembly/shared-everything-threads/blob/main/proposals/thread-spawn/Overview.md

Update 2024-01-08 added