Historia de los Lenguajes de Programación

  • ASCC Mark I

    ASCC Mark I
    • Howard Aiken, IBM y Universidad de Hardvard
    • Tarjetas perforadas
    • Switches de 10 posiciones (entrada manual)
  • ENIAC

    ENIAC
    • Universidad de Pennsylvania
    • John Mauchly (plagio de John Atanasoff) y Presper Eckert
    • Se conectaban elementos internos con cables (manual)
    • Cálculo complicado de trayectorias balísticas
  • EDSAC

    EDSAC
    • Maurice Wilkes, Laboratorio Matemático de la
    Universidad de Cambridge
    • Programa almacenado
    • Electronic Delay Storage Automatic Calculator
    • Influenciada por EDVAC con ideas de John von Neumann
  • Finales de los 50s

    Finales de los 50s
    • Mainframes
    – Diferentes aplicaciones
    – Grandes y muy caros
    – Usuarios especializados
    – Batch processing
    – Estructuras de datos →
    archivos
    – Sin interacción con el usuario
    • Primeros lenguajes de alto
    nivel
    – Programas de 1 bloque
    – Sin interacción
  • Fortran (Formula Translation)

    • John Backus (1957), IBM
    • Primer lenguaje imperativo
    de alto nivel
    • Cálculos numéricos y
    computación científica
    • Desarrollado para la IBM 704
    • Uso de expresiones
    aritméticas (a * 2 + b)
    • Se sigue utilizando en la
    actualidad
    • Programa Fortran
    – Rutina principal
    – Subrutinas
    • Ambientes global y local
    • No hay memoria dinámica
    • Control → GOTO
    • Luego se agregó if-then-else
    • Parámetros por referencia
    • Tipos numéricos, booleano, arreglos, strings, archivos.
  • ALGOL (Algorithmic Language)

    ALGOL (Algorithmic Language)
    • Friedrich L. Bauer (1957)
    • Familia de lenguajes imperativos
    • Utilizado en el ámbito académico y científico
    • 60s y 70s
    • Impacto en lenguajes posteriores
  • • ALGOL 58

    – Lenguaje universal, no para algo
    específico
  • COBOL (Common Business Oriented Language)

    COBOL (Common Business Oriented Language)
    • Grace Hopper (1959), US
    Department of Defense
    • Imperativo
    • Lenguaje más utilizado en el
    mundo durante los 70s
    • Lo más cercano posible al
    idioma inglés
    • Programas muy largos
    • Memoria estática
  • •ALGOL 60 (versión más importante)

    – Independiente del hardware
    – Parámetros por nombre
    – Gramáticas generativas de Chomsky
    (nueva área)
    – Recursión
    – Memoria dinámica
    – Tipos definidos por usuario
    – If-then-else, for, while
    • ALGOL W
    – Propuesta de Tony Hoare y Niklaus
    Wirth
    – Da origen a Pascal
  • Lisp (List Processor)

    Lisp (List Processor)
    • John McCarthy (1960), MIT
    • Familia: Declarativos, funcionales
    • Aplicaciones no numéricas
    • Cálculo Lambda
    • Dialectos: Common Lisp, Scheme
    • El código se representa
    internamente como listas enlazadas
    • Secuencia de expresiones a evaluar
    • Interpretado
  • Simula

    Simula
    • Kristen Nygaard, Ole-Johan Dahl
    (1962), Instituto de Cómputo
    Noruego
    • Imperativo, Orientado a Objetos
    • Extensión de ALGOL 60
    • Simulaciones de eventos discretos
    • Colas, carga, tiempo de espera,
    etc.
    • Versiones
    – Simula I
    – Simula 67
  • Simula 67

    Simula 67
    • Primer lenguaje orientado a objetos
    • Conceptos
    – Clase
    – Objeto
    – Herencia
    – Subclases
    – Métodos virtuales
    – Garbage collection
    – Llamadas por referencia
    – Punteros
    – Co-rutinas (parecido a hilos)
    • Influyó en Smalltalk y C++
  • ALGOL 68

    – Incluye estructura case
  • Nacimiento de la minicomputadora

    Nacimiento de la minicomputadora
    • Nacimiento de la
    minicomputadora
    • Usuario interactúa con una
    terminal
    • Operaciones de entrada y
    salida por consola
    • Lenguajes agregan
    interacción con usuario
  • Pascal

    Pascal
    • Niklaus Wirth (1970)
    • Imperativo
    • Simplificación de ALGOL W
    • Enseñanza de programación
    estructurada y estructuras de datos
    • Utilizado en educación hasta finales
    de los 80s
    • Código intermedio → P-Code
    • Máquina intermedia con arquitectura
    de pila
    • Portabilidad
    • También compilación directa
    • Bloques de código
    • Funciones anidadas
    • Memoria dinámica
    • Definición de tipos abstractos
    • Manipulación de punteros
  • Prolog

    Prolog
    • Alain Colmerauer (1970)
    • Declarativo, lógico
    • Basado en la teoría de deducción
    automática
    – Kurt Gödel, Jaques Herbrand, John Alan
    Robinson
    • Resolución: mecanismo deductivo que
    permite pruebas de lógica de 1er
    orden
    • SLD resolution: mecanismo mejorado
    que permite calcular los valores de
    variables que hacen verdadero un
    teorema
    • Utilizado para prueba de teoremas, sistemas
    expertos, procesamiento de lenguaje natural.
  • C

    C
    • Denis Ritchie y Ken Thompson
    (1972), AT & T Bell Laboratories
    • Imperativo
    • Lenguaje más importante de
    los 70s
    • Hereda mucho de la familia
    ALGOL
    • Facilidad para programas
    interactivos
    • Creado en inicio para
    programar UNIX
    • Influenció muchos lenguajes
    posteriores
    • Exitoso por su sintaxis compacta
    • Funcionalidades de bajo nivel
    • Código de máquina eficiente
    • Sin funciones anidadas → Simplicidad
    • Equivalencia punteros/arreglos
    • Tipado estático
    • Recursión
  • Smalltalk

    Smalltalk
    • Alan Kay (1972), Xerox PARC
    • Orientado a Objetos
    • Conceptos de clase y objeto de
    Simula
    • Encapsulamiento y ocultación de
    información
    • Reglas de visibilidad
    – Métodos públicos
    – Variables de instancia privadas
    • Tipo primitivo → Objeto
    • Más que lenguaje era un ambiente
  • ML (Metalanguage)

    ML (Metalanguage)
    • Robin Milner (1973), Universidad de
    Edinburgo
    • Declarativo, funcional
    • Inició como un sistema semiautimático
    para indicar propiedades de lenguajes
    • Usado para diseño y manipulación de
    lenguajes
    • Bioinformática, sistemas financieros,
    bases de datos jerárquicas, etc
    • Definiciones de funciones
    • Estructuras imperativas
    • Asignación, variables
    • Tipado estático
    • Inferencia de tipos
    • Tipos de datos algebraicos
    • Polimorfismo de parámetros
    • Excepciones
    • Garbage collection
  • Desarrollo de la computadora personal

    Desarrollo de la computadora personal
    • Desarrollo de la computadora personal
    • Apple II sale al mercado en 1978
    • IBM PC (1981) con Lotus 123
    • Macintosh (1984)
    • Cambió el rol de los lenguajes de
    programación
    • Desarrollo rápido de sistemas gráficos
    • Sistemas más complejos → reutilización
    de código
    • Lenguajes OO → ideales para esto
    • Sistemas empotrados y recuperación ante
    fallas
  • ADA

    ADA
    • Jean Ichbiah (1980), US Department
    of Defense
    • Inició como una competencia para
    diseñar un nuevo lenguaje
    • Requerimientos de seguridad
    • Basado en Pascal
    • Programación en tiempo real y
    sistemas empotrados
    • Mecanismos de sincronización y
    comunicación
    • Tipos abstractos, tareas,
    coordinación de tiempo,
    concurrencia
    • El nombre está basado en Ada Lovelace
  • C++

    C++
    • Bjarne Stroustrup (1986), AT & T Bell
    Laboratories
    • Orientado a objetos, genérico
    • Agrega clases y herencia a C sin
    afectar eficiencia y compatibilidad
    • Se mejoró el sistema de tipos de C
    • C ⊂ C++
    • No hay garbage collector
    • Generics (Templates)
    • Herencia múltiple
  • Surgimiento del internet

    Surgimiento del internet
    • Surgimiento de Internet
    • Cambios de eficiencia, confiabilidad, correctitud, seguridad
    • Desde bajo nivel hasta el alto debe tomarse en cuenta la red
    • Lenguajes para manipular datos
    – HTML Hyper Text Markup Lamguage
    - XML eXtemsible markup language
    - JSON Javascript Object Notation
  • Java

    Java
    • James Gosling (1990), Sun
    Microsystems
    • Orientado a Objetos, genérico
    • Basado en C++ • Navegador de red
    • Potencial para internet: Mosaic
    • Applet → programa en cliente
    que le quita carga al servidor
    • Portabilidad
    – Java Virtual Machine
    • Seguridad – Chequeo de tipos
    • Compilador
    • Bytecode
    • Ejecución
    – Navegadores (1994)
    • Sin punteros → sólo
    referencias
    • Garbage collector
    • Parámetros por
    valor/referencia
    • Carga dinámica de clases
    • Hilos
    • Poco eficiente
  • Python

    Python
    • Guido van Rossum (1991), Centrum
    Wiskunde & Informatica
    • Multiparadigma: OO, imperativo,
    funcional
    • Fácilidad de lectura, sintaxis compacta
    • Interpretado
    • Tipado dinámico
    • Manejo de memoria automático
    • Entre los lenguajes más populares del
    mundo
    • Biblioteca extensa
    • Aplicaciones web, computación
    científica, 3D, AI, etc.