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 crear subrutinas .
Por ejemplo, una secuencia de operaciones en un lenguaje aplicativo como el 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 procedimientos escritos en estilo concatenativo no tienen nivel de valor , es decir, normalmente no representan las estructuras de datos en las que operan con nombres o identificadores explícitos . En cambio, son de nivel de función : una función se define como una canalización , o una secuencia de operaciones que toman parámetros de una estructura de datos implícita sobre la cual operan todas las funciones y devuelven los resultados de la función a esa estructura compartida para que sean utilizados por 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 susceptibles a la manipulación algebraica de programas; [4] aunque puede resultar difícil escribir expresiones matemáticas directamente en ellos. [5] Los lenguajes concatenativos se pueden implementar de manera eficiente con una máquina de pila y comúnmente están presentes implícitamente en máquinas virtuales en forma de sus conjuntos de instrucciones . [5]
Las propiedades de los lenguajes concatenativos 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 en llamarse a sí mismo concatenativo. Otros lenguajes concatenativos son dc , Factor , Onyx, PostScript y RPL .
La mayoría de los lenguajes concatenativos existentes están basados en pilas ; esto no es un requisito y se han propuesto otros modelos. [9] [10] [11] Los lenguajes concatenativos se utilizan actualmente para programación integrada , de escritorio y web , como lenguajes de destino y con fines de investigación.
La mayoría de los lenguajes concatenativos se escriben dinámicamente . Las excepciones incluyen el lenguaje Cat de tipo estático . [12]