Stack language

A stack language is one in which the execution model involves pushing operands onto a stack, from which operators consume or produce stack values.

Stack languages are closely associated with concatenative languages, because most concatenative languages happen to use a stack as the mechanism for implicit data flow. But concatenativity is about function composition, while stack-orientation is about how data is passed. Concatenative languages benefit from a stack-based execution model (though, in theory, you could have a concatenative language without an explicit stack), but stack-based languages are not inherently functional. PostScript, for example, is stack-based but has some non-concatenative features. And Forth, another stack-based language, is thoroughly imperative – it has mutable state, side effects everywhere and no emphasis on referential transparency. It just happens to use a stack for parameter passing instead of named variables or registers.