As a tangent, p-code is like an ancient version of wasm or java bytecodes, though its interpreter (the p-machine) was simple and compact enough to fit on 8-bit machines. Smalltalk also used bytecodes.
The nice bit is that once you implement a bytecode interpreter, everything just runs. It may be slower than native code, but no new code generators or compilers are required.