compiladores intérpretes y máquinas virtuales

25
COMPILADORES INTERPRETES Y MAQUINAS VIRTUALES Mg. Ing. Rolando Chávez Guillén FACULTAD DE INGENIERIA DE SISTEMAS 1

Transcript of compiladores intérpretes y máquinas virtuales

Page 1: compiladores intérpretes y máquinas virtuales

1

COMPILADORES INTERPRETES Y

MAQUINAS VIRTUALES

Mg. Ing. Rolando Chávez Guillén

FACULTAD DE INGENIERIA DE SISTEMAS

Page 2: compiladores intérpretes y máquinas virtuales

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.

Page 3: compiladores intérpretes y máquinas virtuales

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.

Page 4: compiladores intérpretes y máquinas virtuales

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.

Page 5: compiladores intérpretes y máquinas virtuales

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.

Page 6: compiladores intérpretes y máquinas virtuales

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.

Page 7: compiladores intérpretes y máquinas virtuales

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.

Page 8: compiladores intérpretes y máquinas virtuales

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.

Page 9: compiladores intérpretes y máquinas virtuales

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.

Page 10: compiladores intérpretes y máquinas virtuales

10

COMPILAR

Page 11: compiladores intérpretes y máquinas virtuales

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

Page 12: compiladores intérpretes y máquinas virtuales

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..

Page 13: compiladores intérpretes y máquinas virtuales

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)

Page 14: compiladores intérpretes y máquinas virtuales

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.

Page 15: compiladores intérpretes y máquinas virtuales

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.

Page 16: compiladores intérpretes y máquinas virtuales

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 .

Page 17: compiladores intérpretes y máquinas virtuales

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.

Page 18: compiladores intérpretes y máquinas virtuales

18

MAQUINA VIRTUAL

Page 19: compiladores intérpretes y máquinas virtuales

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.

Page 20: compiladores intérpretes y máquinas virtuales

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.

Page 21: compiladores intérpretes y máquinas virtuales

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

Page 22: compiladores intérpretes y máquinas virtuales

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.

Page 23: compiladores intérpretes y máquinas virtuales

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.

Page 24: compiladores intérpretes y máquinas virtuales

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".

Page 25: compiladores intérpretes y máquinas virtuales

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]