Naming convention for wait/notify instructions
rossberg opened this issue · 4 comments
The threads proposal as is is limited to shared memories, but we probably want to generalise the language to other shared entities eventually, e.g., globals or tables. At that point, it might be conceivable that we may want to introduce not just atomic get/set for those, but also wait/notify instructions.
However, the current naming scheme for wait/notify instructions does not make explicit that they are operating on a memory. In the interest of forward compatibility, should we fix that? It might also be nice for improved consistency with other memory instructions.
Bikeshedding possibilities:
memory.atomic.notify
,i32.memory.atomic.wait
memory.atomic.notify
,memory.i32.atomic.wait
memory.atomic.notify
,memory.atomic.wait32
Admittedly, neither pair is particularly pretty. Thoughts?
The table or memory argument will be embedded in the opcode, so atomic.notify (in the text format) without a memory or table argument can be interpreted as the existing notify-on-memory; atomic.notify with an argument would be disambiguated by the argument: atomic.notify (table $t)
. For wait, i32 and i64 both designate memory operations; the table operations could just be atomic.wait (table $t)
.
Hm, that would be really odd. All existing table/memory/global instructions have the respective entity index in plain form. For example, we don't write get (table $x)
and get (global $x)
either.
Of all of these, I think I prefer memory.atomic.wait32
. It keeps the precedent that we prefix with memory.
, and aligns well with things like i64.atomic.store32
. It's not a particularly pretty name, but neither is i64.atomic.rmw32.cmpxchg_u
. I imagine both will be relatively rare, so we shouldn't worry too much about their length.
SGTM