The stack-vs-register split you're designing here is the exact fork CPython, the JVM, and WebAssembly took one way and Lua 5.0 (and Android's Dalvik) took the other, trading compact bytecode for fewer memory accesses. Getting opcode numbering and stack effects right now is what lets every later task in this track — the compiler, the GC, the JIT — plug into a stable ISA.