Stack machines are arguably the simplest kind of computer architecture. Their LIFO structure is quite suitable for block-oriented languages. The code size for a stack machine can be very compact because most instructions have no operand field.

Forth (from around 1970) is perhaps the most succesful stack-based programming language, based on a machine model consisting of a data stack and a return stack. Stack-oriented languages are a large subset of concatenative programming language (with the Om language being a rare example of a non-stack-oriented concatenative programming language).

Many virtual machines used as compilation targets of higher-level programming languages (?Java, Lua, etc.) are stack-based.


Reverse Polish notation was separately invented since the 1950s by several matematicians and computer scientists. GEORGE (1957) was the first practical programming language based on RPN.

Stack-based instruction sets were used by many mainframe computers of the early 1960s (notably, the Burroughs B5000 and the English Electric KDF9), but the idea was later marginalized by register-based architectures such as the IBM S/360. Still, some later stack-based computers (such as Niklaus Wirth's Lilith) proved to be quite competitive in terms of speed, particularly thanks to the high code density that reduced their need for memory bandwidth.



  • POP Remove an item at index, closing the hole left in the stack.
  • ROLL Remove an item at index, push it on top of the stack.
  • PICK Copy an item at index, push it on top of the stack.

From these primitives, the basic stack operations can be created:

  • DROP(a b) Discard top item.
  • NIP(a c) Discard second item.
  • SWAP(a c b) Bring second item to top.
  • ROT(b c a) Bring third item to top.
  • DUP(a b c c) Copy top item.
  • OVER(a b c b) Copy second item to top.