Historia de los lenguajes de programación - History of programming languages

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 se basaban en la notación matemática y una sintaxis igualmente oscura. A lo largo del siglo XX, la investigación en 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. El primer lenguaje de alto nivel en tener un compilador asociado fue creado por Corrado Böhm en 1951, para su tesis doctoral. El primer lenguaje disponible comercialmente fue FORTRAN (FORmula TRANslation), desarrollado en 1956 (el primer manual apareció en 1956, pero desarrollado por primera vez en 1954) por un equipo dirigido por John Backus en IBM .

Historia temprana

Durante 1842-1849, Ada Lovelace tradujo las memorias del matemático italiano Luigi Menabrea sobre la máquina propuesta más nueva de Charles Babbage : el motor analítico ; complementó las memorias con notas que especificaban en detalle un método para calcular los números de Bernoulli con el motor, reconocido por la mayoría de los historiadores como el primer programa informático publicado en el mundo.

Los primeros códigos de computadora se especializaron para sus aplicaciones: por ejemplo, Alonzo Church fue capaz de expresar el cálculo lambda de una manera formulista y la máquina de Turing era una abstracción del funcionamiento de una máquina de marcar con cinta.

Jacquard Looms y Difference Engine de Charles Babbage tenían lenguajes simples para describir las acciones que estas máquinas deberían realizar, por lo que fueron los creadores del primer lenguaje de programación.

Primeros lenguajes de programación

En la década de 1920, se crearon las primeras computadoras modernas reconocibles con energía eléctrica. La velocidad limitada y la capacidad de memoria 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.

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 1963 y 1975, pero no implementado en ese momento.

Los primeros lenguajes de programación en funcionamiento diseñados para comunicar instrucciones a una computadora se escribieron a principios de la década de 1950. El Short Code de John Mauchly , propuesto en 1949, fue uno de los primeros lenguajes de alto nivel jamás desarrollados para una computadora electrónica . A diferencia del código de máquina , las declaraciones de código corto representan expresiones matemáticas en forma comprensible. Sin embargo, el programa tenía que traducirse a 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 Mark 1 . Brooker también desarrolló un código automático para Ferranti Mercury en la década de 1950 junto con la Universidad de Manchester. La versión para EDSAC 2 fue diseñada 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 lenguaje fuente. diagnósticos que fueron 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, FORTRAN fue inventado en IBM por un equipo dirigido por John Backus ; fue el primer lenguaje de programación de propósito general de alto nivel ampliamente utilizado que tuvo una implementación funcional, en lugar de un simple diseño en papel. Cuando se introdujo FORTRAN por primera vez, fue visto con escepticismo debido a errores, retrasos en el desarrollo y la eficiencia comparativa de los programas "codificados a mano" escritos en ensamblador. Sin embargo, en un mercado de hardware que evolucionaba rápidamente; el lenguaje finalmente se hizo conocido por su eficiencia. Sigue siendo un lenguaje popular para la informática de alto rendimiento y se utiliza para programas que comparan y clasifican las supercomputadoras más rápidas del mundo .

Otro lenguaje de programación temprano fue ideado por Grace Hopper en los EE. UU., Llamado FLOW-MATIC . Fue desarrollado para 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. El compilador FLOW-MATIC estuvo disponible públicamente a principios de 1958 y se completó sustancialmente en 1959. Flow-Matic fue una gran influencia en el diseño de COBOL , ya que solo él y su descendiente directo AIMACO estaban en uso real en ese momento.

Otros lenguajes que todavía se utilizan hoy en día incluyen LISP (1958), inventado por John McCarthy y COBOL (1959), creado por el Comité de corto alcance. Otro hito a finales de la década de 1950 fue la publicación, por parte de un comité de científicos informáticos estadounidenses y europeos, de "un nuevo lenguaje para algoritmos"; el ALGOL 60 Informe (el " ALGO rítmico L anguage"). Este informe consolidó muchas ideas que circulaban en ese momento y presentó tres innovaciones lingüísticas clave:

  • estructura de bloques anidados: las secuencias de código y las declaraciones asociadas se pueden agrupar en bloques sin tener que convertirlos en procedimientos separados, nombrados explícitamente;
  • Alcance léxico : un bloque podría tener sus propias variables privadas, procedimientos y funciones, invisibles para el código fuera de ese bloque, es decir, ocultar información .

Otra innovación, relacionada con esto, fue en cómo se describió el lenguaje:

  • se utilizó una notación matemáticamente exacta, la forma Backus-Naur (BNF), para describir la sintaxis del lenguaje. Casi todos los lenguajes de programación posteriores han utilizado una variante de BNF para describir la parte libre de contexto de su sintaxis.

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, produciendo ALGOL 68 :

  • la sintaxis y la semántica se volvieron aún más ortogonales, con rutinas anónimas, un sistema de escritura recursiva con funciones de orden superior, etc .;
  • no solo la parte libre de contexto, sino que la sintaxis y la semántica del lenguaje completo se definieron formalmente, en términos de la gramática de Van Wijngaarden , un formalismo diseñado específicamente para este propósito.

