Skip to content
This repository was archived by the owner on Dec 22, 2021. It is now read-only.
This repository was archived by the owner on Dec 22, 2021. It is now read-only.

[RFC] versioning #72

Closed
Closed

Description

@tlively

@gnzlbg suggested we start versioning this proposal in #35. Now that we have a large subset of the proposed instructions implemented and relatively stable in the toolchain and in V8, I think that versioning the proposal would be useful. Let me know if you like the plan outlined below or if you would like to see something different!

Goals of versioning

Having version numbers for the proposal will enable users to reason about what kind of SIMD instructions they will be able to use with a given version of LLVM and V8, and to ensure that their toolchain and engine agree on which instructions are available. This is a proposal for how versioning could work that will achieve those goals while minimizing the overhead for implementers.

Versioning the spec proposal

Once V8 and the toolchain have both implemented the features required for the new version of the spec, a branch of this repo will be created with content that matches exactly what was implemented and a github release will be tagged. This release will contain notes on which versions of LLVM, emscripten, and V8 support the new version. These notes may be updated over time and the release tag updated if bugs in the tools or engine are found and fixed, but development of the spec proposal will continue on the master branch and will not be cherry picked to release branches.

Versioning the tools and V8

To keep complexity and overhead to a minimum, the tools and V8 will only support the latest tagged version of the spec, which should be well tested, and tip-of-tree SIMD development, which will probably be more buggy. That means that users will need to use older tools and V8 if they want to use older spec versions, but note that this does not violate any of the goals of versioning. Versioning is only meant to make using and communicating about the SIMD spec easier, so there will be no guarantees about compatibility between different versions of the spec.

Open questions

When do we want to start versioning? One option is to start with what V8 and the tools currently implement, which would require deleting some current spec proposal content in the release branch. The other option is to start versioning once V8 and the tools catch up with the spec proposal. If there are no strong objections to deleting content in the release branch, I would prefer the former.

Does versioning the spec proposal run afoul of any W3C CG protocols? Hopefully not, since the versions will not come with any sort of guarantees and will not exist in the final proposal, but maybe @binji can shed some light on this.

Activity

  1. binji commented on Apr 4, 2019

    @binji
    Member

    I'm a little concerned about all the references to v8 here; we have other wasm implementations, so we shouldn't treat any one of them specially. As for versioning the spec -- I believe there are mechanisms to do this, but they're intended for features that have shipped. As long as the implementations provide functionality behind a flag, I suppose it's just "buyer beware" if someone tries to use it.

    If we want to go forward with this, perhaps something lighter weight is possible. We could open an issue (or a gist, or maybe even add a new .md file), with all the information you describe. I don't think we need to branch this repo for that, I think providing the SHA of this repo should be enough.

    The reason I'm hesitant to do anything too official is that we definitely don't want to encourage users to think that any part of an unfinished spec is stable. If they are experimenting with SIMD, that's fine, but they should expect that they may be broken in the future. That said, I understand that the best way to make progress here is for users to "kick the tires" on implementations, and that's more difficult if they are working with a continually moving target.

  2. tlively commented on Apr 4, 2019

    @tlively
    MemberAuthor

    Thanks for you input, @binji!

    I'm a little concerned about all the references to v8 here; we have other wasm implementations, so we shouldn't treat any one of them specially. As for versioning the spec -- I believe there are mechanisms to do this, but they're intended for features that have shipped. As long as the implementations provide functionality behind a flag, I suppose it's just "buyer beware" if someone tries to use it.

    The only reason I reference v8 is because it is the only engine I am aware of that has any SIMD support. We would be thrilled if some other engine wanted to help us develop this proposal as well. All references to "V8" in this proposal could be replaced with "some engine."

    If we want to go forward with this, perhaps something lighter weight is possible. We could open an issue (or a gist, or maybe even add a new .md file), with all the information you describe. I don't think we need to branch this repo for that, I think providing the SHA of this repo should be enough.

    The reason I suggested branching and tagging is because it is native to git, so it seems more lightweight than adding new files to master. I would be open to using tags and a tracking issue instead of github's releases mechanism, although I worry that issues tend to get buried and are not very discoverable.

    The reason I'm hesitant to do anything too official is that we definitely don't want to encourage users to think that any part of an unfinished spec is stable. If they are experimenting with SIMD, that's fine, but they should expect that they may be broken in the future. That said, I understand that the best way to make progress here is for users to "kick the tires" on implementations, and that's more difficult if they are working with a continually moving target.

    I definitely don't want to do anything official at all. This is only meant to help users kick the tires. Maybe having github releases looks too official, in which case a tracking issue would be better. WDYT?

  3. penzn commented on Apr 4, 2019

    @penzn
    Contributor

    The only reason I reference v8 is because it is the only engine I am aware of that has any SIMD support. We would be thrilled if some other engine wanted to help us develop this proposal as well. All references to "V8" in this proposal could be replaced with "some engine."

    Chakra does support SIMD, I am not sure about others.

  4. penzn commented on Apr 17, 2019

    @penzn
    Contributor

    @tlively and @binji, Chakra supports most/all (I am pretty sure that all, but can double-check) of the instructions under unimplemented-simd128 in the toolchain:

    https://github.com/llvm-mirror/clang/blob/master/include/clang/Basic/BuiltinsWebAssembly.def

  5. dtig commented on Apr 23, 2019

    @dtig
    Member

    Cc @littledan, as we recently talked about versioning.

  6. tlively commented on Apr 24, 2019

    @tlively
    MemberAuthor

    Closing since we decided to pursue a simpler documentation strategy implemented in #73

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions