Un lenguaje de programación concatenativo es un lenguaje de programación informática sin puntos en el que todas las expresiones denotan funciones y la yuxtaposición de expresiones denota composición de funciones . [1] La programación concatenativa reemplaza la aplicación de funciones , que es común en otros estilos de programación, con la composición de funciones como la forma predeterminada de construir subrutinas .
Por ejemplo, una secuencia de operaciones en un lenguaje aplicativo como la siguiente:
y = foo ( x ) z = barra ( y ) w = baz ( z )
...está escrito en un lenguaje concatenativo como una secuencia de funciones: [2]
x foo bar baz
Las funciones y los procedimientos escritos en estilo concatenativo no son de nivel de valor , es decir, normalmente no representan las estructuras de datos sobre las que operan con nombres o identificadores explícitos . En cambio, son de nivel de función : una función se define como una tubería o una secuencia de operaciones que toman parámetros de una estructura de datos implícita sobre la que operan todas las funciones y devuelven los resultados de la función a esa estructura compartida para que los use el siguiente operador. [3]
La combinación de semántica compositiva con una sintaxis que refleja dicha semántica hace que los lenguajes concatenativos sean muy aptos para la manipulación algebraica de programas; [4] aunque puede resultar difícil escribir expresiones matemáticas directamente en ellos. [5] Los lenguajes concatenativo se pueden implementar de manera eficiente con una máquina de pila y, por lo general, están presentes de manera implícita en las máquinas virtuales en forma de sus conjuntos de instrucciones . [5]
Las propiedades de los lenguajes concatenativo son el resultado de su sintaxis y semántica compositiva:
El primer lenguaje de programación concatenativo fue Forth , aunque Joy fue el primer lenguaje que se autodenominó concatenativo. Otros lenguajes concatenativo son dc , Factor , Onyx, PostScript y RPL .
La mayoría de los lenguajes concatenativo existentes están basados en pila ; esto no es un requisito y se han propuesto otros modelos. [9] [10] [11] Los lenguajes concatenativo se utilizan actualmente para programación integrada , de escritorio y web , como lenguajes de destino y para fines de investigación.
La mayoría de los lenguajes concatenativo son de tipado dinámico . Las excepciones incluyen el lenguaje Cat, de tipado estático . [12]