Está en la página 1de 32

Instituto Tecnológico de Costa Rica

Escuela de Computación
Bachillerato en Ingeniería en Computación
IC-5701 Compiladores e Intérpretes

Apuntes de clase: Viernes 08/02/2019

Apuntador: Paolo Blanco Núñez


Carné: 2016185648

Prof. Francisco Torres Rojas



However difficult life may
seem, there is always
something you can do and
succeed at.
-Stephen Hawking
1 Información

Fechas de entregas:

• Proyecto 0 -> 27 Febrero

• Del libro de Steven Pinker:


• Capítulo 1 -> 15 Febrero
• Capítulo 2 -> 22 Febrero
• Capítulo 3 -> 6 Marzo
• Capítulo 4 -> 15 Marzo
• Capítulo 5 -> 22 Marzo
2 John Backus
• Matemático y Científico de la computación
• Estadounidense (1924-2007)
• Msc. en Matemáticas – Columbia University
• Trabajó con IBM desde 1950 programando
en lenguaje máquina y ensamblador

• Su primer proyecto fue un programa para


calcular la posición de la luna en lenguaje
máquina
• Crea Speedcoding -> Un intérprete enfocado
en la facilidad de uso, con el fin de facilitar
la programación
3 John Backus – cont.
• En 1953 propone FORTRAN para la IBM 704, de donde
surgen los siguiente retos:
• ¿Es posible del todo? -> Crear un lenguaje de alto nivel el cual
produzca código ensamblador
• ¿Durará mucho en traducir? -> Se requiere que sea un proceso
rápido / el tiempo es oro
• ¿Generará código eficiente?

• En 1956 Backus lo logra y


crea FORTRAN, el primer
lenguaje de alto nivel de
uso extendido
4 John Backus – cont.
• En 1958 crea la BNF -> Backus Normal
Form, para describir cualquier lenguaje de
programación libre de contexto
• En 1977 crea FP -> Primer lenguaje
diseñado específicamente para dar soporte
al estilo de programación funcional

• Ese mismo año,


Backus recibe el
premio Turing
5 John McCarthy
• Matemático y Científico de la computación
• Estadounidense (1927-2011)
• Ph. D. en Matemáticas – Princeton University
• Fue profesor en el MIT, Stanford, Princeton
• Muy influenciado por von Neumann

• Pionero de la Inteligencia artificial


• Inventó el lenguaje de programación LISP
• Inventó el concepto de Garbage Collector
• Trabajó en la definición de ALGOL
• En 1971 gana el premio turing
6 Grace Murray Hopper
• Matemática y Científica de la computación
• Estadounidense (1906-1992)
• Ph. D. en Matemáticas – Yale University
• Almirante de la marina de Estados Unidos
• Posiblemente la primer programadora de la
historia

• Inventó el lenguaje de programación COBOL


• Inventó los conceptos de Compilador y
Debugging
• No obtuvo un premio turing  ¿Misoginia?
7 Peter Naur
• Astrónomo y Científico de la computación
• Danés (1928-2016)
• Ph. D. en Astrofísica en 1957 pero fascinado
con las computadoras
• Mejoró la BNF :
• Backus Normal Form -> Backus Naur Form

• Líder del comité de ALGOL 60


• Grandes contribuciones en:
• Lenguajes de programación
• Algoritmos
• Ingeniería de Software
• En 2005 gana el premio turing
8 Los 4 Grandes

• Primeros lenguajes de programación de


alto nivel
• desarrollados entre 1956 y 1960

FORTRAN LISP

COBOL ALGOL
9 FORTRAN
• Su nombre proviene de Formula Translation
• Desarrollado por Backus (IBM) en los 50’s
• Primer L.A.N. -> Lenguaje de alto nivel, de uso
generalizado
• Ha evolucionado:
• FORTRAN, FORTRAN II, III, IV
• FORTRAN 66, 77, 90, 95, 2003, 200

• Todavía se usa bastante


