go-interpreter / wagon

wagon, a WebAssembly-based Go interpreter, for Go.
BSD 3-Clause "New" or "Revised" License
904 stars 148 forks source link

Idea:, VMs choose a spec level for run #108

Open twitchyliquid64 opened 5 years ago

twitchyliquid64 commented 5 years ago

Problem statement: I want to use WebAssembly compliant with specification X.Y.

Suggestion:

  1. Store spec version the operator was introduced in the operators.Op structure, add to existing new*Op() functions
  2. When disassembly happens, opcodes present before the spec version cause an error.
  3. Change the ReadModule or DecodeModule function to take a new argument representing the spec version.

I don't think the working group are intending on supporting any non-backwards-compatible proposals, but in the event they do, we can load a different vm. method into vm.funcTable to do the different feature without any performance hit. (that said, this is not likely to ever happen according to the footnote here)

Thoughts?

A good testbed on this might be the sign-extension-ops proposal.