La historia de los lenguajes de programación abarca desde la documentación de las primeras computadoras mecánicas hasta las herramientas modernas para el desarrollo de software . Los primeros lenguajes de programación eran altamente especializados y dependían de la notación matemática y una sintaxis igualmente oscura . [1] A lo largo del siglo XX, la investigación en la teoría de compiladores condujo a la creación de lenguajes de programación de alto nivel , que utilizan una sintaxis más accesible para comunicar instrucciones.
El primer lenguaje de programación de alto nivel fue Plankalkül , creado por Konrad Zuse entre 1942 y 1945. [2] El primer lenguaje de alto nivel en tener un compilador asociado fue creado por Corrado Böhm en 1951, para su tesis doctoral . [3] El primer lenguaje disponible comercialmente fue FORTRAN (FORmula TRANslation), desarrollado en 1956 (el primer manual apareció en 1956, pero se desarrolló por primera vez en 1954) por un equipo dirigido por John Backus en IBM .
Entre 1842 y 1849, Ada Lovelace tradujo las memorias del matemático italiano Luigi Menabrea sobre la última máquina propuesta por Charles Babbage : la máquina analítica ; complementó las memorias con notas que especificaban en detalle un método para calcular números de Bernoulli con la máquina, reconocida por la mayoría de los historiadores como el primer programa informático publicado del mundo. [4]
Tanto los telares Jacquard como la máquina diferencial de Charles Babbage fueron diseñados para utilizar tarjetas perforadas , [5] [6] que describirían la secuencia de operaciones que sus máquinas programables debían realizar.
Los primeros códigos informáticos estaban especializados para sus aplicaciones: por ejemplo, Alonzo Church fue capaz de expresar el cálculo lambda de forma formulística y la máquina de Turing era una abstracción del funcionamiento de una máquina marcadora de cinta.
En la década de 1940 se crearon los primeros ordenadores eléctricos reconocibles como modernos. La velocidad y la capacidad de memoria limitadas obligaron a los programadores a escribir programas en lenguaje ensamblador ajustados a mano . Con el tiempo, se comprendió que programar en lenguaje ensamblador requería un gran esfuerzo intelectual. [ cita requerida ]
Una de las primeras propuestas para un lenguaje de programación de alto nivel fue Plankalkül , desarrollado por Konrad Zuse para su computadora Z1 entre 1942 y 1945, pero no implementado en ese momento. [7]
Los primeros lenguajes de programación funcionales diseñados para comunicar instrucciones a una computadora fueron escritos a principios de la década de 1950. Short Code de John Mauchly , propuesto en 1949, fue uno de los primeros lenguajes de alto nivel desarrollados para una computadora electrónica . [8] A diferencia del código de máquina , las instrucciones de Short Code representaban expresiones matemáticas en forma comprensible. Sin embargo, el programa tenía que ser interpretado en código de máquina cada vez que se ejecutaba, lo que hacía que el proceso fuera mucho más lento que ejecutar el código de máquina equivalente.
A principios de la década de 1950, Alick Glennie desarrolló Autocode , posiblemente el primer lenguaje de programación compilado, en la Universidad de Manchester . En 1954, RA Brooker desarrolló una segunda versión del lenguaje, conocida como "Mark 1 Autocode", para el Mark 1. Brooker, junto con la Universidad de Manchester, también desarrolló un autocódigo para el Ferranti Mercury en la década de 1950. La versión para el EDSAC 2 fue ideada por Douglas Hartree del Laboratorio de Matemáticas de la Universidad de Cambridge en 1961. Conocido como EDSAC 2 Autocode, fue un desarrollo directo de Mercury Autocode adaptado a las circunstancias locales y se destacó por su optimización de código objeto y diagnósticos de lenguaje fuente que eran avanzados para la época. Atlas Autocode , un hilo de desarrollo contemporáneo pero separado, se desarrolló para la máquina Atlas 1 de la Universidad de Manchester .
En 1954, un equipo dirigido por John Backus inventó FORTRAN en IBM ; fue el primer lenguaje de propósito general de alto nivel ampliamente utilizado que tenía una implementación funcional, en contraste con solo un diseño en papel. [9] [10] Cuando se introdujo FORTRAN por primera vez, se lo vio con escepticismo debido a errores, retrasos en el desarrollo y la eficiencia comparativa de los programas "codificados a mano" escritos en ensamblador. [11] Sin embargo, en un mercado de hardware que estaba evolucionando rápidamente, el lenguaje finalmente se hizo conocido por su eficiencia. Sigue siendo un lenguaje popular para la computación de alto rendimiento [12] y se usa para programas que evalúan y clasifican las supercomputadoras TOP500 más rápidas del mundo . [13]
Otro lenguaje de programación temprano fue ideado por Grace Hopper en los EE. UU., llamado FLOW-MATIC . Fue desarrollado para el UNIVAC I en Remington Rand durante el período de 1955 a 1959. Hopper descubrió que los clientes de procesamiento de datos comerciales no se sentían cómodos con la notación matemática y, a principios de 1955, ella y su equipo escribieron una especificación para un lenguaje de programación en inglés e implementaron un prototipo. [14] El compilador FLOW-MATIC se puso a disposición del público a principios de 1958 y estuvo sustancialmente completo en 1959. [15] Flow-Matic fue una gran influencia en el diseño de COBOL , ya que solo este y su descendiente directo AIMACO estaban en uso en ese momento. [16]
Otros lenguajes que todavía se utilizan en la actualidad son LISP (1958), inventado por John McCarthy , y COBOL (1959), creado por el Short Range Committee. Otro hito a finales de los años 50 fue la publicación, por parte de un comité de informáticos estadounidenses y europeos, de "un nuevo lenguaje para algoritmos"; el Informe ALGOL 60 (el " lenguaje ALGOrítmico "). Este informe consolidó muchas de las ideas que circulaban en ese momento y presentó tres innovaciones clave en el lenguaje :
Otra innovación, relacionada con ésta, estaba en cómo se describía el lenguaje:
ALGOL 60 fue particularmente influyente en el diseño de lenguajes posteriores, algunos de los cuales pronto se hicieron más populares. Los grandes sistemas de Burroughs fueron diseñados para ser programados en un subconjunto extendido de ALGOL.
Las ideas clave de ALGOL continuaron y se produjo ALGOL 68 :
Las numerosas características poco utilizadas del lenguaje ALGOL 68 (por ejemplo, bloques concurrentes y paralelos) y su complejo sistema de atajos sintácticos y conversiones automáticas de tipos lo hicieron impopular entre los implementadores y le valieron una reputación de ser difícil . Niklaus Wirth , de hecho, abandonó el comité de diseño para crear el lenguaje Pascal más simple.
Algunos idiomas notables que se desarrollaron en este período incluyen:
El período que va desde finales de los años 1960 hasta finales de los años 1970 trajo consigo un importante florecimiento de los lenguajes de programación. La mayoría de los principales paradigmas lingüísticos que se utilizan actualmente se inventaron en este período: [ ¿Investigación original? ]
En los años 1960 y 1970 también hubo un debate considerable sobre los méritos de la " programación estructurada ", que esencialmente significaba programar sin el uso de goto
. Una fracción significativa de programadores creía que, incluso en lenguajes que proporcionan goto
, es un mal estilo de programación usarlo excepto en circunstancias excepcionales. Este debate estaba estrechamente relacionado con el diseño de lenguajes: algunos lenguajes no tenían goto
, lo que obligaba al uso de programación estructurada.
Para proporcionar tiempos de compilación aún más rápidos, algunos lenguajes fueron estructurados para " compiladores de una sola pasada " que esperan que las rutinas subordinadas se definan primero, como en Pascal , donde la rutina principal, o función controladora, es la sección final de la lista del programa.
Algunos idiomas notables que se desarrollaron en este período incluyen:
Los años 1980 fueron años de relativa consolidación de los lenguajes imperativos . En lugar de inventar nuevos paradigmas, todos estos movimientos elaboraron sobre las ideas inventadas en la década anterior. C++ combinó la programación orientada a objetos y la programación de sistemas. El gobierno de los Estados Unidos estandarizó Ada , un lenguaje de programación de sistemas destinado a ser utilizado por contratistas de defensa. En Japón y en otros lugares, se gastaron grandes sumas de dinero en la investigación de los llamados lenguajes de programación de quinta generación que incorporaban construcciones de programación lógica. La comunidad de lenguajes funcionales se movió para estandarizar ML y Lisp. La investigación en Miranda , un lenguaje funcional con evaluación diferida , comenzó a afianzarse en esta década.
Una nueva tendencia importante en el diseño de lenguajes fue un mayor enfoque en la programación para sistemas a gran escala mediante el uso de módulos , o unidades organizativas de código a gran escala. Modula , Ada y ML desarrollaron sistemas de módulos notables en la década de 1980. Los sistemas de módulos a menudo se combinaban con construcciones de programación genéricas : los genéricos eran, en esencia, módulos parametrizados [ cita requerida ] (ver también Polimorfismo (ciencia informática) ).
Aunque no aparecieron nuevos paradigmas importantes para los lenguajes de programación imperativa, muchos investigadores ampliaron las ideas de los lenguajes anteriores y las adaptaron a nuevos contextos. Por ejemplo, los lenguajes de los sistemas Argus y Emerald adaptaron la programación orientada a objetos a los sistemas informáticos distribuidos .
La década de 1980 también trajo consigo avances en la implementación de lenguajes de programación. El movimiento RISC ( ordenador de conjunto de instrucciones reducido ) en arquitectura informática postuló que el hardware debería estar diseñado para compiladores en lugar de para programadores humanos de ensamblaje. Con la ayuda de mejoras en la velocidad de la unidad central de procesamiento (CPU) que permitieron métodos de compilación cada vez más agresivos, el movimiento RISC despertó un mayor interés en la tecnología de compiladores para lenguajes de alto nivel.
La tecnología del lenguaje continuó en esta línea hasta bien entrada la década de 1990.
Algunos idiomas notables que se desarrollaron en este período incluyen:
El rápido crecimiento de Internet a mediados de los años 1990 fue el siguiente gran acontecimiento histórico en los lenguajes de programación. Al abrir una plataforma radicalmente nueva para los sistemas informáticos, Internet creó una oportunidad para que se adoptaran nuevos lenguajes. En particular, el lenguaje de programación JavaScript alcanzó popularidad debido a su temprana integración con el navegador web Netscape Navigator. Varios otros lenguajes de scripting lograron un uso generalizado en el desarrollo de aplicaciones personalizadas para servidores web como PHP. La década de 1990 no vio ninguna novedad fundamental en los lenguajes imperativos , sino mucha recombinación y maduración de viejas ideas. Esta era comenzó la difusión de los lenguajes funcionales . Una gran filosofía impulsora fue la productividad del programador. Surgieron muchos lenguajes de desarrollo rápido de aplicaciones (RAD), que generalmente venían con un entorno de desarrollo integrado (IDE), recolección de basura y eran descendientes de lenguajes más antiguos. Todos estos lenguajes estaban orientados a objetos . Estos incluían Object Pascal , Objective Caml (rebautizado como OCaml ), Visual Basic y Java . Java en particular recibió mucha atención.
Más radicales e innovadores que los lenguajes RAD fueron los nuevos lenguajes de scripting . Estos no descendían directamente de otros lenguajes y presentaban nuevas sintaxis y una incorporación más liberal de características. Muchos consideran que estos lenguajes de scripting son más productivos que incluso los lenguajes RAD, pero a menudo debido a opciones que hacen que los programas pequeños sean más simples pero los programas grandes más difíciles de escribir y mantener. [ cita requerida ] Sin embargo, los lenguajes de scripting llegaron a ser los más destacados utilizados en conexión con la Web.
Algunos lenguajes de programación incluyeron otros lenguajes en su distribución para ahorrar tiempo de desarrollo. Por ejemplo, tanto Python como Ruby incluyeron Tcl para soportar la programación GUI a través de bibliotecas como Tkinter .
Algunos idiomas notables que se desarrollaron en este período incluyen:
La evolución de los lenguajes de programación continúa, tanto en la industria como en la investigación. Algunas de las tendencias recientes incluyen:
Muchas grandes empresas tecnológicas introdujeron múltiples lenguajes de programación nuevos que están diseñados para satisfacer sus necesidades y brindar soporte de primera clase para sus plataformas. Por ejemplo:
Algunos lenguajes notables desarrollados durante este período y que figuran en el índice TIOBE (Top 100 programming language) a febrero de 2024 incluyen: [20] [21]
Otros nuevos lenguajes de programación incluyen Elm , Ballerina , Red , Crystal , Haxe , V (Vlang) , Reason y Mojo .
Algunas personas clave que ayudaron a desarrollar lenguajes de programación:
El LCF de Edimburgo, incluido el intérprete ML, se implementó en Lisp.