• Favorito en HPC
• Antes se trabajaba con
tarjetas perforadas
10 LISP
• Su nombre proviene de List
Processor
• Desarrollado por McCarthy
(MIT) en los 50’s
• Notación prefija -> Provoca
toneladas de paréntesis
• Lenguaje interpretado
• Orientado a inteligencia
artificial
• Programación funcional
• Entre sus derivados se
encuentras: scheme,
Common Lips, Clojure, …
11 COBOL
• Su nombre proviene de Common
Business Oriented Language
• Desarrollado por Hopper en 1959
• Pretendía parecerse mucho al inglés
corriente (autodocumentado)
• Los programas eran muy grandes
• Muchas palabras reservadas
• Muy criticado por la academia
• Legacy code -> Código que funciona
pero a todos les da miedo tocarlo
• Sigue vivo
• Código en el mundo 1997 -> 80%
escrito en cobol: 2012 -> 60%
2019 -> ?
12 ALGOL
• Su nombre proviene de Algorithmic Language
• Diseñado por comité dirigido por Peter Naur (USA -
Europa) en 1958
• Pretendía resolver defectos de FORTRAN
13 ALGOL – cont.
• Primer lenguaje descrito en BNF ->
Backus Naur Form
• Introduce:
• Bloques begin-end
• Llamadas por valor y referencia
• Variables locales
• Then / else
• Tuvo poco éxito comercial, pero muy
usado por académicos:
• ALGOL 58, 60, 68, 73
• Se da el inicio de “algol-like languages”:
• BCPL, B, Pascal, PL/1, Simula, C, C++, Java, etc
• Prácticamente todos los lenguajes modernos son derivados
de ALGOL
14 Lenguajes de Alto Nivel
• Existen desde 1956, con una gran proliferación
• Al ser muchísimo más fácil programar en ellos, la
productividad es enorme
15 Niveles de máquinas
• Definen una nueva capa
• Los lenguajes de alto nivel Lenguajes de alto nivel
son independientes del
hardware
• Portabilidad Ensamblador

• Abstracción
Lenguaje Máquina
• Antes Los programadores
pensaban en FORTRAN
• Actualmente cuando Microprogramación
programamos pensamos en
alto nivel Hardware
• El hardware se vuelve cada
vez más “irrelevante”
16 Productividad vs Eficiencia

Lenguajes de alto nivel


P:
E:

Ensamblador P:
E:
Lenguaje Máquina
P:
E:
Microprogramación

P:
Hardware
E:
17 IBM 701
• Primer computadora comercial ->
sacada a la venta, en abril en 1952
• IBM dominaba el mundo computacional. Solo
se fabricaron 19
• Configuración:
• 4096 palabras de 36 bits
• 150000 instrucciones por segundo
• 150 tarjetas por segundo (entrada)
• 100 tarjetas por segundo (salida)
• Se alquilaba a $23,750 el mes ($211,645
actuales)
• MTBF -> Mean Time Between Failures:
30 minutos
18 IBM 704

• Primer computadora con punto flotante (1954-1960)


• Se vendieron / alquilaron unas 200 máquinas. El alquiler era de
$35550 al mes ($303745 actuales)
• Doble de rápida que 701 pero
incompatible
• Dispositivos para copiar tarjetas a
cinta off-line
• Memoria de núcleos de ferrita
• MTBF -> Mean Time Between Failures:
8 horas
• FORTRAN disponible -> Fue el
argumento de venta
19 •
Máquina dedicada
Uso típico de computadoras en 1950 -> Se reservaban “horas de máquina”
• El programador / científico / ingeniero era responsable de hacer todo
• Secuencia de boot manual, lenta y propensa a errores
• Uso típico (caso ideal):
1. Configurar todos los tableros de control
2. Colocar FORTRAN en lectora de tarjetas. Dar boot al computador
3. Colocar fuente FORTRAN en la lectora. A veces se requería de varias pasadas
para poder realizar toda la lectura
4. Si no hay errores, el compilador perfora programa equivalente en ensamblador
5. Colocar ensamblador en lectora de tarjetas. Dar boot al computador
6. Colocar ensamblador generado por compilador en lectora de tarjetas. De igual
manera a veces se requería de varias pasadas
7. Ensamblador perfora programa equivalente en lenguaje máquina
8. Colocar lenguaje máquina en lectora de tarjetas. Dar boot al computador. El
programa corre
9. Recolectar listados de impresora
10. Siguiente usuario, GO TO 1. 
20 Analizando Máquina dedicada

