Historia de los lenguajes de programación - History of programming languages
Historia de la informática |
---|
Hardware |
Software |
Ciencias de la Computación |
Conceptos modernos |
Por país |
Cronología de la informática |
Glosario de informática |
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 .
Algunos lenguajes notables que se desarrollaron en este período incluyen:
|
Estableciendo paradigmas fundamentales
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:
- Speakeasy , desarrollado en 1964 en el Laboratorio Nacional Argonne (ANL) por Stanley Cohen , es unpaquete numéricoOOPS (sistema de programación orientado a objetos , muy parecido a los posteriores MATLAB , IDL y Mathematica ). Speakeasy tiene una clarasintaxis básica de Fortran . Primero abordó la computación física eficiente internamente en ANL, se modificó para uso de investigación (como "Modeleasy") para la Junta de la Reserva Federal a principios de la década de 1970 y luego se puso a disposición comercial; Speakeasy y Modeleasy todavía están en uso actualmente.
- Simula , inventado a finales de la década de 1960 por Nygaard y Dahl como un superconjunto de Algol 60, fue el primer lenguaje diseñado para admitir la programación orientada a objetos .
- C , uno de los primeroslenguajes de programación de sistemas , fue desarrollado por Dennis Ritchie y Ken Thompson en Bell Labs entre 1969 y 1973.
- Smalltalk (mediados de la década de 1970) proporcionó un diseño completo de un lenguaje orientado a objetos.
- Prolog , diseñado en 1972 por Colmerauer , Roussel y Kowalski , fue el primerlenguaje de programación lógica .
- ML construyó un sistema de tipos polimórficos (inventado por Robin Milner en 1973) sobre Lisp, siendo pionero en los lenguajes de programación funcional de tipo estático .
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:
Década de 1980: consolidación, módulos, rendimiento
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
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:
- Mayor soporte para la programación funcional en los lenguajes principales utilizados comercialmente, incluida la programación funcional pura para hacer que el código sea más fácil de razonar y más fácil de paralelizar (tanto a nivel micro como macro)
- Se construye para admitir programación concurrente y distribuida .
- Mecanismos para agregar verificación de seguridad y confiabilidad al lenguaje: verificación estática extendida, tipificación dependiente , control de flujo de información, seguridad de subprocesos estáticos .
- Mecanismos alternativos de componibilidad y modularidad: mixins , traits , typeclasses , delegados , aspectos .
- Desarrollo de software orientado a componentes.
-
Metaprogramación , reflexión o acceso al árbol de sintaxis abstracta
- Programación orientada a aspectos o AOP que permite a los desarrolladores insertar código en otro módulo o clase en "puntos de unión"
- Lenguajes específicos de dominio y generación de código
- Mayor interés por la distribución y la movilidad.
- Integración con bases de datos, incluidas XML y bases de datos relacionales .
- El código abierto como filosofía de desarrollo para lenguajes, incluida la colección de compiladores GNU y lenguajes como PHP , Python , Ruby y Scala .
- Más interés en lenguajes de programación visual como Scratch , LabVIEW y PWCT
- Lenguajes enormemente paralelos para codificar unidades de procesamiento de gráficos de GPU de procesador 2000 y matrices de supercomputadoras, incluido OpenCL
- Investigación preliminar sobre lenguajes de programación de computación cuántica (aún no implementables)
- Investigación temprana en la aplicación de técnicas de inteligencia artificial para generar código como el uso de GPT-3
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
Algunas personas clave que ayudaron a desarrollar lenguajes de programación:
- Alan Cooper , desarrollador de Visual Basic .
- Alan Kay , trabajo pionero en programación orientada a objetos y creador de Smalltalk .
- Anders Hejlsberg , desarrollador de Turbo Pascal , Delphi , C # y TypeScript .
- Arthur Whitney , desarrollador de A + , k y q .
- Bertrand Meyer , inventor de Eiffel .
- Bjarne Stroustrup , desarrollador de C ++ .
- Brendan Eich , desarrollador de JavaScript .
- Brian Kernighan , coautor del primer libro sobre el lenguaje de programación C con Dennis Ritchie , coautor de los lenguajes de programación AWK y AMPL .
- Chuck Moore , inventor de Forth , el primer lenguaje de programación concatenativo y un nombre prominente en el diseño de microprocesadores de máquinas apiladoras .
- Chris Lattner , creador de Swift y LLVM .
- Cleve Moler , creador de MATLAB .
- Dennis Ritchie , inventor de C . Sistema operativo Unix, sistema operativo Plan 9.
- Douglas McIlroy , influyó y diseñó lenguajes como SNOBOL , TRAC , PL / I , ALTRAN , TMG y C ++ .
- Grace Hopper , la primera en utilizar el término compilador y desarrollador de FLOW-MATIC , influyó en el desarrollo de COBOL . Lenguajes de programación independientes de la máquina popularizados y el término " depuración ".
- Guido van Rossum , creador de Python .
- James Gosling , desarrollador principal de Java y su precursor, Oak .
- Jean Ichbiah , diseñador jefe de Ada , Ada 83 .
- Jean-Yves Girard , co-inventor del cálculo lambda polimórfico (Sistema F).
- Jeff Bezanson , diseñador principal y uno de los desarrolladores principales de Julia .
- Jeffrey Snover , inventor de PowerShell .
- Joe Armstrong , creador de Erlang .
- John Backus , inventor de Fortran y colaboró en el diseño de ALGOL 58 y ALGOL 60 .
- John C. Reynolds , co-inventor del cálculo lambda polimórfico (Sistema F).
- John McCarthy , inventor de LISP .
- John von Neumann , creador del concepto de sistema operativo .
- Graydon Hoare , inventor de Rust .
- Ken Thompson , inventor de B , Go , Inferno (sistema operativo) y coautor del sistema operativo Unix .
- Kenneth E. Iverson , desarrollador de APL y co-desarrollador de J junto con Roger Hui .
- Konrad Zuse , diseñó el primer lenguaje de programación de alto nivel , Plankalkül (que influyó en ALGOL 58 ).
- Kristen Nygaard , pionera en la programación orientada a objetos, co-inventó Simula .
- Larry Wall , creador del lenguaje de programación Perl (ver Perl y Raku ).
- Martin Odersky , creador de Scala y anteriormente colaborador del diseño de Java .
- Martin Richards desarrolló el lenguaje de programación BCPL , precursor de los lenguajes B y C.
- Nathaniel Rochester , inventor del primer ensamblador (IBM 701).
- Niklaus Wirth , inventor de Pascal , Modula y Oberon .
- Ole-Johan Dahl , pionero en la programación orientada a objetos, co-inventó Simula .
- Rasmus Lerdorf , creador de PHP .
- Rich Hickey , creador de Clojure .
- Jean Paoli , co-creador de XML
- Robert Gentleman , co-creador de R .
- Robert Griesemer , cocreador de Go .
- Robin Milner , inventor de ML , y comparte el crédito por la inferencia de tipos polimórficos de Hindley-Milner .
- Rob Pike , coautor del sistema operativo Go , Inferno (sistema operativo) y Plan 9 (sistema operativo) .
- Ross Ihaka , co-creador de R .
- Stanley Cohen , inventor de Speakeasy , que fue creado con un sistema de programación orientado a objetos OOPS, la primera instancia, en 1964.
- Stephen Wolfram , creador de Mathematica .
- Brad Cox , cocreador de Objective-C .
- Walter Bright , creador de D .
- Yukihiro Matsumoto , creador de Ruby .
- Ryan Dahl , creador de Node.js .
Ver también
Referencias
- ^ Hopper (1978) p. dieciséis.
- ^ 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.
- ^ Tesis doctoral de Corrado Böhm
- ^ 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
- ↑ 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)
- ^ Sebesta, WS (2006). Conceptos de lenguajes de programación . pag. 44. ISBN 978-0-321-33025-3.
- ^ "Muere John Backus creador de Fortran - Tecnología y gadgets - NBC News" . NBC News. 2007-03-20 . Consultado el 25 de abril de 2010 .
- ^ "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 .
- ^ 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 .
- ^ 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).
- ^ "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 .
- ^ Hopper (1978) p. dieciséis.
- ^ Sammet (1969) p. 316
- ^ Sammet (1978) p. 204.
-
^ 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.
- ^ 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 .
- ^ TIOBE (25 de mayo de 2018). "TIOBE Index, Top 100 lenguajes de programación según TIOBE Index" . www.tiobe.com . TIOBE_index .
- ^ "Octoverso 2018 de GitHub" . Archivado desde el original el 22 de marzo de 2019.
- ^ 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.