computer language. It is also used in Bashforth. RPL HP's RPL, first introduced in the HP-18C calculator in 1986, is a type of proprietary hybrid direct-threaded and indirect-threaded threaded-interpreted language that, unlike others TILs, allows embedding of RPL "objects" into the "runstream" ie. The stream of addresses through which the interpreter pointer advances. An RPL "object" can be thought of as a special data type whose in-memory structure contains an address to an "object prolog" at the start of the object, and then data or executable code follows. The object prolog determines how the object's body should be executed or processed. Using the "RPL inner loop", which was invented and published (and patented ) by William C. Wickes in 1986 and published in "Programming Environments", Institute for Applied Forth Research, Inc., 1988, execution follows like so: Dereference the IP (instruction pointer) and store it into O (current object pointer) Increment the IP by the length of one address pointer Dereference O and store its address in O_1 (this is the second level of indirection) Transfer control to next pointer or embedded object by setting the PC (program counter) to O_1 plus one address pointer Go back to step 1 This can represented more precisely by: O = [I] I = I + Δ PC = [O] + Δ Where above, O is the current object pointer, I is the interpreter pointer, Δ is the length of one address word and the "[]" operator stands for "dereference". When control is transferred to an object pointer or an embedded object, execution continues as follows: PROLOG -> PROLOG ( The prolog address at the start of the prolog code points to itself ) IF O + Δ =/= PC THEN GOTO INDIRECT ( Test for direct execution ) O = I - Δ ( Correct O to point to start of embedded object ) I = I + α ( Correct I to point after embedded object where α is the length of the object ) INDIRECT ( rest of prolog ) On HP's Saturn microprocessors that use RPL, there is a third level of indirection made possible by an architectural / programming trick which allows faster execution. Branches In all interpreters, a branch simply changes the thread pointer (ip) to a different address in the thread. A conditional jump-if-zero branch that jumps only if the top-of-stack value is zero could be implemented