• Ventajas
• Absoluto control del programador
• Pocos expertos al inicio
• Fácil establecer responsabilidades y
controles
• Desventajas
• Trabajo repetido entre un usuario y
otro
• No hay estándares
• Programadores deber ser expertos en
hardware
• Uso muy ineficiente de los recursos
21 Mejorando Máquina dedicada
Surge una idea administrativa: Se crea el operador
de computadoras ¡Fuera programadores!
• Se recolectan trabajos y se
factorizan pasos
• Configuraciones estándar
• Procesamiento en lotes.
Procesamiento batch -> Miles de
tarjetas a la vez, no una por una
• Gran incremento del throughput ->
Cantidad de trabajos terminados
por unidad de tiempo, del centro de
cómputo
Productividad del
22 centro de cómputo

• Throughput -> Cantidad de trabajos


terminados por unidad de tiempo

Máquina dedicada

Batch con operador


23 Sistemas operativos primitivos
• Hay más compiladores disponibles (FORTRAN, COBOL, etc)
• Menos fallas de hardware, más periféricos

• Surge una idea: hacer un software


que reemplace al operador
• Seleccionar compilador
• Compilar
• Ejecutar
• Guardar resultados

• Se buscaba algo como un monitor o


un “sistema operador” o… un sistema
operativo
Sistemas operativos primitivos
24 – cont.

• El sistema operativo ejecuta cada


programa de forma secuencial

• Surge un problema:
¿Cómo sabe el sistema operativo hasta
donde llega cada trabajo, que
compilador usar, que datos, …?

• Solución: JCL -> Job Control Language


25 Job Control Language
• Primer interfaz usuario – sistema operativo
• Consistía en tarjetas intercaladas entre los trabajos
de los usuarios
• Poseía una sintaxis primitiva
• Antecesor de “Shell lenguages” o de interfaces gráficas
• Las interfaces gráficas actuales son derivadas del JCL
Productividad del
26
centro de cómputo 2

• Throughput -> Cantidad de trabajos


terminados por unidad de tiempo

Máquina dedicada

Batch con operador

Batch con S.O


27 Entrada / salida primitiva
• Arquitectura de von Neumann sugiere un espacio de
direcciones para E/S
• Instrucciones de lenguaje máquina para ese espacio
• No era fácil -> los dispositivos
nuevos eran más complejos
• Al inicio cada uno escribía sus
rutinas de E/S
• Se las pasaban entre
programadores
• Bibliotecas de E/S eran
agregadas a cada programa
Entrada / salida +
28 Sistema Operativo
• Todo el mundo necesita hacer E/S
• Surge una idea:
• Si todo el mundo las necesita… que estén siempre
disponibles en memoria
Sistema Operativo
• ¿En dónde?
• En el sistema operativo E/S
• ¿Cómo se usan?
• Los programas se comunican
con el sistema operativo para Programa
pedirle operaciones de E/S
29 Servicios del Sistema Operativo
• Operaciones de E/S del sistema operativo:
• Device Drivers -> Permiten al sistema operativo
interactuar con un periférico
• La idea se generalizó -> No sólo E/S
• System Calls -> El sistema operativo
Sistema Operativo proporciona servicios a los programas
• El sistema operativo va creciendo en
System Calls tamaño y complejidad
Nota: Los compiladores son específicos
Device del sistema operativo, debido a que estos
drivers no generan código para la máquina, sino
para el sistema operativo
30 Definiciones

• Real -> Lo que se ve y existe


• Virtual -> Lo que se ve, pero no existe
• Transparente -> Lo que no se ve, pero existe
• Máquina -> dispositivo (real, virtual o
transparente) que realiza
una tarea computacional

También podría gustarte