1.2    Breve historia de los LPs.

Los métodos de diseño e implementación de los LPs han evolucionado continuamente desde la aparición de los primeros LPs en los 50.

Fortran, Lisp   50's
Ada, C, Pascal, Prolog, SmallTalk  70's
C++, ML    80's

En los 60 y 70 se desarrollaron muchos lenguajes nuevos, como parte de proyectos de desarrollo de software grandes. Cuando en los 70 el Departamento de Defensa de U.S.A. hizo un informe para apoyar el desarrollo de ADA, encontró que, en diversos proyectos de defensa, se estaban creando más de 500 lenguajes.

Los primeros lenguajes.

A comienzos de los 50, empezó a aparecer la notación simbólica. Grace Hopper condujo un grupo en Univac para desarrollar el lenguaje A-0, y John Backus desarrolló SpeedCoding para el computador IBM 701.

Ambos lenguajes fueron diseñados para compilar expresiones aritméticas simples que eran traducidas a un lenguaje de máquina ejecutable.

El gran quiebre se produjo entre 1955 y 1957, cuando Backus lideró un grupo para desarrollar FORTRAN.

FORTRAN estaba orientado a los cálculos numéricos, pero pasó a ser un LP con estructuras de control condicionales y sentencias de E/S.

El esfuerzo estaba puesto en una ejecución eficiente, y así diversas instrucciones fueron específicamente diseñadas para el IBM 704, por ejemplo el if aritmético.

FORTRAN pasó a FORTRAN II en 1958 y a FORTRAN IV unos pocos años después.

En ese momento, prácticamente todos los fabricantes implementaron diversas versiones del lenguaje, y llegó el caos.

Finalmente en 1966, FORTRAN IV pasó a ser un standard conocido como FORTRAN 66, y ha sido actualizado dos veces desde entonces, a FORTRAN 77 y FORTRAN 90.

Un problema es que hay muchos programas antiguos que simplemente son traducidos a versiones más nuevas sin realmente hacer uso de las características de los lenguajes más modernos.

Debido al éxito de FORTRAN Hubo Miedo, en Europa especialmente, al dominio de IBM. Así, como respuesta GAMM (German Society of Applied Mathematics) organizó un comité para diseñar un lenguaje universal. En U.S.A. la ACM también organizó un comité similar. Pese a los temores y desconfianzas mutuos, los comités tuvieron éxito, y bajo el liderazgo de Peter Naur, el comité desarrolló IAL. (International Algorithmic Language)

Se propuso el nombre ALGOL, pero no se aprobó.

Sin embargo, el uso llevó finalmente a la aceptación en el cambio del nombre oficial, que llegó a ser ALGOL 58. Se hizo una revisión del lenguaje en 1960 y ALGOL 60 (con algunas modificaciones menores en 1962) pasó a ser el standard del lenguaje de programación académico desde 1960 hasta comienzos de los 70.

Mientras el objetivo de FORTRAN era la eficiencia en un IBM 704, ALGOL tenía objetivos diferentes:

  1. La notación de ALGOL debía ser cercana a los estándares matemáticos.
  2. ALGOL debía ser útil para describir algoritmos.
  3. Los programas ALGOL debían compilarse a lenguaje de máquina.
  4. ALGOL no debía amarrarse a una arquitectura de computador particular.

Para 1957, éstos objetivos eran muy ambiciosos.

Para permitir la independencia de la máquina, no se incluía en el lenguaje ni entrada ni salida, por lo que había que escribir procedimientos especiales para éstas operaciones. Esto hacía a los programas independientes de la máquina, cada implementación era, como consecuencia, incompatible con las otras. Para estar cerca de la matemática, los subprogramas eran vistos como substituciones de macros, lo que lleva al concepto de pasaje de parámetros por nombre.

