-
ASCC Mark I
• Howard Aiken, IBM y Universidad de Hardvard
• Tarjetas perforadas
• Switches de 10 posiciones (entrada manual) -
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
• 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
• 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)
• 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)
• 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)
• 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
• 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
• Usuario interactúa con una
terminal
• Operaciones de entrada y
salida por consola
• Lenguajes agregan
interacción con usuario -
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
• 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
• 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
• 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)
• 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
• 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
• 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++
• 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 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
• 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
• 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.