bcpl business operating system bytecode compiler computer programming dynamic memory allocation interpreted language java virtual machine joel mccormack microsoft p-code niklaus wirth o-code operating system pascal microengine processor register program counter return address runtime stack machine steven pemberton ucsd pascal