
La teoría de lenguajes de programación ( PLT , por sus siglas en inglés) es una rama de la informática que se ocupa del diseño, la implementación, el análisis, la caracterización y la clasificación de lenguajes formales conocidos como lenguajes de programación . La teoría de lenguajes de programación está estrechamente relacionada con otros campos, como la lingüística , las matemáticas y la ingeniería de software .
Historia
En cierto modo, la historia de la teoría de los lenguajes de programación precede incluso al desarrollo de los propios lenguajes. El cálculo lambda , desarrollado por Alonzo Church y Stephen Cole Kleene en la década de 1930, es considerado por algunos como el primer lenguaje de programación del mundo, aunque su propósito era modelar la computación en lugar de servir como herramienta para que los programadores describieran algoritmos a un sistema informático. Muchos lenguajes de programación funcional modernos se han descrito como una "capa fina" sobre el cálculo lambda, [ 2 ] y muchos se describen fácilmente en términos de este.
El primer lenguaje de programación inventado fue Plankalkül , diseñado por Konrad Zuse en la década de 1940, pero no se dio a conocer públicamente hasta 1972 y no se implementó hasta 1998. El primer lenguaje de programación de alto nivel ampliamente conocido y exitoso fue FORTRAN (de Formula Translation), desarrollado entre 1954 y 1957 por un equipo de investigadores de IBM liderado por John Backus . El éxito de FORTRAN propició la formación de un comité de científicos para desarrollar un lenguaje informático "universal"; el resultado de su esfuerzo fue ALGOL 58. Por otra parte, John McCarthy del Instituto Tecnológico de Massachusetts (MIT) desarrolló Lisp , el primer lenguaje con origen académico que tuvo éxito. Gracias al éxito de estos esfuerzos iniciales, los lenguajes de programación se convirtieron en un tema de investigación activo en la década de 1960 y posteriormente.
Cronología
Otros eventos clave en la historia de la teoría de los lenguajes de programación desde entonces:
- década de 1950
- Noam Chomsky desarrolló la jerarquía de Chomsky en el campo de la lingüística, un descubrimiento que ha tenido un impacto directo en la teoría de los lenguajes de programación y otras ramas de la informática.
- década de 1960
- En 1962, Ole-Johan Dahl y Kristen Nygaard desarrollaron el lenguaje Simula , considerado ampliamente como el primer ejemplo de un lenguaje de programación orientado a objetos . Simula también introdujo el concepto de corrutinas .
- En 1964, Peter Landin fue el primero en darse cuenta de que el cálculo lambda de Church podía utilizarse para modelar lenguajes de programación. Introdujo la máquina SECD , que "interpreta" expresiones lambda.
- En 1965, Landin introduce el operador J , que es esencialmente una forma de continuación .
- En 1966, Landin presentó ISWIM , un lenguaje de programación abstracto, en su artículo "Los próximos 700 lenguajes de programación" . Este lenguaje influyó en el diseño de lenguajes que dieron origen a Haskell .
- En 1966, Corrado Böhm introdujo el idioma CUCH (Curry-Church). [ 3 ]
- En 1967, Christopher Strachey publicó su influyente conjunto de apuntes de clase titulados Conceptos fundamentales en lenguajes de programación , en los que introdujo la terminología de valores R, valores L , polimorfismo paramétrico y polimorfismo ad hoc .
- En 1969, J. Roger Hindley publicó The Principal Type-Scheme of an Object in Combinatory Logic , que más tarde se generalizó en el algoritmo de inferencia de tipos de Hindley-Milner .
- En 1969, Tony Hoare introdujo la lógica de Hoare , una forma de semántica axiomática .
- En 1969, William Alvin Howard observó que un sistema de demostración de "alto nivel" , denominado deducción natural , puede interpretarse directamente en su versión intuicionista como una variante tipificada del modelo de computación conocido como cálculo lambda . Esto se conoció como la correspondencia de Curry-Howard .
- década de 1970
- En 1970, Dana Scott publicó por primera vez su trabajo sobre semántica denotacional .
- En 1972 se desarrollaron la programación lógica y Prolog , lo que permitió expresar los programas informáticos mediante la lógica matemática.
- Un equipo de científicos de Xerox PARC, liderado por Alan Kay, desarrolla Smalltalk , un lenguaje orientado a objetos ampliamente conocido por su innovador entorno de desarrollo.
- En 1974, John C. Reynolds descubre el Sistema F. Este ya había sido descubierto en 1971 por el lógico matemático Jean-Yves Girard .
- A partir de 1975, Gerald Jay Sussman y Guy Steele desarrollaron el lenguaje Scheme , un dialecto de Lisp que incorporaba alcance léxico , un espacio de nombres unificado y elementos del modelo de actores , incluidas continuaciones de primera clase .
- En su discurso de entrega del Premio Turing de 1977, Backus criticó duramente el estado actual de los lenguajes industriales y propuso una nueva clase de lenguajes de programación, ahora conocidos como lenguajes de programación a nivel de funciones .
- En 1977, Gordon Plotkin presentó Programming Computable Functions , un lenguaje funcional abstracto tipado.
- En 1978, Robin Milner introdujo el algoritmo de inferencia del sistema de tipos Hindley-Milner para el lenguaje ML . La teoría de tipos se aplicó como disciplina a los lenguajes de programación, y esta aplicación ha propiciado grandes avances en la teoría de tipos a lo largo de los años.
- década de 1980
- En 1981, Gordon Plotkin publicó su artículo sobre semántica operacional estructurada .
- En 1988, Gilles Kahn publicó su artículo sobre semántica natural .
- Surgieron cálculos de procesos , como el Cálculo de Sistemas Comunicantes de Robin Milner y el modelo de procesos secuenciales comunicantes de CAR Hoare , así como modelos de concurrencia similares, como el modelo de actores de Carl Hewitt .
- En 1985, el lanzamiento de Miranda despertó un interés académico por los lenguajes de programación puramente funcionales con evaluación perezosa . Se formó un comité para definir un estándar abierto, lo que dio como resultado el lanzamiento del estándar Haskell 1.0 en 1990.
- Bertrand Meyer creó la metodología de diseño por contrato y la incorporó al lenguaje Eiffel .
- década de 1990
- Gregor Kiczales , Jim Des Rivieres y Daniel G. Bobrow publicaron el libro El arte del protocolo metaobjeto .
- Eugenio Moggi y Philip Wadler introdujeron el uso de mónadas para estructurar programas escritos en lenguajes de programación funcional .
Subdisciplinas y campos relacionados
Existen diversos campos de estudio que se enmarcan dentro de la teoría de lenguajes de programación o que ejercen una profunda influencia sobre ella; muchos de ellos presentan una considerable superposición. Además, la teoría de lenguajes de programación utiliza muchas otras ramas de las matemáticas , como la teoría de la computabilidad , la teoría de categorías y la teoría de conjuntos .
semántica formal
La semántica formal es la especificación formal del comportamiento de los programas informáticos y los lenguajes de programación. Tres enfoques comunes para describir la semántica o el "significado" de un programa informático son la semántica denotacional , la semántica operacional y la semántica axiomática .
teoría de tipos
La teoría de tipos es el estudio de los sistemas de tipos ; que son "un método sintáctico manejable para probar la ausencia de ciertos comportamientos de los programas clasificando frases según los tipos de valores que computan". [ 4 ] Muchos lenguajes de programación se distinguen por las características de sus sistemas de tipos.
Análisis y transformación de programas
El análisis de programas consiste en examinar un programa y determinar sus características clave (como la ausencia de clases de errores ). La transformación de programas es el proceso de convertir un programa de un formato (lenguaje) a otro.
Análisis comparativo de lenguajes de programación
El análisis comparativo de lenguajes de programación busca clasificar los lenguajes en diferentes tipos según sus características; las categorías amplias de lenguajes se conocen a menudo como paradigmas de programación .
Programación genérica y metaprogramación
La metaprogramación es la generación de programas de orden superior que, al ejecutarse, producen programas como resultado (posiblemente en un lenguaje diferente o en un subconjunto del lenguaje original).
Lenguajes específicos de dominio
Los lenguajes específicos de dominio son aquellos construidos para resolver de manera eficiente problemas en un dominio determinado, o parte del mismo.
Construcción de compiladores
La teoría de compiladores es la teoría de la escritura de compiladores (o, más generalmente, traductores ); programas que traducen un programa escrito en un lenguaje a otro. Las acciones de un compilador se dividen tradicionalmente en análisis sintáctico ( escaneo y análisis sintáctico ), análisis semántico (determinación de lo que debe hacer un programa), optimización (mejora del rendimiento de un programa según alguna métrica; normalmente la velocidad de ejecución) y generación de código (generación y salida de un programa equivalente en algún lenguaje de destino; a menudo la arquitectura del conjunto de instrucciones de una unidad central de procesamiento (CPU)).
Sistemas de tiempo de ejecución
Los sistemas de tiempo de ejecución se refieren al desarrollo de entornos de ejecución de lenguajes de programación y sus componentes, incluidas las máquinas virtuales , la recolección de basura y las interfaces de funciones externas .
Revistas, publicaciones y conferencias
Las conferencias son el principal foro para presentar investigaciones en lenguajes de programación. Entre las conferencias más conocidas se encuentran el Simposio sobre Principios de Lenguajes de Programación (POPL), el Simposio sobre Diseño e Implementación de Lenguajes de Programación (PLDI), la Conferencia Internacional sobre Programación Funcional (ICFP), la Conferencia Internacional sobre Programación Orientada a Objetos, Sistemas, Lenguajes y Aplicaciones ( OOPSLA ) y la Conferencia Internacional sobre Soporte Arquitectónico para Lenguajes de Programación y Sistemas Operativos (ASPLOS).
Entre las revistas destacadas que publican investigaciones sobre PLT se incluyen ACM Transactions on Programming Languages and Systems (TOPLAS), Journal of Functional Programming (JFP), Journal of Functional and Logic Programming y Higher-Order and Symbolic Computation .
Véase también
Referencias
- ↑ Abelson, Harold ; Sussman, Gerald Jay ; Sussman, Julie (1996). Estructura e interpretación de programas informáticos (2.ª ed.). Cambridge, Massachusetts: MIT Press . ISBN 0-262-01153-0OCLC 34576857
- ↑ "Modelos de computación" . wiki.c2.com . 3 de diciembre de 2014. Archivado del original el 30 de noviembre de 2020.
- ↑ C. Böhm y W. Gross (1996). Introducción al CUCH. En ER Caianiello (ed.), Teoría de los autómatas , p. 35–64.
- ↑ Benjamin C. Pierce. 2002. Tipos y lenguajes de programación . MIT Press, Cambridge, Massachusetts, EE. UU.
Lecturas adicionales
- Abadi, Martín y Cardelli, Luca . Una teoría de los objetos . Springer-Verlag.
- Michael JC Gordon . Teoría de los lenguajes de programación y su implementación . Prentice Hall.
- Gunter, Carl y Mitchell, John C. (eds.). Aspectos teóricos de los lenguajes de programación orientados a objetos: tipos, semántica y diseño de lenguajes . MIT Press.
- Harper, Robert . Fundamentos prácticos de los lenguajes de programación . Versión preliminar.
- Knuth, Donald E. (2003). Artículos seleccionados sobre lenguajes de programación . Stanford, California: Centro para el Estudio del Lenguaje y la Información.
- Mitchell, John C. Fundamentos de los lenguajes de programación .
- Mitchell, John C. Introducción a la teoría de los lenguajes de programación .
- O'Hearn, Peter W. y Tennent, Robert D. (1997). Lenguajes tipo ALGOL . Avances en informática teórica. Birkhauser, Boston.
- Pierce, Benjamin C. (2002). Tipos y lenguajes de programación . MIT Press.
- Pierce, Benjamin C. Temas avanzados en tipos y lenguajes de programación .
- Pierce, Benjamin C. et al. (2010). Fundamentos del software .
Enlaces externos
- Lambda the Ultimate , un blog comunitario para el debate profesional y repositorio de documentos sobre teoría de lenguajes de programación.
- Grandes obras en lenguajes de programación . Recopiladas por Benjamin C. Pierce ( Universidad de Pensilvania ).
- Artículos clásicos sobre lenguajes de programación y lógica . Recopilados por Karl Crary ( Universidad Carnegie Mellon ).
- Investigación sobre lenguajes de programación . Directorio elaborado por Mark Leone.
- Cálculo lambda: antes y ahora, por Dana S. Scott, para la celebración del centenario de Turing de la ACM.
- Grandes retos en lenguajes de programación . Sesión de panel en POPL 2009.
- teoría de lenguajes de programación