Un lenguaje de programación concatenativo es un lenguaje de programación 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 paradigmas de programación , con la composición de funciones como la forma predeterminada de construir subrutinas .
Ejemplo
Por ejemplo, un anidamiento de operaciones en un lenguaje aplicativo como el siguiente:
baz ( bar ( foo ( x )))...se escribe 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 la utilice 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 altamente adecuados para la manipulación algebraica de programas; [ 4 ] aunque puede ser difícil escribir expresiones matemáticas directamente en ellos. [ 5 ] Los lenguajes concatenativos pueden implementarse eficientemente con una máquina de pila y suelen estar presentes implícitamente en máquinas virtuales en forma de sus conjuntos de instrucciones . [ 5 ]
Propiedades
Las propiedades de los lenguajes concatenativos son el resultado de su sintaxis y semántica composicionales:
- La reducción de cualquier expresión es la simplificación de una función a otra función; nunca es necesario tratar con la aplicación de funciones a objetos. [ 6 ]
- Cualquier subexpresión puede reemplazarse por un nombre que la represente. En la programación concatenativa, esto se denomina factorización y se utiliza ampliamente para simplificar programas dividiéndolos 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 pueden adaptarse 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 que se denominó concatenativo. Otros lenguajes concatenativos son dc , Factor , Onyx, PostScript , RPL , Staapl, [ 9 ] y algunos experimentales y descontinuados, entre ellos: Enchilada, [ 10 ] Om, [ 11 ] XY. [ 12 ]
La mayoría de los lenguajes concatenativos existentes se basan en pilas . Esto no es necesario y se han propuesto otros modelos. [ 12 ] [ 10 ] [ 11 ] Los lenguajes concatenativos se utilizan actualmente para programación embebida , [ 9 ] de escritorio y web , como lenguajes de destino y para fines de investigación.
La mayoría de los lenguajes concatenativos son de tipado dinámico . Las excepciones incluyen el lenguaje de tipado estático Cat [ 13 ] y su sucesor, Kitten. [ 14 ]
Véase también
Referencias
- ↑ Diggins, Christopher (31 de diciembre de 2008). "¿Qué es un lenguaje concatenativo?" . Dr. Dobb's Journal . Consultado el 1 de julio de 2013 .
- ↑ "Nombre del código, no de los valores" . Concatenative.org . Consultado el 13 de septiembre de 2013 .
- ↑ "Lenguaje concatenativo" . Concatenative.org . Concatenative.org. 13 de septiembre de 2013. Archivado del original el 8 de octubre de 2024. Consultado el 13 de septiembre de 2013 .
- ↑ "Fundamentos de Joy, un lenguaje funcional" . Archivado del original el 15 de enero de 2011.
- 1 2 Purdy, Jon (12 de febrero de 2012). "Por qué importa la programación concatenativa" . The Big Mud Puddle . Recuperado el 12 de agosto de 2025 .
- ↑ von Thun, Manfred (2011). "Joy comparado con otros lenguajes funcionales" . Archivado del original el 6 de octubre de 2011.
- ↑ von Thun, Manfred (2009). "Fundamentos matemáticos de la alegría" . Archivado del original el 31 de julio de 2010.
- ↑ Baker, Henry (1993). Lógica lineal y pilas de permutación: El cuarto será el primero (Informe). Nimble Computer Corporation. Archivado del original el 24 de julio de 2014. Recuperado el 1 de julio de 2013 a través de Home.pipeline.com.
- 1 2 Schouten, Tom (zwizwa). "Staapl: Adelante con Scheme para controladores embebidos" . Zwizwa LLC . Recuperado el 12 de agosto de 2025 .
- 1 2 rápido; Nuevo Dave; jacintheford; goren (2 de enero de 2024). "Enchilada" . Concatenativa.org . Consultado el 12 de agosto de 2025 .
- 1 2 sparist. "El lenguaje de programación Om" . Om-language.com . Consultado el 12 de agosto de 2025 .
- 1 2 Apter, Stevan (2004). "El lenguaje concatenativo XY" . Sin bucles apestosos . Recuperado el 12 de agosto de 2025 .
- ↑ "Especificación del gato" . Cat-language.com. Archivado del original el 5 de febrero de 2015. Consultado el 1 de julio de 2013 .
- ↑ Purdy, Jon. "Lenguaje de programación Kitten" . kittenlang.org . Consultado el 31 de marzo de 2025 .
Enlaces externos
- Concatenative.org: Wiki , sobre programación concatenativa
- lenguajes de programación concatenativos