ALGOL nunca alcanzó éxito comercial en U.S.A., pero si parcialmente en Europa. Lo que si tuvo fue un gran impacto, más allá de su uso. Como ejemplo, Jules Schwartz de SDC desarrolló una versión de IAL (Jule's Own Version of IAL, o JOVIAL ), que se transformó en un estándar para aplicaciones de la fuerza aérea de U.S.A.

Backus fue el editor de los informes que definían el lenguaje ALGOL. Para ello usó una notación sintáctica comparable a los conceptos de los lenguajes libres del contexto desarrollados por Chomsky. Esto significó la introducción de teorías de gramáticas formales al mundo de los LPs. A causa de su participación junto con  Naur, en el desarrollo de ALGOL, la notación es conocida como BNF (Backus Naur Form).

Como otro ejemplo de la influencia de ALGOL, Burroughs (una empresa que se mezcló con Sperry Univac para formar UNISYS) describió los trabajos de un matemático polaco llamado Lucasiewicz. Este señor había desarrollado una interesante técnica que permitía escribir expresiones aritméticas sin usar paréntesis, con un proceso de evaluación bastante eficiente, basado en el uso de pilas.

Aunque no es un resultado matemático de grandes proyecciones, esta técnica tuvo un profundo impacto en teoría de compiladores. Usando métodos basados en la técnica de Lucasiewicz, Burroughs desarrolló el hardware de computador para el modelo B5500, y pronto se tuvo un compilador ALGOL más veloz que cualquier compilador FORTRAN existente.

En este punto, la historia se ramifica. el concepto de user-defined types desarrollado en los 60 era importante, y ni FORTRAN ni ALGOL tenían esa característica.

Simula 67 desarrollado por Nigaard y Dahl en Noruega introduce el concepto de clases para ALGOL. Esto dió a Stroustrup la idea de sus clases en C++ y una extensión del lenguaje de los 80; C.

Wirth desarrolla ALGOL-W, a mediados de los 60, una extensión de ALGOL,  no muy exitosa. Sin embargo, el mismo Wirth desarrolló entre 1968 y 1970 , Pascal, el lenguaje para ciencias de computación en los 70.

Otro comité trató de duplicar el éxito de ALGOL con ALGOL 68, pero el lenguaje resultó ser radicalmente diferente y demasiado complejo como para ser implementado de manera efectiva.

Con la introducción de la nueva línea de computadores 360 de IBM (1963), IBM desarrolló NPL (New Programming Language) en el laboratorio Hursley en Londres; después cambió el nombre (por problemas con el Natural Physical Laboratory) a MPPL (Multipurpose Programming Language) que terminó abreviándose a PL/I...

BASIC (Beginners All-purpose Simbolic Instruction Code) fue desarrollado luego para satisfacer las necesidades de cálculos numéricos pero no científicos, pero hoy se ha extendido más allá de sus objetivos originales.

Lenguajes comerciales.

El procesamiento de datos comerciales, fue un dominio importante de aplicación, posterior a los cálculos numéricos.

Grace Hopper lideró un grupo en Univac para desarrollar Flowmatic en 1955. La meta era desarrollar aplicaciones comerciales usando una forma textual similar al ingles . En 1959, el Departamento de Defensa de U.S.A. financió una convención para desarrollar Common Business Language (CBL), un lenguaje orientado a aplicaciones comerciales que usara en su notación tanto inglés como fuera posible.

A causa del divisionismo impuesto por muchas compañías se formó un comité especial, y así las especificaciones fueron publicadas en 1960 con el diseño de COBOL (Common Business Oriented Language). COBOL fue revisado en 1961 y 1962, estandarizado en 1968, y revisado nuevamente en 1974 y 1984.

Lenguajes para I.A.

El interés en lenguajes para I.A. comienza en los 50, con IPL (Information Processing Language) de la RAND Corporation. IPL-V fue muy conocido, pero de uso limitado por su diseño de bajo nivel. En el MIT, John McCarthy diseñó LISP (List Processing), para el IBM 704. LISP 1.5 llegó a ser un estándar. Hoy se usa Scheme y Common LISP.

En esta área, la traducción automática se transformó en una aplicación natural. COMIT (del MIT lo desarrolló) fue un lenguaje pionero, pero como el código era oculto un grupo de AT&T Bell Labs. desarrolló su propio lenguaje: SNOBOL.

Lenguajes de sistemas.

La mayoría de los lenguajes para programación de sistemas nunca fueron ampliamente usados: CPL y BCPL; hasta la aparición de C.

Con el desarrollo de un ambiente en UNIX, escrito mayoritariamente en C a comienzos de los 70, los lenguajes de alto nivel se mostraron como efectivos.

La tabla a continuación muestra las influencias más importantes de la tecnología sobre los lenguajes de programación:

1951-1955 Hardware Computadores con tubos al vacío.
Métodos Lenguajes ensambladores. Conceptos clave: subprogramas, estructuras de datos.
Lenguajes Uso experimental de compiladores de expresiones.
1956-1960 Hardware Almacenamiento en cintas magnéticas, Memorias de núcleo de ferrita, Circuitos con transistores.
Métodos Tecnología inicial compiladores, Gramáticas BNF, Optimización de código, intérpretes, métodos dinámicos de almacenamiento. Procesamiento de listas
Lenguajes FORTRAN ,ALGOL 58, ALGOL 60, COBOL, LISP.
1961-1965 Hardware Familias de arquitecturas compatibles, almacenamiento en discos magnéticos.
Métodos Sistemas con multiprogramación, compiladores dirigidos por la sintaxis.
Lenguajes COBOL 61, ALGOL 60(revisado), SNOBOL, JOVIAL, APL.
1966-1970 Hardware Aumenta tamaño y velocidad, disminución de costos, minicomputadores, microprogramación, circuitos integrados.
Métodos Time sharing y sistemas interactivos, sistemas de traducción de escritura, compiladores con optimización.
Lenguajes APL, FORTRAN 66, COBOL 65, ALGOL 68, SNOBOL 4, BASIC, PL/I, SIMULA 67, ALGOL-W.
1971-1975 Hardware Microcomputadores, era de los minicomputadores, sistemas (pequeños) de almacenamiento masivo, declinación de memorias núcleo, incremento de memorias de semiconductores.
Métodos Verificación de programas, programación estructurada, inicios de ingeniería de software.
Lenguajes Pascal, COBOL 74, PL/I (estándar), C, Scheme, Prolog.
1976-1980 Hardware Microcomputadores comerciales de calidad, sistemas de almacenamiento muy grandes, computación distribuida.
Métodos Abstracción de datos, semánticas formales, concurrencia, sistemas embutidos, técnicas de programación en tiempo real.
Lenguajes Smalltalk, Ada, FORTRAN 77, ML.
1981-1985 Hardware Computadores personales, primeras workstation, vídeo juegos, redes locales (Arpanet).
Métodos POO, Ambientes interactivos, editores dirigidos por sintaxis.
Lenguajes Turbo Pascal, Smalltalk 80, crecimiento de Prolog, Ada 83, Postscript.
1986-1990 Hardware Era de microcomputadores, incremento en la ingeniería de las workstations, arquitecturas RISC, redes globales: Internet.
Métodos Computación cliente-servidor.
Lenguajes FORTRAN 90, C++, SML (ML estándar).
1991-1995 Hardware Microcomputadores y workstations rápidos y baratos, arquitecturas paralelas masivas, voz, video, fax, multimedia.
Métodos Sistemas abiertos, supercarreteras de información.
Lenguajes Ada 95, TCL, PERL.