Track and update all the implemented features - #390
Conversation
| "customAnnotationSyntaxInTheTextFormat": { | ||
| "description": "Custom Annotation Syntax in the Text Format", | ||
| "url": "https://github.com/WebAssembly/annotations/blob/main/proposals/annotations/Overview.md", | ||
| "phase": 5 | ||
| }, |
There was a problem hiding this comment.
This one is weird, because almost all engines don't support the text format. I added it because it's a phase 5 proposal, so it's there for exhaustiveness reasons, but it's N/A in all but wasmtime, which seems to just ignore it (so I wasn't able to add a version number there either).
| "esmIntegration": { | ||
| "description": "ESM integration", | ||
| "url": "https://github.com/WebAssembly/esm-integration", | ||
| "phase": 3 | ||
| }, |
There was a problem hiding this comment.
This is the only one that's not implemented by any, but is in phase 3, which falls into my "everything phase 3 and up having to be listed" rule, which is of course arbitrary, so we can remove it again.
There was a problem hiding this comment.
Nvm, turns out it's implemented by Webkit.
There was a problem hiding this comment.
Interesting, I wasn't aware of this. Do you know if it's up-to-date? There have been quite a few changes in the long time since the proposal started. Maybe @guybedford knows.
If it's the original version of the proposal and not the current one, we probably shouldn't include it.
There was a problem hiding this comment.
I'd guess it's not up to date, but I don't actually know.
There was a problem hiding this comment.
Hm... obviously proposals can change before standardization and browsers won't always be up-to-date, so any inclusion of flagged is sort of a judgement call. But in this case I think I would not mark ESM integration as implemented in this case, because I suspect it's a very old version of the proposal, and also because there is an up-to-date polyfill that it would make more sense for users to try.
0762225 to
1880a70
Compare
6d4a37b to
9b59634
Compare
After seeing https://labs.leaningtech.com/blog/branch-hinting yesterday, I was quite surprised to read that not only is this proposal done, but it's also implemented in all the browsers, and yet it's not even tracked in the `features.json` file. So I took it upon myself to make sure that all features that are in at least phase 3 (implementation phase) are tracked and up to date. While doing this I however noticed that with the recent addition of "Custom Page Sizes", at least one phase 1 feature is also tracked now. So I exhaustively updated the `features.json` file to include all features that are implemented in at least one engine as well. With there being a lot more proposals that are being tracked now, I thought it would also make sense to properly reflect the phases on the website, instead of splitting them into just two sections.
9b59634 to
38ec321
Compare
dschuff
left a comment
There was a problem hiding this comment.
This is impressive!
One concern I have is that this table is meant to help developers who might not be following super-closely along with the progress of specs, and might want to know whether they should try out a feature (or target it with a compiler). For very early-stage proposals, the answer is usually "maybe; it's complicated". I'm not sure it's helpful to just declare that a feature is supported, even with a flag. I don't know if that means we should just make a judgement call about whether to include a feature, or have some other caveats, or treat stage 1 proposals differently, or what.
| "esmIntegration": { | ||
| "description": "ESM integration", | ||
| "url": "https://github.com/WebAssembly/esm-integration", | ||
| "phase": 3 | ||
| }, |
There was a problem hiding this comment.
Interesting, I wasn't aware of this. Do you know if it's up-to-date? There have been quite a few changes in the long time since the proposal started. Maybe @guybedford knows.
If it's the original version of the proposal and not the current one, we probably shouldn't include it.
|
This is very nice. But I have to agree with @dschuff about early phases: there is basically no entry requirement to phase 1, and proposals at this stage generally are "just an idea", often with no worked out design that could even be implemented and no agreement yet that they should ever be included. Implementations at this stage are mostly experiments. So it may be misleading to show phase 1 in this table, and may set wrong expectations. In contrast, phase 2 at least requires a "complete overview document" and "reasonably high level of consensus". |
|
I can remove the phase 1 proposals then, but what about the component model and custom page sizes (the latter already having been there from a recent PR)? |
|
Custom page sizes is scheduled for a phase 2 vote next Tuesday, so we could just wait that out. The component model is rather special, since it is it's own separate layer and will not necessarily be implemented in engines. |
|
That's a good point about the phase 2 requirements being a good proxy for the usefulness of trying out a feature. I think that makes sense as a "default" criterion for inclusion here. |
|
I removed all the phase 1 proposals and preemptively moved |
Groups the features via `Object.groupBy`, which is supported by all modern browsers.
dschuff
left a comment
There was a problem hiding this comment.
Sorry for more comments! Now you're discovering why some of these were "conveniently" left out :D
thanks for perservering!
| "logo": "/images/safari.svg", | ||
| "features": { | ||
| "bigInt": ["15", "wasm-bigint is supported in desktop Safari since 14.1 and iOS Safari since 14.5; however BigInt64Array, which is needed by Emscripten, was released in 15"], | ||
| "branchHinting": "16", |
There was a problem hiding this comment.
Are you sure this is correct? I don't see any mention in https://developer.apple.com/documentation/safari-release-notes/safari-16-release-notes and that would have been released before the feature went to phase 4, which browsers usually don't do.
There was a problem hiding this comment.
It has been enabled by default ever since Safari 16. In the latest Webkit there is no longer any feature to toggle it. I'll recheck to see if they "removed the feature" or if that's just because they don't need a toggle anymore.
There was a problem hiding this comment.
Yep, they removed the toggle because it's "already shipped" here: WebKit/WebKit@ca9f4e6
So yeah, it's been shipped since Safari 16, despite it not having been in phase 4.
There was a problem hiding this comment.
aha, and it was enabled in WebKit/WebKit@e1f19d7
I'll bet this was an accident, actually. TC39 has a similar stage process for JS features, and IIRC browsers typically ship at stage 3. Anyway, this is fine for the website, I'll follow up and make sure there's nothing that they need to fix or update with the proposal :)
| "esmIntegration": { | ||
| "description": "ESM integration", | ||
| "url": "https://github.com/WebAssembly/esm-integration", | ||
| "phase": 3 | ||
| }, |
There was a problem hiding this comment.
Hm... obviously proposals can change before standardization and browsers won't always be up-to-date, so any inclusion of flagged is sort of a judgement call. But in this case I think I would not mark ESM integration as implemented in this case, because I suspect it's a very old version of the proposal, and also because there is an up-to-date polyfill that it would make more sense for users to try.
| }, | ||
| "exceptions": { | ||
| "description": "Exception handling", | ||
| "description": "Exception Handling", |
There was a problem hiding this comment.
As discussed in #389, I don't think we want to just move this to phase 4 as-is. Take a look at the discussion there, and feel free to incorporate that into your PR, or I'm also OK with just leaving EH as phase 3 for this PR and dealing with EH separately.
There was a problem hiding this comment.
Ah, i just noticed that you describe that in the notes in this PR. My concern with this approach is that developers might think there is no supported EH option across the web, while in fact there is (i.e. until exnref is supported on all browsers, I expect that at least developers of C++ and any other toolchain that supports the existing EH will continue to use that).
Maybe we should figure out what flag options we want to use in emscripten and revisit this...
But anyway.... to avoid letting the perfect being the enemy of the good and stalling this too long, maybe let's just land this PR and then split it out in a separate PR.
So maybe my question for you here is, how easy would it be with this code architecture to add another category to the table for deprecated features?
There was a problem hiding this comment.
I split it into a deprecated section now.
This introduces a new deprecated section where the old exception handling proposal is showcased.
The proposal is still shown, but there is no browser implementing it.
They are not web browsers, so they don't need it.
| }, | ||
| "exceptions": { | ||
| "description": "Exception handling", | ||
| "description": "Exception Handling", |
There was a problem hiding this comment.
How about we call this "Legacy Exception Handling" to match the spec, and for now how about calling exceptionsFinal "Exception Handling with exnref` to disambiguate and for consistency with Emscripten. Once some time has passed and the emscripten/LLVM implementation is mature we can start changing the language in the documentation to make exnref more like the "default".
There was a problem hiding this comment.
Alright, I renamed them.
|
I pushed one additional change marking GC as being enabled in Safari 18. While it is indeed now enabled by default in Webkit, I don't actually know whether that also means it will be in the final Safari 18 or they ship an earlier version of Webkit. We could wait for the next iOS 18 Beta and check, or I can just revert it. |
a9bac93 to
51f3aa3
Compare
|
I undid that change. It seems like they mostly just cherry pick changes during the beta period, so it might not make it until 18.1. I'll just do a follow up PR then. |
I think this is the right thing to do. When a feature turns on by default in WebKit it usually means it will ship in Safari, but not always. And Apple is very opaque about their release process and will never say anything about what will release in the future. So in my experience it's just best to wait until the official beta releases come out. |
|
This is great, thanks for all your work on this! |


After seeing https://labs.leaningtech.com/blog/branch-hinting yesterday, I was quite surprised to read that not only is this proposal done, but it's also implemented in all the browsers, and yet it's not even tracked in the
features.jsonfile.So I took it upon myself to make sure that all features that are in at least phase 3 (implementation phase) are tracked and up to date. While doing this I however noticed that with the recent addition of "Custom Page Sizes", at least one phase 1 feature is also tracked now. So I exhaustively updated the
features.jsonfile to include all features that are implemented in at least one engine as well.With there being a lot more proposals that are being tracked now, I thought it would also make sense to properly reflect the phases on the website, instead of splitting them into just two sections.