Un lenguaje de programación concatenativo es un lenguaje de programación de computadora 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 .
Ejemplo
Por ejemplo, una secuencia de operaciones en un lenguaje aplicativo como el siguiente:
y = foo ( x ) z = bar ( y ) w = baz ( z )
... está escrito en lenguaje concatenativo como una secuencia de funciones, sin parámetros: [2]
foo bar baz
Las funciones y procedimientos escritos en estilo concatenativo no son de nivel de valor , es decir, típicamente 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 , una secuencia de operaciones que toman parámetros de una estructura de datos implícita en la que operan todas las funciones, y devuelven los resultados de la función a esa estructura compartida para que sea utilizada por la siguiente operador. [3]
La combinación de una semántica compositiva con una sintaxis que refleja tal 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 las máquinas virtuales en forma de sus conjuntos de instrucciones . [5]
Propiedades
Las propiedades de los lenguajes concatenativos son el resultado de su sintaxis compositiva y semántica:
- La reducción de cualquier expresión es la simplificación de una función a otra función; nunca es necesario ocuparse de la aplicación de funciones a objetos. [6]
- Cualquier subexpresión se puede reemplazar por un nombre que represente la misma subexpresión. Esto se conoce en la comunidad de concatenación como factorización y se usa ampliamente para simplificar los programas en partes más pequeñas.
- La sintaxis y la semántica de los lenguajes concatenativos forman la estructura algebraica de un monoide . [7]
- Los lenguajes concatenativos se pueden adaptar bien a una implementación inspirada en la lógica lineal donde nunca se genera basura . [8]
Implementaciones
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 Factor , Onyx, PostScript y RPL .
La mayoría de los lenguajes concatenativos existentes se basan 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 escrito estáticamente . [12]
Ver también
- Programación a nivel de función
- Homoiconicidad
- Lenguaje de programación orientado a pilas
- Programación tácita
Referencias
- ^ "Christopher Diggins: ¿Qué es un lenguaje concatenativo" . Drdobbs.com. 2008-12-31 . Consultado el 1 de julio de 2013 .
- ^ "Código de nombre, no valores" . Concatenative.org . Consultado el 13 de septiembre de 2013 .
- ^ "Lenguaje concatenativo" . Concatenative.org . Consultado el 13 de septiembre de 2013 .
- ^ "Justificación de la alegría, un lenguaje funcional" . Archivado desde el original el 15 de enero de 2011.
- ^ a b "Por qué importa la programación concatenativa" . Consultado el 13 de septiembre de 2013 .
- ^ "von Thun, Manfred: alegría en comparación con otros lenguajes funcionales" . Archivado desde el original el 6 de octubre de 2011.
- ^ "von Thun, Manfred: fundamentos matemáticos de la alegría" . Archivado desde el original el 31 de julio de 2010.
- ^ "Henry Baker: pilas de permutación y lógica lineal - el cuarto será el primero" . Home.pipeline.com. Archivado desde el original el 24 de julio de 2014 . Consultado el 1 de julio de 2013 .
- ^ "El lenguaje concatenativo XY" . Nsl.com . Consultado el 1 de julio de 2013 .
- ^ "El lenguaje de programación de la enchilada" . Enchiladacode.nl . Consultado el 1 de julio de 2013 .
- ^ "El lenguaje de programación Om" . Om-language.org . Consultado el 1 de julio de 2013 .
- ^ "Especificación de gato" . Cat-language.com. Archivado desde el original el 5 de febrero de 2015 . Consultado el 1 de julio de 2013 .
enlaces externos
- concatenative.org: una wiki sobre idiomas concatenativos
- Staapl: Forth en Scheme para controladores integrados
- El lenguaje de programación Enchilada
- El lenguaje concatenativo XY
- El lenguaje de programación Om