Historia de los lenguajes de programación.
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. 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 que tuvo 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 más nueva propuesta por Charles Babbage: la máquina analítica; 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.
Jacquard Looms y Difference Engine de Charles Babbage fueron diseñados para utilizar tarjetas perforadas, que describirían la secuencia de operaciones que deberían realizar sus máquinas programables.
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 formulaica y la máquina de Turing era una abstracción del funcionamiento de una máquina de marcar cintas.
Primeros lenguajes de programación
En la década de 1940, se crearon las primeras computadoras eléctricas reconocibles y modernas. La velocidad y la capacidad de memoria limitadas obligaron a los programadores a escribir programas en lenguaje ensamblador ajustados a mano. Finalmente se dio cuenta de que programar en lenguaje ensamblador requería una gran cantidad de 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 1942 y 1945, pero no implementado en ese momento.
Los primeros lenguajes de programación funcionales diseñados para comunicar instrucciones a una computadora se escribieron a principios de la década de 1950. El código corto de John Mauchly, propuesto en 1949, fue uno de los primeros lenguajes de alto nivel jamás desarrollado para una computadora electrónica. A diferencia del código de máquina, las declaraciones de código corto representaban expresiones matemáticas en forma comprensible. Sin embargo, el programa tenía que interpretarse 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, una segunda iteración del lenguaje, conocida como "Mark 1 Autocode," Fue desarrollado para el Mark 1 por R. A. Brooker. Brooker, de la Universidad de Manchester, también desarrolló un código automático para el Ferranti Mercury en la década de 1950. La versión para 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 del código objeto y su lenguaje fuente. diagnósticos avanzados para la época. Atlas Autocode, un hilo de desarrollo contemporáneo pero separado, fue desarrollado 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 propósito general de alto nivel ampliamente utilizado que tuvo una implementación funcional, en contraste con solo un diseño en papel. Cuando FORTRAN se introdujo por primera vez, fue visto con escepticismo debido a errores, retrasos en el desarrollo y la eficiencia comparativa de las aplicaciones "codificadas a mano" Programas 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 500 supercomputadoras más rápidas del mundo.
Grace Hopper ideó otro lenguaje de programación temprano en los EE. UU., llamado FLOW-MATIC. Fue desarrollado para UNIVAC I en Remington Rand durante el período comprendido entre 1955 y 1959. Hopper descubrió que los clientes de procesamiento de datos empresariales se sentían incó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 y implementó un prototipo. El compilador FLOW-MATIC estuvo disponible públicamente a principios de 1958 y estuvo sustancialmente completo en 1959. Flow-Matic fue una influencia importante en el diseño de COBOL, ya que sólo él y su descendiente directo AIMACO estaban en uso 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 Short Range Committee. Otro hito a finales de la década de 1950 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 "ALGOlenguaje rítmico"). Este informe consolidó muchas ideas que circulaban en ese momento y presentó tres innovaciones lingüísticas clave:
- estructura de bloques anidados: secuencias de código y declaraciones asociadas podrían agruparse en bloques sin tener que convertirse en procedimientos separados, explícitamente nombrados;
- scoping lexical: un bloque podría tener sus propias variables privadas, procedimientos y funciones, invisibles a código fuera de ese bloque, es decir, ocultando información.
Otra innovación, relacionada con esto, fue la forma en que se describió el lenguaje:
- una notación matemáticamente exacta, la forma Backus–Naur (BNF), se utilizó para describir la sintaxis del lenguaje. Casi todos los idiomas de programación posteriores han utilizado una variante de BNF para describir la porción sin 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 y produjeron ALGOL 68:
- la sintaxis y la semántica se hicieron aún más ortogonales, con rutinas anónimas, un sistema de escritura recursiva con funciones de orden superior, etc.;
- no sólo la parte sin contexto, sino la sintaxis y semántica del lenguaje completo se definieron formalmente, en términos de la gramática 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 concurrentes y paralelos) y su complejo sistema de atajos sintácticos y coacción automática de tipo hicieron que fuera impopular con los implementadores y ganó su reputación de ser difícil. Niklaus Wirth salió del comité de diseño para crear el lenguaje Pascal más simple.
Algunos lenguajes notables que se desarrollaron en este período incluyen:
- 1951 – Lenguaje de la Asamblea Regional
- 1952 – Autocode
- 1954 – IPL (prevenido a LISP)
- 1955 – FLOW-MATIC (dirigido a COBOL)
- 1957 – FORTRAN (primer compilador)
- 1957 – COMTRAN (precursor a COBOL)
- 1958 – LISP
- 1958 – ALGOL 58
- 1959 – FACT (prevenido a COBOL)
- 1959 – COBOL
- 1959 – RPG
- 1960 – ALGOL 60
- 1962 – APL
- 1962 – Simula
- 1962 – SNOBOL
- 1963 – CPL (prevenido a C)
- 1964 – Habla con calma
- 1964 – BASIC
- 1964 – PL/I
- 1966 – JOSS
- 1966 – MUMPS
- 1967 – BCPL (prevenido a C)
- 1967 – Logo (un lenguaje educativo que posteriormente influyó en Smalltalk y Scratch).
Estableciendo paradigmas fundamentales
El período comprendido entre finales de los años 1960 y finales de los años 1970 trajo un importante florecimiento de los lenguajes de programación. La mayoría de los principales paradigmas lingüísticos actualmente en uso se inventaron en este período:
- Habla con calma., desarrollado en 1964 en el Laboratorio Nacional Argonne (ANL) por Stanley Cohen, es un sistema de programación orientado hacia objetos (OOPS), al igual que el paquete numérico posterior MATLAB, IDL y Mathematica. Talkeasy tiene una clara sintaxis de la fundación de Fortran. Se trató primero de la informática física eficiente internamente en ANL, fue modificado para el uso de la investigación (como "Modeleasy") para la Junta de Reserva Federal a principios de los 70 y luego se puso a disposición comercialmente; Talkeasy y Modeleasy todavía están en uso.
- Simula, inventado a finales de la década de 1960 por Nygaard y Dahl como un superset de ALGOL 60, fue el primer idioma diseñado para apoyar la programación orientada hacia objetos.
- FORTH, el primer lenguaje de programación concatenante fue diseñado por Charles Moore en 1969 como un sistema de desarrollo personal, mientras que en el Observatorio Nacional de Astronomía de Radio (NRAO).
- C, un lenguaje de programación de sistemas tempranos, fue desarrollado por Dennis Ritchie y Ken Thompson en Bell Labs entre 1969 y 1973.
- Smalltalk (mid-1970s) proporcionó un diseño completo de un lenguaje orientado hacia el objeto.
- Prolog, diseñado en 1972 por Alain Colmerauer, Phillipe Roussel y Robert Kowalski, fue el primer lenguaje de programación lógica.
- ML Construyó un sistema de tipo polimorfo (invenido por Robin Milner en 1973) en Lisp, pioneros lenguajes de programación funcionales de tipo estatico. Cada uno de estos idiomas despertó a toda una familia de descendientes, y la mayoría de los idiomas modernos cuentan al menos uno de ellos en su ascendencia.
En las décadas de 1960 y 1970 también se produjo 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
, usarlo es un mal estilo de programación, excepto en circunstancias excepcionales. Este debate estaba estrechamente relacionado con el diseño del lenguaje: 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 se estructuraron para "compiladores de un solo paso" que esperan que las rutinas subordinadas se definan primero, como en Pascal, donde la rutina principal, o función conductora, es la sección final del listado del programa.
Algunos lenguajes notables que se desarrollaron en este período incluyen:
- 1967 – BCPL (prevenido a B)
- 1967 – Logo
- 1969 – B (prevenido a C)
- 1970 – Pascal
- 1970 – Forth
- 1972 – C
- 1972 – Smalltalk
- 1972 – Prolog
- 1973 – ML
- 1975 – Plano
- 1978 – SQL (un lenguaje de consulta, más adelante extendido)
Década de 1980: consolidación, módulos, rendimiento
Los años ochenta fueron años de relativa consolidación en lenguajes imperativos. En lugar de inventar nuevos paradigmas, todos estos movimientos elaboraron sobre las ideas inventadas en la década anterior. C+++ programación combinada de sistemas y orientados al objeto. El gobierno de los Estados Unidos estandarizó Ada, un lenguaje de programación de sistemas diseñado para ser utilizado por contratistas de defensa. En Japón y en otros lugares, se gastaron grandes sumas investigando los denominados idiomas de programación de quinta generación que incorporaban los constructos de programación lógica. La comunidad de idiomas funcionales se movió para estandarizar ML y Lisp. La investigación en Miranda, un lenguaje funcional con evaluación perezosa, comenzó a tomar lugar 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 estaban unidos a construcciones de programación genéricas: los genéricos eran, 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 informáticos distribuidos.
La década de 1980 también trajo avances en la implementación de lenguajes de programación. El movimiento de computadora con conjunto reducido de instrucciones (RISC) en la arquitectura de computadoras postuló que el hardware debería diseñarse para compiladores en lugar de programadores ensambladores humanos. 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 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:
- 1980 – C++ (como C con clases, renombrado en 1983)
- 1983 – Ada
- 1984 – Lisp común
- 1984 – MATLAB
- 1984 – dBase III, dBase III Plus (Clipper y FoxPro como FoxBASE)
- 1985 – Eiffel
- 1986 – Objetivo-C
- 1986 – LabVIEW (idioma de programación visual)
- 1986 – Erlang
- 1987 - Perl
- 1988 – PIC (lengua de marcado)
- 1988 – Tcl
- 1988 – Wolfram Language (como parte de Mathematica, sólo obtuvo un nombre separado en junio de 2013)
- 1989 – FL (Backus)
1990s: la edad de Internet
El rápido crecimiento de Internet a mediados de la década de 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 la adopción de nuevos lenguajes. En particular, el lenguaje de programación JavaScript ganó popularidad debido a su temprana integración con el navegador web Netscape Navigator. Varios otros lenguajes de programación 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, pero sí mucha recombinación y maduración de viejas ideas. Esta era inició 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 programación. Estos no descendieron directamente de otros lenguajes y presentaban nuevas sintaxis y una incorporación más liberal de características. Muchos consideran que estos lenguajes de secuencias de comandos son más productivos incluso que los lenguajes RAD, pero a menudo debido a opciones que hacen que los programas pequeños sean más simples pero los programas grandes sean más difíciles de escribir y mantener. Sin embargo, los lenguajes de programación llegaron a ser los más destacados utilizados en relació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 admitir la programación GUI a través de bibliotecas como Tkinter.
Algunos lenguajes notables que se desarrollaron en este período incluyen:
- 1990 – Haskell
- 1991 – Python
- 1991 – Visual Basic
- 1993 – Lua
- 1993 – R
- 1994 – CLOS (parte de ANSI Common Lisp)
- 1995 – Ruby
- 1995 – Ada 95
- 1995 – Java
- 1995 – Delphi (Object Pascal)
- 1995 – Visual FoxPro
- 1995 – JavaScript
- 1995 – PHP
- 1996 – OCaml
- 1997 – Rebol
Tendencias actuales
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 han incluido:
- Aumento del apoyo a la programación funcional en los idiomas principales utilizados comercialmente, incluida la programación puramente funcional para facilitar el análisis y paralelización del código (a nivel micro y macro)
- Constructs to support concurrent and distributed programming.
- Mecanismos para agregar verificación de seguridad y fiabilidad al idioma: verificación estática ampliada, clasificación dependiente, control de flujo de información, seguridad de rosca estática.
- Mecanismos alternativos para composibilidad y modularidad: mezclas, rasgos, tipoclases, delegados, aspectos.
- Desarrollo de software orientado a componentes.
- Metaprogramación, programación reflexiva (reflexión), o acceso al árbol de sintaxis abstracto
- Programación orientada al respeto (AOP) que permite a los desarrolladores insertar código en otro módulo o clase en "puntos de unión"
- Lenguas específicas de dominio y generación de código
- XML para interfaz gráfica (XUL, Extensible Lenguaje de marcado de aplicaciones (XAML))
- Mayor interés en la distribución y movilidad.
- Integración con bases de datos, incluyendo bases de datos XML y relacionales.
- Fuente abierta como filosofía de desarrollo para idiomas, incluyendo la Colección de Compiladores GNU e idiomas como PHP, Python, Ruby y Scala.
- Más interés en lenguajes de programación visual como Scratch, LabVIEW y PWCT
- Idiomas masivamente paralelos para unidades de procesamiento de gráficos GPU y arrays de supercomputadora, incluyendo OpenCL
- Investigación temprana en lenguajes de programación cuántica de computación (ver lista)
- Investigación temprana en la aplicación de métodos de inteligencia artificial (AI) para generar código utilizando AI como GPT-3 y Gemini.
Muchas grandes empresas tecnológicas introdujeron múltiples lenguajes de programación nuevos que están diseñados para satisfacer sus necesidades y brindan soporte de primera clase para sus plataformas. Por ejemplo:
- Microsoft introdujo C#, F#, TipoScript, Q#, Bosque y Power Fx.
- Google presentó Vamos, Dart y Carbon.
- Apple presentó Swift.
- Meta introducida Hack.
Algunos idiomas notables desarrollados durante este período y se enumeran en el índice TIOBE (idiomas de programación del TIOBE 100) al mes de febrero de 2024 incluyen:
- 2000 – ActionScript
- 2001 – C#
- 2001 – D
- 2002 – Scratch
- 2003 – Groovy
- 2003 – Scala
- 2005 – F#
- 2006 – Poder Shell
- 2007 – Clojure
- 2008 – Nim
- 2009 – Go
- 2011 – Dart
- 2011 – Kotlin
- 2012 – Julia
- 2012 – TipoScript
- 2012 – Elixir
- 2014 – Swift
- 2014 – Hack
- 2015 - Rust
- 2015 – Raku
- 2016 – Anillo
- 2016 – Zig
- 2022 – Carbon
Otros nuevos idiomas de programación son Elm, Ballerina, Rojo, Cristal, Haxe, V (Vlang), Razón y Mojo.
Cifras clave
Algunas personas clave que ayudaron a desarrollar lenguajes de programación:
- Ada Lovelace, publicado el primer programa informático
- Alan Cooper, desarrollador de Visual Basic.
- Alan Kay, pionero en la programación orientada al objeto, 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++.
- Brad Cox, co-creador de Objective-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 concatenante, y un nombre prominente en el diseño de microprocesador de la máquina de apilar.
- Chris Lattner, creador de Swift, Mojo y LLVM.
- Cleve Moler, creador del MATLAB.
- Dennis Ritchie, inventor de C. Unix Operating System, Plan 9 Operating System.
- Douglas McIlroy, influyó y diseñó idiomas como SNOBOL, TRAC, PL/I, ALTRAN, TMG y C++.
- Grace Hopper, primero en utilizar el término compilador y desarrollador de FLOW-MATIC, influyó en el desarrollo de COBOL. Lenguas de programación adaptadas a la máquina y el término "debugging".
- 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 de lambda polimorfo (System 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, cooperó en diseñar ALGOL 58 y ALGOL 60.
- John C. Reynolds, co-inventor del cálculo de lambda polimorfo (System F).
- John McCarthy, inventor de LISP, comité de diseño de ALGOL 60.
- John von Neumann, creador del concepto del sistema operativo.
- Graydon Hoare, inventor de Rust.
- Ken Thompson, inventor de B and Go.
- Kenneth E. Iverson, desarrollador de APL, co-desarrollador de J con Roger Hui.
- Konrad Zuse, diseñó el primer lenguaje de programación de alto nivel, Plankalkül (que influyó en ALGOL 58).
- Kristen Nygaard, programación pionera orientada al objeto, co-inventó a 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 idiomas B y C.
- Nathaniel Rochester, inventor del primer ensamblador (IBM 701).
- Niklaus Wirth, inventor de Pascal, Modula y Oberon.
- Ole-Johan Dahl, programación pionera orientada al objeto, co-inventó a Simula.
- Rasmus Lerdorf, creador de PHP.
- Rich Hickey, creador de Clojure.
- Robert Gentleman, co-creador de R.
- Robert Griesemer, co-creador de Go.
- Robin Milner, inventor de ML, y compartir crédito por Hindley-Milner inferencia tipo polimorfo.
- Rob Pike, co-creador de Go, Inferno (sistema operativo) y Plan 9 (sistema operativo) Coautor del Sistema Operativo.
- Ross Ihaka, co-creador de R.
- Stanley Cohen, inventor de Speakeasy, que fue creado con un sistema de programación orientado hacia objetos, la primera instancia, en 1964.
- Stephen Wolfram, creador de Mathematica.
- Walter Bright, creador de D.
- Yukihiro Matsumoto, creador de Ruby.
Contenido relacionado
Spl (Unix)
Tabla de métodos virtuales
ALGOL Y
Hacer bucle while
API de repositorio de contenido para Java