Las muchas características de lenguaje poco utilizadas de Algol 68 (por ejemplo, bloques simultáneos y paralelos) y su complejo sistema de atajos sintácticos y coacciones de tipo automáticas lo hicieron impopular entre los implementadores y le ganó la reputación de ser difícil . Niklaus Wirth abandonó el comité de diseño para crear el lenguaje Pascal más simple .

Fortran

Algunos lenguajes notables que se desarrollaron en este período incluyen:

Estableciendo paradigmas fundamentales

Esquema

El período comprendido entre finales de los sesenta y finales de los setenta trajo consigo un gran florecimiento de los lenguajes de programación. La mayoría de los principales paradigmas del lenguaje actualmente en uso se inventaron en este período:

Cada uno de estos idiomas generó una familia completa de descendientes, y la mayoría de los idiomas modernos cuentan al menos uno de ellos en su ascendencia.

Las décadas de 1960 y 1970 también vieron 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 cree que, incluso en lenguajes que proporcionan "goto", es un mal estilo de programación usarlo excepto en raras circunstancias. Este debate estuvo íntimamente relacionado con el diseño de lenguajes: algunos lenguajes no incluían un "goto" en absoluto, lo que obligaba a programar una programación estructurada al programador o al tutor.

Para proporcionar tiempos de compilación aún más rápidos, algunos lenguajes se estructuraron para " compiladores de una pasada " que esperan que las rutinas subordinadas se definan primero, como con Pascal , donde la rutina principal, o función del controlador, es la sección final de la lista del programa.

Algunos lenguajes notables que se desarrollaron en este período incluyen:

  • 1967 - BCPL (precursor de B)
  • 1968 - Logotipo
  • 1969 - B (precursor de C)
  • 1970 - Pascal
  • 1970 - Adelante
  • 1972 - C                                                   

Década de 1980: consolidación, módulos, rendimiento

MATLAB
Erlang
Tcl

Los 80 fueron años de relativa consolidación en los lenguajes imperativos . En lugar de inventar nuevos paradigmas, todos estos movimientos elaboraron las ideas inventadas en la década anterior. C ++ combinó programación orientada a objetos y de sistemas. El gobierno de los Estados Unidos estandarizó Ada , un lenguaje de programación de sistemas destinado a los contratistas de defensa. En Japón y en otros lugares, se gastaron grandes sumas de dinero investigando 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 perezosa , 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 unían a construcciones de programación genéricas , siendo los genéricos, en esencia, módulos parametrizados (ver también polimorfismo en la programación orientada a objetos ).

Aunque no aparecieron nuevos paradigmas importantes para los lenguajes de programación imperativos, muchos investigadores ampliaron las ideas de 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 distribuidos .

La década de 1980 también trajo avances en la implementación de lenguajes de programación. El movimiento RISC en la arquitectura informática postuló que el hardware debería diseñarse para compiladores en lugar de para programadores de ensamblajes humanos. Con la ayuda de mejoras en la velocidad del procesador que permitieron técnicas de compilación cada vez más agresivas, el movimiento RISC despertó un mayor interés en la tecnología de compilación para lenguajes de alto nivel.

La tecnología del lenguaje continuó en esta línea hasta bien entrada la década de 1990.

Algunos lenguajes notables que se desarrollaron en este período incluyen:

Década de 1990: la era de Internet

Haskell
Lua
PHP
Rebol

El rápido crecimiento de Internet a mediados de la década de 1990 fue el próximo gran evento histórico en los lenguajes de programación. Al abrir una plataforma radicalmente nueva para los sistemas informáticos, Internet creó una oportunidad para la adopción de nuevos lenguajes. En particular, el lenguaje de programación JavaScript ganó popularidad debido a su integración temprana con el navegador web Netscape Navigator. Varios otros lenguajes de secuencias de comandos 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 inició la expansión de los lenguajes funcionales . Una gran filosofía de conducción fue la productividad del programador. Surgieron muchos lenguajes de "desarrollo rápido de aplicaciones" (RAD), que generalmente venían con un IDE , recolección de basura y eran descendientes de lenguajes más antiguos. Todos estos lenguajes estaban orientados a objetos . Estos incluyeron Object Pascal , 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 descendieron directamente de otros lenguajes y presentaban nuevas sintaxis y una incorporación más liberal de funciones. 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 que los programas grandes sean más difíciles de escribir y mantener. Sin embargo, los lenguajes de secuencias de comandos llegaron a ser los más destacados utilizados en conexión con la Web.

