questions on tag identity
some embedder apis have two-step instatantiation. that is,
- load (and validate) a module
- instantiate the loaded module
some embedder apis allow to instantiate a loaded module multiple times.
consider a module, module-A, which exports a tag.
load the module (loaded-module-A) create two instances from the loaded module: instance-A1 and instance-A2
now another instance imports the tags from both of instance-A1 and instance-A2. my understanding is that these two imported tags should be considered as different tags. (it's how i implemented the tag matching in my runtime: https://github.com/yamt/toywasm/blob/4924e0efe7785b2482131a681928a61ca9916910/lib/type.h#L605-L619)
questions:
- is my understanding correct?
- i don't think wast can express the situation. the closest thing would be to write two identical (module). am i right?
Yes, tag definitions are "generative", i.e., allocated anew with each instantiation of a containing module.
You are right that this is not something .wast can observe right now, which is a bummer. We would need to add a separate instantiate command to support that. That's surely possible, but might be substantial work for the multiple tool chains consuming the .wast format, perhaps too much to be worthwhile. But worth discussing. @tlively
Interesting idea. In Binaryen’s case I think you’re right that this would be complicated to handle, but that’s mostly because of bugs and limitations that are already observable. We’ll work to improve our support over time, so if an instantiate command would be useful, I wouldn’t want to block it.
@yamt, @tlively, I created a respective PR (against the wasm-3.0 branch). It implements the script extension and adds a test for generativity of instantiation. PTAL.