compiladores intérpretes y máquinas virtuales
TRANSCRIPT
1
COMPILADORES INTERPRETES Y
MAQUINAS VIRTUALES
Mg. Ing. Rolando Chávez Guillén
FACULTAD DE INGENIERIA DE SISTEMAS
2
• En el sistema de máquinas virtuales se realiza
una compilación y posteriormente una
interpretación.
• No es un concepto nuevo, pero sin duda, no ha
tenido una aplicación práctica masiva hasta la
llegada de la plataforma Java de Sun
Microsystems a principios de los 90, y algo
después con la plataforma .NET de Microsoft.
3
• La confección de un programa se realiza
escribiendo una serie de órdenes o instrucciones
que siguen las normas de un lenguaje de
programación.
• Estas órdenes las escribimos en ficheros de texto ,
utilizando algún editor de textos más o menos
sencillo, o bien alguno de los editores
especializados para programación.
4
• Incluso, algunos entornos de programación
proporcionan sus propias herramientas
específicas para escribir programas, con muchas
ventajas para el programador... pero por muy
compleja que sea la herramienta para
confeccionar programas, por lo general, el
programa siempre se reduce a una serie de
instrucciones en un fichero de texto.
5
• A estos ficheros de texto les llamamos fuente.
(del inglés source. A menudo se utilizan
expresiones como código fuente, ficheros
fuente, etc.).
• Sin embargo, sabemos que la CPU sólo
entiende su propio lenguaje, que normalmente
es extraordinariamente sencillo comparado el
lenguaje de programación que estamos
aprendiendo.
6
• El lenguaje de la CPU es el código máquina (del
inglés machine code).
• El código máquina son secuencias binarias que la
CPU ejecuta como instrucciones sencillas.
• Por supuesto, cada modelo de CPU tiene su
propio código máquina, aunque a veces, varios
modelos de CPU tienen lenguajes máquina
compatibles. (Nota: mucha gente confunde el
lenguaje ensamblador con el lenguaje máquina.
7
• Es necesario tener en cuenta que cada orden de
un lenguaje de alto nivel (por ejemplo, una orden
para imprimir "hola mundo" por la pantalla) se
traduce en largas secuencias de instrucciones en
código máquina .
• Lo que para nosotros es una sola orden, para la
CPU supone muchos pequeños pasos
extremadamente simples.
8
• Tampoco podemos olvidarnos del sistema
operativo. Los programas de aplicación se apoyan
no sólo en la CPU, sino que necesitan de la
participación del sistema operativo para realizar
muchas de sus labores.
• Así pues, muchas veces los programas se hacen
pensando que su destino va a ser una determinada
CPU más un determinado sistema operativo.
9
• A menudo, incluso hay que incluir en esta lista otros
programas como servidores de aplicaciones,
sistemas gestores de bases de datos, librerías de
código, etc. A este conjunto de requisitos
necesarios para la ejecución de un programa se le
suele llamar a menudo plataforma.
10
COMPILAR
11
DIFERENCIAS ENTRE COMPILAR E INTERPRETAR
COMPILAR INTERPRETAR
Genera un ejecutable No genera un ejecutable
El proceso de traducción se realiza una sola vez.
El proceso de traducción se realiza en cada ejecución.
-La ejecución es muy rápida debido a que el programa ya ha sido traducido a código máquina
-La ejecución es más lenta, ya que para cada línea del programa es necesario realizar la traducción
12
DIFERENCIAS ENTRE COMPILAR E INTERPRETAR
COMPILAR INTERPRETAR
El ejecutable va dirigido a una plataforma concreta (una CPU, un sistema operativo, y quizá alguna otra consideración), siendo dificultoso portarlo a otra. En ocasiones, si existe un compilador para otra plataforma, se puede recompilar el programa, aunque normalmente esto plantea serias dificultades. Los programas que se van a compilar suelen estar muy ligados a la plataforma de destino
No hay ejecutable, así que si existe un intérprete para una plataforma concreta, el programa se podrá ejecutar en ambas. Típicamente, los programas interpretados son mucho más portables que los compilados, ya que suelen existir intérpretes del mismo lenguaje en distintas plataformas..
13
DIFERENCIAS ENTRE COMPILAR E INTERPRETAR
COMPILAR INTERPRETAR
-Una vez compilado el programa, el código fuente no es necesario para ejecutarlo, así que puede permanecer en secreto si se desea.
-El código fuente es necesario en cada ejecución, así que no puede permanecer en secreto
-Los errores sintácticos se detectan durante la compilación. Si el fuente contiene errores sintácticos, el compilador no producirá un ejecutable.
Los errores sintácticos se detectan durante la ejecución, ya que traducción y ejecución se van haciendo simultáneamente. Algún error sintáctico podría quedar enmascarado, si para una ejecución concreta no es necesario traducir la línea que lo contiene. (Algunos intérpretes son capaces de evitar esto)
14
MAQUINA VIRTUAL
• Los programas interpretados o compilados
tienen distintas ventajas e inconvenientes. En
un intento de combinar lo mejor de ambos
mundos, durante la década de los 90 surge
con fuerza el enfoque de máquina virtual.
15
MAQUINA VIRTUAL
• Los principales lenguajes abanderados de esta
tecnología son, por un lado, el lenguaje Java de Sun
Microsystems, y por otro, los lenguajes de la
plataforma .NET de Microsoft: Visual Basic, C# y J#.
• También merece mención el lenguaje Delphi de la
compañía Borland, que desde hace tiempo funciona
para la plataforma .NET. Por supuesto, hay muchos
otros.
16
MAQUINA VIRTUAL
La filosofía de la máquina virtual es la siguiente: el
código fuente se compila, detectando los errores
sintácticos, y se genera una especie de ejecutable, con
un código máquina dirigido a una CPU imaginaria. A
esta especie de código máquina se le denomina
código intermedio, lenguaje intermedio, p-code, o
byte-code .
17
MAQUINA VIRTUAL
• Como esa CPU imaginaria no existe, para poder
ejecutar ese ejecutable, se construye un
intérprete. Este intérprete es capaz de leer cada
una de las instrucciones de código máquina
imaginario y ejecutarlas en una CPU real. A este
intérprete se le denomina máquina virtual.
18
MAQUINA VIRTUAL
19
MAQUINA VIRTUAL
• Portabilidad: El código intermedio ya está libre de
errores sintácticos, y es un código muy sencillo (al
estilo del código máquina). Si existe un intérprete
para este código en distintas plataformas, el
mismo código se puede ejecutar en cada una de
ellas. Además, la construcción de este intérprete
será relativamente sencilla y su ejecución más
rápida, ya que no ha de comprobar la sintaxis.
20
MAQUINA VIRTUAL
• Estabilidad: El código intermedio no es ejecutado
por una CPU real directamente, sino por una CPU
virtual: la máquina virtual. Esto permite un mayor
control sobre este código, facilitando la labor de
impedir que un código descontrolado afecte a la
estabilidad de la plataforma real.
21
MAQUINA VIRTUAL
• Para entender algo mejor este concepto,
podemos fijarnos, por ejemplo, en el lenguaje
JAVA. Imaginemos que disponemos de dos
ordenadores: uno de ellos tiene una CPU Pentium
y un sistema operativo Windows. El otro tiene
una CPU Sparc y un sistema operativo Solari
22
MAQUINA VIRTUAL
• En el primer ordenador instalamos un compilador
de Java y una máquina virtual de Java específicos
para Windows+Pentium.
• En el segundo hacemos lo mismo, pero con un
compilador y máquina virtual específicos para
Solaris+Sparc.
23
MAQUINA VIRTUAL
• Confeccionamos un programa sencillo (por
ejemplo, que escriba "Hola Mundo" por la
pantalla) escrito en Java en el primer ordenador y
lo compilamos, generando un ejecutable
intermedio.
• Si utilizamos la máquina virtual del primer
ordenador para ejecutar ese código intermedio,
comprobaremos que el programa escribe, en
efecto "Hola Mundo" por la pantalla.
24
MAQUINA VIRTUAL
• Si cogemos ese ejecutable intermedio lo llevamos
tal cual a la máquina con Solaris+Sparc, podremos
utilizar la máquina virtual instalada allí para
ejecutarlo, y comprobaremos que el resultado es
exactamente el mismo: "Hola Mundo".
25
MAQUINA VIRTUAL
• Este sistema es también utilizado por los juegos Java
de los teléfonos móviles o las PDA. Distintas marcas
de teléfonos móviles son capaces de ejecutar el
mismo juego, aun cuando cada teléfono tiene una
CPU y un sistema operativo distinto [Si, los teléfonos
móviles tienen CPU y un rudimentario sistema
operativo. Multitud de aparatos ,hoy en día los tienen:
reproductores de DVD, de MP3, cajeros automáticos,
GPS, incluso algunos electrodomésticos]