Algunos lenguajes notables que se desarrollaron en este período incluyen:

Tendencias actuales

La evolución del lenguaje de programación continúa, tanto en la industria como en la investigación. Algunas de las tendencias recientes han incluido:

Lenguaje de programación D
Groovy
Potencia Shell
Oxido
Rasguño

Algunos lenguajes notables desarrollados durante este período incluyen:

Otros nuevos lenguajes de programación incluyen Red , Crystal , Elm , Hack , Haxe , Zig , Reason y Ballerina .

Personas destacadas

Anders Hejlsberg
Yukihiro Matsumoto
Grace M. Hopper
Bjarne Stroustrup
Niklaus Wirth

Algunas personas clave que ayudaron a desarrollar lenguajes de programación:

Ver también

Referencias

  1. ^ Hopper (1978) p. dieciséis.
  2. ^ Knuth, Donald E .; Pardo, Luis Trabb. "Desarrollo temprano de lenguajes de programación". Enciclopedia de Ciencias y Tecnología de la Computación . Marcel Dekker. 7 : 419–493.
  3. ^ Tesis doctoral de Corrado Böhm
  4. ^ J. Fuegi y J. Francis (octubre-diciembre de 2003), "Lovelace & Babbage y la creación de las 'notas ' de 1843 ", Annals of the History of Computing , 25 (4): 16-26, doi : 10.1109 / MAHC.2003.1253887
  5. En 1998 y 2000 se crearon compiladores para el lenguaje como ejercicio histórico. Rojas, Raúl , et al. (2000). "Plankalkül: El primer lenguaje de programación de alto nivel y su implementación". Institut frame Informatik, Freie Universität Berlin, Informe técnico B-3/2000. (texto completo)
  6. ^ Sebesta, WS (2006). Conceptos de lenguajes de programación . pag. 44. ISBN 978-0-321-33025-3.
  7. ^ "Muere John Backus creador de Fortran - Tecnología y gadgets - NBC News" . NBC News. 2007-03-20 . Consultado el 25 de abril de 2010 .
  8. ^ "CSC-302 99S: clase 02: una breve historia de los lenguajes de programación" . Math.grin.edu. Archivado desde el original el 15 de julio de 2010 . Consultado el 25 de abril de 2010 .
  9. ^ Padua, David (febrero de 2000). "El compilador de FORTRAN I" (PDF) . Computación en Ciencias e Ingeniería . 2 (1): 70–75. doi : 10.1109 / 5992.814661 . Consultado el 7 de noviembre de 2019 .
  10. ^ Eugene Loh (18 de junio de 2010). "El lenguaje de programación ideal de HPC" . Cola . Asociación de Máquinas de Computación. 8 (6).
  11. ^ "HPL - una implementación portátil del punto de referencia Linpack de alto rendimiento para equipos de memoria distribuida" . Consultado el 21 de febrero de 2015 .
  12. ^ Hopper (1978) p. dieciséis.
  13. ^ Sammet (1969) p. 316
  14. ^ Sammet (1978) p. 204.
  15. ^ Gordon, Michael JC (1996). "De LCF a HOL: una breve historia" (PDF) . pag. 3 . Consultado el 4 de mayo de 2015 . La LCF de Edimburgo, incluido el intérprete ML, se implementó en Lisp.
  16. ^ Manjoo, Farhad (29 de julio de 2020). "¿Cómo sabes que un humano escribió esto?" . The New York Times . ISSN  0362-4331 . Consultado el 4 de agosto de 2020 .
  17. ^ TIOBE (25 de mayo de 2018). "TIOBE Index, Top 100 lenguajes de programación según TIOBE Index" . www.tiobe.com . TIOBE_index .
  18. ^ "Octoverso 2018 de GitHub" . Archivado desde el original el 22 de marzo de 2019.
  19. ^ Rojas, Raúl; Hashagen, Ulf (2002). Las primeras computadoras: historia y arquitecturas . Prensa del MIT. pag. 292. ISBN 978-0262681377. Consultado el 25 de octubre de 2013 .

Otras lecturas

  • Rosen, Saul , (editor), Sistemas y lenguajes de programación , McGraw-Hill, 1967.
  • Sammet, Jean E. , Lenguajes de programación: historia y fundamentos , Prentice-Hall, 1969.
  • Sammet, Jean E. (julio de 1972). "Lenguajes de programación: historia y futuro". Comunicaciones de la ACM . 15 (7): 601–610. doi : 10.1145 / 361454.361485 . S2CID  2003242 .
  • Richard L. Wexelblat (ed.): Historia de los lenguajes de programación , Academic Press 1981.
  • Thomas J. Bergin y Richard G. Gibson (eds.): Historia de los lenguajes de programación , Addison Wesley, 1996.

enlaces externos