34
Emulador y Simulador: Diferencias Escrito por Alejandro Ojeda sábado, 25 de septiembre de 2004 Cuántas veces hemos leido o escuchado: "debe probarlo antes en el emulador", "usa el simulador", pero en el ámbito Palm Os, que significa Emulador y que significado tiene Simulador. Les aclaramos la duda Emulador Un emulador (imitar lo que otro hace, procurando ventaja) es un programa capaz de actuar de intérprete en la máquina destino (nuestra PC o en una Mac, por ejemplo) para que un software originalmente escrito para otra plataforma pueda ser ejecutado en ella (PalmOS en nuestro caso). El emulador traduce el código de la máquina original al código de la de destino (nuestra PC), por lo que nuestra computadora ni siquiera sabe que está comportándose como otra plataforma (otro sistema operativo diferente al que ejecuta por defecto), y tan solo ejecuta el programa siguiendo su propio juego de instrucciones pero adaptado desde la plataforma original. Para poder ejecutarse, los desarrolladores de este tipo de aplicaciones se documentan sobre la arquitectura interna de las máquinas a emular (procesador, juego de instrucciones, tipo y cantidad de registros y de memoria, direccionamientos, etc.) e implementan un comportamiento idéntico al de las mismas, gracias a la traducción de cada una de las operaciones al código de la máquina destino. Gracias a la potencia de las computadoras actuales, el

Emulador y Simulador

Embed Size (px)

Citation preview

Page 1: Emulador y Simulador

Emulador y Simulador: Diferencias

Escrito por Alejandro Ojeda   

sábado, 25 de septiembre de 2004

Cuántas veces hemos leido o escuchado: "debe probarlo antes en el emulador", "usa el

simulador", pero en el ámbito Palm Os, que significa Emulador y que significado tiene

Simulador. Les aclaramos la duda

Emulador

Un emulador (imitar lo que otro hace, procurando ventaja) es un programa capaz de

actuar de intérprete en la máquina destino (nuestra PC o en una Mac, por ejemplo) para

que un software originalmente escrito para otra plataforma pueda ser ejecutado en ella

(PalmOS en nuestro caso). 

El emulador traduce el código de la máquina original al código de la de destino (nuestra

PC), por lo que nuestra computadora ni siquiera sabe que está comportándose como

otra plataforma (otro sistema operativo diferente al que ejecuta por defecto), y tan solo

ejecuta el programa siguiendo su propio juego de instrucciones pero adaptado desde la

plataforma original.

Para poder ejecutarse, los desarrolladores de este tipo de aplicaciones se documentan

sobre la arquitectura interna de las máquinas a emular (procesador, juego de

instrucciones, tipo y cantidad de registros y de memoria, direccionamientos, etc.) e

implementan un comportamiento idéntico al de las mismas, gracias a la traducción de

cada una de las operaciones al código de la máquina destino.

Gracias a la potencia de las computadoras actuales, el proceso de traducción, que en

otro caso conllevaría un tiempo elevado, se realiza en un instante, lo que permite dar la

impresión de estar ejecutando el juego o la aplicación como si del original se tratase,

aunque en algunos casos las velocidades pueden ser tanto mayores como menores de las

observadas en la plataforma nativa.

Simulador

Simular (que simula o finge). Aparato o instalación que simula un fenómeno o

reproduce el funcionamiento de una máquina, vehículo, etc. Es muy utilizado en

adiestramientos. Para comprender mejor la diferencia entre un emulador y un

simulador, ejemplifiquemos: en la aviación es muy común que a los pilotos se les

entrene en un simulador de vuelo (que simula –valga la redundancia- las condiciones de

Page 2: Emulador y Simulador

vuelo que pueden presentarse) con un emulador de la cabina de la aeronave.

PalmOne y PalmSource

En nuestro caso, anteriormente se emulaba el dispositivo físico (hardware) de las Palms

junto con los archivos (Roms) del sistema operativo y se podía correr diferentes

versiones del mismo. Ahora se simula el software (PalmOS) sin importar el dispositivo

físico.Simulador no es nada más que software de simulación que se utiliza para controlar su salida del programa de ejemplo-Modelsim

Emulador es un proceso de dumping el código en tiempo real, FPGA ejemplo la aplicación de su código

Emulador:

En informática, un emulador es un software que permite ejecutar programas de computadora en una

plataforma (arquitectura hardware o sistema operativo) diferente de la cual fueron escritos originalmente. A

diferencia de un simulador, que sólo trata de reproducir el comportamiento del programa, un emulador trata de

modelar de forma precisa el dispositivo que se está emulando.

Un uso popular de los emuladores es el de imitar la experiencia de los videojuegos de máquinas recreativas o

videoconsolas en sistemas operativos como Linux, Mac OS X o Microsoft Windows, o el poder ser jugados en

otras videoconsolas. La emulación de videojuegos de sistemas antiguos (abandonware) en las modernas

computadoras personales y videoconsolas de hoy día resulta generalmente más cómodo y práctico que en los

dispositivos originales. Sin embargo, puede ser requerido a los creadores de emuladores una licencia de

software para escribir programas originales que dupliquen la funcionabilidad de la ROM y BIOS del hardware

original, lo que comúnmente se conoce como high-level emulation o emulación de alto nivel.

Simulador.

Un simulador es un aparato que permite la simulación de un sistema, reproduciendo su comportamiento. Los

simuladores reproducen sensaciones que en realidad no están sucediendo.

Un simulador pretende reproducir tanto las sensaciones físicas (velocidad, aceleración, percepción del entorno)

como el comportamiento de los equipos de la máquina que se pretende simular. Para simular las sensaciones

físicas se puede recurrir a complejos mecanismos hidráulicos comandados por potentes ordenadores que

mediante modelos matemáticos consiguen reproducir sensaciones de velocidad y aceleración. Para reproducir

el entorno exterior se emplean proyecciones de bases de datos de terreno. A este entorno se le conoce como

"Entorno Sintético".

Para simular el comportamiento de los equipos de la máquina simulada se puede recurir varias técnicas. Se

puede elaborar un modelo de cada equipo, se puede utilizar el equipo real o bien se puede utilizar el mismo

software que corre en el equipo real pero haciéndolo correr en un ordenador más convencional (y por lo tanto

más barato). A esta última opción se la conoce como "Software Rehosteado".

UNIDAD V. INTERPRETES Y COMPILADORES

Page 3: Emulador y Simulador

Principios de la interpretación.

En

lugar de producir un programa objeto como resultado de una traducción, un intérprete

realiza las operaciones que implica el programa fuente. Por ejemplo un interprete podría

construir un árbol, y después efectuar las operaciones de los nodos conforme recorre el

árbol.

Muchas veces los interpretes se utilizan para ejecutar lenguajes de órdenes, pues cada

operador que se ejecuta en un lenguaje de este tipo suele ser una invocación de una

rutina, como un editor o un compilador. Del mismo modo algunos lenguajes de alto

nivel son interpretados, porque hay muchas cosas sobre los datos, como el tamaño y la

forma de las matrices que no se pueden deducir en el momento de la compilacióN.

Intérprete: Es un traductor que realiza la operación de compilación paso a paso. Para

cada sentencia que compone el texto de entrada, se realiza una traducción, ejecuta dicha

sentencia y vuelve a iniciar el proceso con la sentencia siguiente.

La principal ventaja del proceso de compilación frente al de interpretación es que los

programas se ejecutan mucho más rápidamente una vez compilados; por el contrario,

es más cómodo desarrollar un programa mediante un intérprete que mediante un

compilador puesto que en el intérprete las fases de edición y ejecución están más

integradas. La depuración de los programas suele ser más fácil en los intérpretes que

en los compiladores puesto que el código fuente está presente durante la ejecución.

Estas ventajas pueden incorporarse al compilador mediante la utilización de entornos

de desarrollo y depuradores simbólicos en tiempo de ejecución.

Diferencia entre un interprete y compilador

INTERPRETE: Es un programa que lee línea a línea un programa escrito en un

lenguaje; en lenguaje fuente y lo va traduciendo a un código intermedio, para ejecutarlo.

COMPILADOR: Es un programa que lee totalmente un programa escrito en un

lenguaje; el lenguaje fuente, y lo traduce a un programa equivalente a otro lenguaje,

lenguaje objeto.

A grandes rasgos un compilador es un programa que lee un programa escrito es un

lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el

lenguaje objeto. Como parte importante de este proceso de traducción, el compilador

informa a su usuario de la presencia de errores en el programa fuente.

Page 4: Emulador y Simulador

Existen dos tipos principales de traductores de los lenguajes de programación de alto nivel: Compilador e intérprete.

Existen dos tipos principales de traductores de los lenguajes de programación de alto nivel:

Compilador, que analiza el programa fuente y lo traduce a otro equivalente escrito en otro lenguaje (por ejemplo, en el lenguaje de la máquina). Su acción equivale a la de un traductor humano, que toma un libro y produce otro equivalente escrito en otra lengua.

Intérprete, que analiza el programa fuente y lo ejecuta directamente, sin generar ningún código equivalente. Su acción equivale a la de un intérprete humano, que traduce las frases que oye sobre la marcha, sin producir ningún escrito permanente. Intérpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios:

Un intérprete facilita la búsqueda de errores, pues la ejecución de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.). Además, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecución.

Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En cambio, un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces como se ejecute (incluso miles o millones de veces).

Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un intérprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores.

Compiladores, intérpretes y máquinas virtuales

miércoles, 13 de septiembre de 2006

Cuando aprendemos a programar, normalmente

escogemos o nos imponen un determinado lenguaje de

programación. Una de las primeras distinciones que es

interesante conocer acerca de nuestro lenguaje es si el

lenguaje se compila o se interpreta.

En este artículo intentaremos explicar las diferencias

entre ambas formas de trabajar. Además, desde la

aparición del lenguaje Java hace ya algunos años, ha

tomado fuerza otro planteamiento muy interesante: el de

las llamadas máquinas virtuales.

En este 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 y

Categorías

Ingeniería del

software  ( 4

artículos )

Acerca de la

ingeniería

del software

y el ciclo de

vida del

software.

El

programador

elegante  ( 12

artículos )

Una serie de

artículos

dedicados a

buenas

prácticas en

Page 5: Emulador y Simulador

su equivalente Mono para entornos *ix.

Antes de comentar cada técnica, hagamos hincapié en

una serie de conceptos.

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 plano, utilizando algún

editor de textos más o menos sencillo, o bien alguno de

los editores especializados para programación. 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.

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. 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. Aunque lo trataremos en otro

artículo, por el momento nos quedaremos con que no son

lo mismo: el lenguaje ensamblador es un lenguaje de

programación y el código máquina no. Ningún

programador de aplicaciones pierde su tiempo y sus

neuronas escribiendo secuencias de 1 y 0 directamente)

Los humanos expresamos la dinámica de un programa

mediante un lenguaje de los llamados de "alto nivel".

Estos son lenguajes como C#, Java, Visual Basic, Delphi,

etc... casi cualquiera de los nombres que vd. conoce.

Decimos que un lenguaje tiene un nivel más bajo cuanto

más parecido es en su expresión al código máquina y al

funcionamiento de la CPU, y de un nivel más alto cuanto

más ajeno es al funcionamiento de la CPU y más se

programación

Opinión  ( 7

artículos )

Artículos de

opinión, no

necesariame

nte

fundamenta

da.

Básico  ( 12

artículos )

Artículos

básicos

sobre temas

básicos.

 

Artículos relacionados

.NET

framework

3.0 ya está

disponible

Algoritmos

fonéticos:

Soundex

Aorcado bajo

la luz

plateada

Bonito poster

de .net

Compiladores

de

compiladores

Page 6: Emulador y Simulador

acerca a la forma de razonar humana.

Pues bien... si realizamos un programa escribiendo su

fuente en un lenguaje de alto nivel y la CPU sólo es capaz

de ejecutar órdenes en el lenguaje de más bajo nivel que

existe (el código máquina), es obvio que es necesario

realizar un proceso de traducción desde el lenguaje de

alto nivel al código máquina.

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

(incluso varios miles). Lo que para nosotros es una sola

orden, para la CPU supone muchos pequeños pasos

extremadamente simples.

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

COMPILAR

(NOTA: nos referimos a la compilación tradicional, no a la

compilación en un entorno de máquina virtual, como Java

o .NET)

La compilación consiste en coger los ficheros fuente que

conforman un programa y, línea por línea, traducir cada

instrucción de alto nivel por varias instrucciones en código

máquina que realicen lo que la instrucción de alto nivel

expresa.

Si se repite esa traducción para todas las líneas del código

fuente, obtendremos un conjunto de instrucciones

máquina. Grabando esas instrucciones máquina en un

fichero que contiene una estructura interna que un

determinado sistema operativo es capaz de entender,

en .net

Page 7: Emulador y Simulador

obtenemos un fichero binario ejecutable, o simplemente,

"un ejecutable".

El encargado de realizar esta traducción es un tipo de

programa llamado compilador. En su funcionamiento

más básico, un compilador acepta uno o más ficheros

fuente y si no contienen errores sintácticos produce un

fichero binario ejecutable, que un sistema operativo será

capaz de cargar en memoria principal y pedir a la CPU que

lo ejecute.

A menudo se compara a un compilador con un traductor

de idiomas. Imagine un libro escrito en inglés. Para

publicar su versión en español, una persona que conoce

las reglas de los dos idiomas y dispone de la técnica para

expresarse en ambos va leyendo el libro en inglés frase a

frase y va escribiendo su equivalente en español.

 

 

INTERPRETAR

El proceso de interpretación es bastante diferente al de

compilación, pero su resultado debería ser similar: la

ejecución de un programa.

El encargado de hacer esto es un programa llamado

intérprete. A diferencia del compilador, el intérprete no

produce una traducción a código máquina. El intérprete

intenta realizar "al vuelo" lo que se expresa en los

ficheros fuente. El intérprete contiene en su interior miles

de porciones de código máquina, que combinándolas

Page 8: Emulador y Simulador

adecuadamente pueden realizar las mismas tareas que

expresa una orden escrita en el lenguaje de alto nivel.

Cuando un programa es interpretado, el proceso que se

sigue es el siguiente: el intérprete obtiene una instrucción

del fichero fuente y la realiza inmediatamente. Para ello,

ejecuta en secuencia varias de esas porciones de código

máquina que comentábamos antes, y que residen en el

interior del intérprete. Cuando la CPU termina la ejecución

de esa secuencia, el resultado es que la CPU habrá hecho

lo que la línea de código fuente expresaba.

Repitiendo esta secuencia para todas las líneas, el

intérprete realiza lo que los ficheros fuente expresan... es

decir, ejecuta el programa.

A menudo, se compara al intérprete con un traductor

simultáneo de idiomas. Por ejemplo, cuando vemos en la

tele a alguna personalidad expresándose en otro idioma y

un traductor simultáneo nos traduce lo que esta persona

dice "al vuelo". Esta persona no espera a que el discurso

de la personalidad concluya para traducirlo todo de golpe,

sino que cada vez que este traductor ha entendido un

concepto, lo traduce al español y lo expresa.

Diferencias entre compilar e interpretar

La opción de compilar o interpretar no está siempre

disponible. Algunos lenguajes típicamente se compilan y

otros típicamente se interpretan. En muy pocas ocasiones

podemos optar por una u otra indistintamente.

Por ejemplo, programas escritos en lenguajes como C o

Pascal prácticamente siempre se compilan, y otros como

Perl o Python prácticamente siempre se interpretan.

En el siguiente cuadro se esquematizan algunas de las

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

-El ejecutable va dirigido a -No hay ejecutable, así que si

Page 9: Emulador y Simulador

una plataforma concreta

(una CPU, un sistema

operativo, y quizá alguna

otra consideración), siendo

prácticamente imposible

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.

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

que se van a interpretar no

suelen ser muy dependientes

de su plataforma de destino,

siendo más portables.

-Los lenguajes compilados

suelen proporcionar al

programador mecanismos

más potentes y flexibles, a

costa de una mayor ligazón a

la plataforma.

-Los lenguajes interpretados

no suelen ser muy

dependientes de la

plataforma de destino, pero

en contrapartida suelen ser

menos flexibles y potentes

que los compilados.

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

-Un programa compilado -Un programa interpretado

Page 10: Emulador y Simulador

puede, por error, afectar

seriamente a la estabilidad

de la plataforma,

comprometiendo la

ejecución de los otros

procesos, por ejemplo,

acaparando la CPU, la

memoria o algún otro

recurso, siendo a veces

complicado para el sistema

operativo interrumpir su

ejecución.

con un comportamiento torpe

normalmente puede ser

interrumpido sin dificultad,

ya que su ejecución está bajo

el control del intérprete, y no

sólo del sistema operativo.

 

Por último, comentar que existe un tipo de

compilador denominado compilador cruzado, que

se trabaja en una plataforma y es capaz de construir

ejecutables para otra. Por ejemplo: los programas para

una pequeña PDA, no se programan ni se compilan

utilizando ésta, sino que se utiliza un ordenador de

sobremesa, mucho más cómodo para el desarrollador,

que tiene otra CPU y otro sistema operativo. No obstante,

se utiliza un compilador que genera ejecutables para la

PDA, con su CPU y su sistema operativo.

 

LA MÁQUINA VIRTUAL

Hemos visto que 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. 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

Page 11: Emulador y Simulador

para la plataforma .NET. Por supuesto, hay muchos otros.

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 (según quién nos lo

cuente).

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.

¿Y para qué todo este montaje?

Pues esta pregunta puede responderse desde varios

puntos de vista, pero se pude afirmar que este esquema

aporta muchas de las ventajas de la compilación y la

interpretación, deshaciéndose de algunos inconvenientes,

pero principalmente se pueden recalcar dos:

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.

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

Page 12: Emulador y Simulador

estabilidad de la plataforma real.

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

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.

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.

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

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

cacharros de hoy en día los tienen: reproductores de DVD,

de MP3, cajeros automáticos, GPS, incluso algunos

electrodomésticos]

Desde otros puntos de vista también podemos encontrar

las ventajas de este enfoque.

Vamos a repasar la tabla anterior, pero añadiendo la

máquina virtual.

Compilar Interpretar Máquina virtual

Page 13: Emulador y Simulador

-Genera un

ejecutable

-No genera un

ejecutable

-Genera una

especie de

ejecutable, pero

portable entre

plataformas,

dirigido a una CPU

imaginaria.

-El proceso de

traducción se

realiza una sola

vez

-El proceso de

traducción se

realiza en cada

ejecución

-Se realiza una

sola traducción a

código intermedio,

y una

interpretación

muy rápida del

código intermedio

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

-La ejecución no

es tan rápida

como en la

compilación

tradicional ni tan

lenta como en la

intepretación.

-El ejecutable va

dirigido a una

plataforma

concreta (una CPU,

un sistema

operativo, y quizá

alguna otra

consideración),

siendo

prácticamente

imposible portarlo

a otra. En

ocasiones, si existe

un compilador para

otra plataforma, se

puede recompilar

el programa,

aunque

normalmente esto

plantea serias

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

programas que se

van a interpretar no

-El ejecutable va

dirigido a una CPU

imaginaria. Se

puede transportar

a una plataforma

para la cual exista

una "máquina

virtual" (el

intérprete de

código intermedio)

Page 14: Emulador y Simulador

dificultades. Los

programas que se

van a compilar

suelen estar muy

ligados a la

plataforma de

destino.

suelen ser muy

dependientes de su

plataforma de

destino, siendo más

portables.

-Los lenguajes

compilados suelen

proporcionar al

programador

mecanismos más

potentes y

flexibles, a costa

de una mayor

ligazón a la

plataforma.

-Los lenguajes

interpretados no

suelen ser muy

dependientes de la

plataforma de

destino, pero en

contrapartida

suelen ser menos

flexibles y potentes

que los compilados.

-La plataforma de

destino es virtual.

Así pues, los

programas son

dependientes de

esta plataforma

virtual, que es

emulada luego

sobre plataformas

reales por la

"maquina virtual".

-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

-El código fuente

no es necesario

para la ejecución,

sólo el código

intermedio.

-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

-Los errores

sintácticos se

detectan durante

la compilación.

Page 15: Emulador y Simulador

contiene. (Algunos

intérpretes son

capaces de evitar

esto)

-Un programa

compilado puede,

por error, afectar

seriamente a la

estabilidad de la

plataforma,

comprometiendo la

ejecución de los

otros procesos, por

ejemplo,

acaparando la CPU,

la memoria o algún

otro recurso,

siendo a veces

complicado para el

sistema operativo

interrumpir su

ejecución.

-Un programa

interpretado con un

comportamiento

torpe normalmente

puede ser

interrumpido sin

dificultad, ya que su

ejecución está bajo

el control del

intérprete, y no sólo

del sistema

operativo.

-Un programa con

un

comportamiento

torpe es ejecutado

sobre la máquina

virtual, que tiene

un control

absoluto sobre él,

con lo que no se

suele

comprometer la

estabilidad de la

plataforma real.

En definitiva, compilación e interpretación son las

opciones típicas para los lenguajes de programación más

tradicionales, presentando cada una de ellas sus ventajas

e inconvenientes. El enfoque más moderno es el de

máquina virtual, en el que se realiza una compilación

cuya plataforma de destino es una máquina imaginaria o

virtual, y el ejecutable intermedio es posteriormente

interpretado en cada ejecución. El mundo de la

programación va poco a poco pero sin pausa adoptando

cada vez más este enfoque, ya que presenta un buen

compromiso entre portabilidad y estabilidad. Este enfoque

es el adoptado por los lenguajes más modernos, como

Java, Visual Basic, C#, J#, Delphi, y cada día surgen

versiones de otros lenguajes que funcionan según este

esquema, como SmallTalk, Python, Eiffel y un largo

etcétera.

NOTAS:

1. El término "máquina virtual" se aplica en ocasiones a productos como

VMWare o VirtualPC, que permiten simular el funcionamiento de un PC dentro de otro. Aunque se utilice el mismo término, el funcionamiento de

Page 16: Emulador y Simulador

este tipo de productos no es el que se describe en este artículo. 2. La plataforma Java, originalmente desarrollada por Sun Microsystems

dispone de versiones para sistemas operativos Linux, Windows y Solaris, y para varias CPU. Es necesario mencionar que existen otras

implementaciones de Java que no han sido desarrolladas por Sun. 3. La plataforma .NET, originalmente desarrollada por Microsoft dispone de

versiones que en principio van orientadas sólo a sistemas operativos Windows. Es necesario mencionar que existen otras implementaciones de .NET que no han sido desarrolladas por Microsoft y que permiten el desarrollo y la ejecución en otros sistemas operativos. Es muy de destacar

la plataforma Mono , que permite la ejecución y el desarrollo de

proyectos .NET en otros sistemas operativos distintos de Windows.

 

 Creo que ambos son necesarios para la traduccion de un lenguaje de

nivel alto al nivel bajo, ya que el compilador tomara como datos el

programa escrito en en lenguaje de alto nivel y dara como resultado el

mismo programa pero escrito en lenguaje maquina, programa que ya

puede ejecutar directa o indirectamente el ordenador.

Por ejemplo, un programa escrito en el lenguaje C, necesita del

compilador C para poder ser traducido, en cambio, para traducir un

programa escrito en java, necesitamos el compilador java...

Un interprete, a diferencia de un compilador, no genera un programa

escrito en lenguaje maquinaa partir del programa fuente, si no que

efectua la traduccion y ejecucion simultaneamentepara cada una d las

sentencias del programa.

Por ejemplo, un programa escrito en lenguaje Basic, necesita del el

interprete Basic para poder ser ejecutado...

Intérprete (informática)De Wikipedia, la enciclopedia libre

Saltar a navegación, búsqueda

En ciencias de la computación, intérprete o interpretador es un programa informático capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel,. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los primeros (los intérpretes) sólo realizan la traducción a medida que sea

Page 17: Emulador y Simulador

necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.

Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema.

Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).

Para mejorar el desempeño, algunas implementaciones de programación de lenguajes de programación pueden interpretar o compilar el código fuente original en una más compacta forma intermedia y después traducir eso al código de máquina (ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej. Python, UCSD Pascal y Java).

Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.

En la actualidad, uno de los entornos más comunes de uso de los intérpretes informáticos es Internet, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

QUE ES, PARA QUE SIRVE Y COMANDOS ADMITIDOS POR EL EDITOR

DE COMANDOS DE WINDOWS VISTA.

El editor de comandos de Windows Vista (que aparece con el nombre de Símbolo del sistema) es, como su nombre indica, un editor de línea de comandos.

Aunque por su apariencia algunos llaman a este editor DOS o MS-DOS, en Windows XP y mucho menos en Windows Vista se puede hablar de DOS. Es cierto que su apariencia puede llamar a engaño y que algunos de sus comandos (no todos) tienen la misma sintaxis que tenían en DOS e incluso realizan la misma función, pero son comandos de Windows los que aquí se ejecutan, no de DOS.

Este editor de comandos es especialmente útil cuando por algún motivo es la única forma en la que se nos permite iniciar Windows. Esto puede ser debido a varios motivos, y la razón de que se nos permita arrancar en este modo y no en otro es que no carga un entorno gráfico ni muchos de los programas y servicios que carga incluso en modo seguro.

Para iniciar este editor desde Windows tenemos varios métodos.

Page 18: Emulador y Simulador

El primero de ellos es mediante Inicio -> Todos los programas -> Accesorios -> Símbolo del sistema, tal como podemos ver en la imagen inferior.

Otro método es ejecutando CMD desde el comando Ejecutar.

Page 19: Emulador y Simulador

Este comando estaba activado por defecto en Windows XP, pero en Windows Vista hay que activarlo. Para activarlo tenemos que ir a Propiedades de Inicio (hacer clic con el botón derecho del ratón sobre Inicio -> Propiedades), y dentro de estas a Menú Inicio y Personalizar. Dentro de esta ventana de personalización tenemos que marcar la casilla de verificación de Comando Ejecutar, tal como se muestra en la imagen inferior.

Page 20: Emulador y Simulador

Bien, por cualquiera de estos métodos accedemos a la ventana de Símbolo del sistema, que es el Editor de comandos de Windows.

Desde este editor podemos ejecutar una serie de programas de gran utilidad, de los que hablaremos en otros tutoriales.

Lo que sí vamos a ver a continuación es la lista de comandos (repito que son comandos de WINDOWS, no de MS-DOS) que podemos ejecutar. Observaremos que muchos tienen el mismo nombre que los comandos de MS-DOS, y que la mayoría de ellos hacen las mismas funciones, pero hay otros que incluso teniendo el mismo nombre tienen un comportamiento diferente a como lo hacían en MS-DOS.

Los comandos de MS-DOS, aunque tengan el mismo nombre, son en casi todos los casos incompatibles con este Editor de líneas de comandos (dan un error de incompatibilidad de versión).

Los comandos admitidos por el editor de comandos de Windows Vista son los siguientes:

Page 21: Emulador y Simulador

ASSOC.- Muestra o modifica las asociaciones de las extensiones de archivos.

ATTRIB.- Muestra o cambia los atributos del archivo.

BREAK.- Establece o elimina la comprobación extendida de Ctrl+C.

BCDEDIT.- Establece propiedades de la base de datos de arranque para controlar la carga de arranque.

CALCS.- Muestra o modifica las listas de control de acceso (ACLs) de archivos.

CALL.- Llama a un programa por lotes desde otro.

CD.- Muestra el nombre del directorio actual o cambia a otro directorio.

CHCP.- Muestra o establece el número de páginas de códigos activa.

CHDIR.- Muestra el nombre del directorio actual o cambia a otro directorio.

CHKDSK.- Comprueba un disco y muestra un informe de su estado.

CHKNTFS.- Muestra o modifica la comprobación de disco de arranque.

CLS.- Borra la pantalla.

CMD.- Inicia una nueva instancia del intérprete de comandos de Windows.

COLOR.- Establece los colores de primer plano y fondo predeterminados de la consola.

COMP.- Compara el contenido de dos archivos o un conjunto de archivos.

COMPACT.- Muestra o cambia el estado de compresión de archivos en particiones NTFS.

CONVERT.- Convierte volúmenes FAT a volúmenes NTFS. No puede convertir la unidad actual.

COPY.- Copia uno o más archivos en otra ubicación.

DATE.- Muestra o establece la fecha.

DEL.- Elimina uno o más archivos.

DIR.- Muestra una lista de archivos y subdirectorios en un directorio.

DISKCOMP.- Compara el contenido de dos disquetes.

DISKCOPY.- Copia el contenido de un disquete en otro.

DISKPART.- Muestra o configura las propiedades de partición de disco.

DOSKEY.- Edita líneas de comando, memoriza comandos de Windows y crea macros.

DRIVERQUERY.- Muestra el estado y las propiedades actuales del controlador de dispositivos.

ECHO.- Muestra mensajes o activa y desactiva el eco.

Page 22: Emulador y Simulador

ENDLOCAL.- Termina la búsqueda de variables de entorno del archivo por lotes.

ERASE.- Elimina uno o más archivos.

EXIT.- Sale del programa CMD.EXE (interfaz de comandos).

FC.- Compara dos archivos o conjunto de archivos y muestra las diferencias entre ellos.

FIND.- Busca una cadena de texto en uno o más archivos.

FINDSTR.- Busca cadenas de texto de archivos.

FOR.- Ejecuta un comando para cada archivo en un conjunto de archivos.

FORMAT.- Formatea un disco para usarse con Windows.

FSUTIL.- Muestra o configura las propiedades de sistema de archivos.

FTYPE.- Muestra o modifica los tipos de archivo usados en una asociación de archivos.

GOTO.- Direcciona el intérprete de comandos de Windows a una linea enun programa por lotes.

GPRESULT.- Muestra información de directivas de grupo por equipo o usuario.

GRAFTABL.- Permite a Windows mostrar un juego de caracteres extendidos en modo gráfico.

HELP.- Proporciona información de ayuda para los comandos de Windows.

ICALCS.- Muestra, modifica, hace copias de seguridad o restaura listas.

IF.- Ejecuta procesos condicionales en programas por lotes.

LABEL.- Crea, cambia o elimina la etiqueta del volumen de un disco.

MD.- Crea un directorio.

MKDIR.- Crea un directorio.

MKLINK.- crea vínculos simbólicos y vínculos físicos.

MODE.- Configura un dispositivo de sistema.

MORE.- Muestra la información pantalla por pantalla.

MOVE.- Mueve uno o más archivos de un directorio a otro en la misma unidad.

OPENFILES.- Muestra archivos compartidos abiertos por usuarios remotos.

PATH.- Muestra o establece una ruta de búsqueda para archivos ejecutables.

PAUSE.- Suspende el proceso de un archivo por lotes y muestra un mensaje.

POPD.- Restaura el valor anterior del directorio actual guardado por PUSHD.

PRINT.- Imprime un archivo de texto.

Page 23: Emulador y Simulador

PROMPT.- Cambia el símbolo de comandos de Windows.

PUSHD.- Guarda el directorio actual y después lo cambia.

RD.- Quita un directorio.

RECOVER.- Recupera la información legible de un disco dañado o defectuoso.

REM.- Marca comentarios en archivos por lotes o CONFIG.SYS.

REN.- Cambia el nombre de uno o más archivos.

RENAME.- Cambia el nombre de uno o más archivos.

REPLACE.- Reemplaza archivos.

RMDIR.- Quita un directorio.

ROBOCOPY.- Utilidad avanzada para copiar árboles de archivos y directorios.

SET.- Muestra, establece o quita variables de entorno de Windows.

SETLOCAL.- Comienza la sección de cambios locales de entorno en un archivo por lotes.

SC.- Muestra o configura servicios (procesos en segundo plano).

SCHTASKS.- Programa comandos y programas para ejecutarse en un equipo.

SHIFT.- Cambia posición de modificadores reemplazables en archivos por lotes.

SHUTDOWN.- Permite el apagado local o remoto de un equipo.

SORT.- Ordena la salida.

START.- Inicia otra ventana para ejecutar un programa o comando.

SUBST.- Asocia una ruta de acceso con una letra de unidad.

SYSTEMINFO.- Muestra las propiedades y la configuración específicas del equipo.

TASKLIST.- Muestra todas las tareas en ejecución, incluidos los servicios.

TASKKILL.- Termina o interrumpe un proceso o aplicación que se está ejecutando.

TIME.- Muestra o establece la hora del sistema.

TITLE.- Establece el título de la ventana de una sesión de CMD.EXE.

TREE.- Muestra gráficamente la estructura de directorios de una unidad o ruta de acceso.

TYPE.- Muestra el contenido de un archivo de texto.

VER.- Muestra la versión de Windows.

VERIFY.- Comunica a Windows si debe comprobar que los archivos se escriben de forma correcta en un disco.

Page 24: Emulador y Simulador

VOL.- Muestra la etiqueta de volumen y el número de serie del disco.

XCOPY.- Copia archivos y árboles de directorios.

WMIC.- Muestra información de WMI en el shell de comandos interactivo.

Hay una serie de comandos nuevos en Windows Vista, que aparecen subrayados en la lista de comandos. También hay algunos comandos que estaban disponibles hasta Windows XP y que no lo están en esta nueva versión. Varios de los comandos que están disponibles en esta versión no aparecen en la lista de comandos disponibles en XP, pero sí están disponibles (al menos en Windows XP Profesional SP2). Estos comandos son: DISKPART, DRIVERQUERY, FSUTIL, GPRESULT, OPENFILES, SC, SCHTASKS, SYSTEMINFO, TASKLIST, TASKKILL y WMIC. En cuanto a SHUTDOWN, también está disponible en XP, aunque tampoco aparece en la lista de comandos de este, pero con bastantes menos opciones que en Windows Vista.

En el mismo editor de comandos podemos acceder a la ayuda en cuanto a la función y modificadores de estos comandos, escribiendo HELP seguido del nombre del comando. Por ejemplo, si queremos obtener ayuda sobre el comando DIR escribiremos HELP DIR.

Sobre compiladpres y editores

Hace un tiempo un amigo me pregunto cual era para mi el mejor compilador de C para Windows. Este es un tema que varia radicalmente desde los diferentes puntos de vista de lo que uno considera algo mejor o que caracteristicas tienen mas relevancia que otras, por lo que no esperen que este post y los que sigan a este sean algo neutral… esto es como el fulbo vio?

Entonces primero aclaro que voy a hablar unicamente sobre software libre, asi que cosas como el Visual-C++ ya quedan descartadas de entrada. Especificamente voy a tratar las siguientes aplicaciones:

MinGW: el port mas prominente del GCC para el sistema Windows.Notepad++: un editor de texto que tiene highlighting para muchos lenguajes.NASM: un ensamblador para x86.Alink: un linkeador para Windows/DOS.Frhed: un simple editor hexadecimal.Dev-C++: un IDE que usa el MinGW como compilador.Code Blocks: otro IDE, a diferencia del anterior este esta siempre actualizado.Crimson Editor: un IDE con varios seguidores (no incluye compilador).Eclipse: el super poderoso IDE de IBM, ya desde hace tiempo open-source.

Durante esta semana voy a hablar sobre estas aplicaciones… espero q no se aburran

IDEs, Editores y Compiladores Tengo que aceptarlo. Hasta tercer semestre para programar en java usaba JCreator, y para programar en C++ usaba Visual C++. Si no tenia dichas herramientas (cada uno con su respectivo botoncito de compilar super

visible) no era capa de hacer nada.

El asunto de usar este tipo de herramientas no tiene nada de vergonzoso.

Page 25: Emulador y Simulador

Lo vergonzoso resulta en que a veces, tanto "user friendly" en las herramientas de programación resulta perjudicial... especialmente cuando

uno está aprendiendo.

Pues bien. El semestre pasado estaba de monitor de Matemáticas Especiales 2 (Traducido a un lenguaje mas universal sería algo así como Matemáticas Discretas) y como "motivación" era un pequeño trabajo en Haskell. Cuando empecé a dar la inducción al lenguaje y comencé por lo

básico.

Diego: "Bueno... Inicialmente las herramientas mas usadas son GHC y Hugs. Existe versión para Windows y Linux..."Estudiante: "Ahí descargamos el IDE?"

Diego: "No... ahí encuentran el compilador o el interprete"Estudiante: "Por eso"

Diego: "Ehm no... no son la misma cosa"

A eso es precisamente a lo que me refiero. Algunos personajes creen que la labor pedagógica consiste en hacerle las cosas fácil al pequeño padawan y en este intento surgen oleadas de profesionales incapaces de salirse del

ambiente Java .Net de turno. Y respecto a eso hay una historia muy curiosa.

Pascal, el lenguaje desarrollado por Niklaus Wirth, tenía como objetivo principal un uso educacional de la programación estructurada. De hecho

uno a veces se topa en mucho articulo que el formalismo no muy práctico de pascal resulta conveniente para escribir pseudocódigo. El uso académico

de dicho lenguaje resulto en la utilización del mismo para aplicaciones de verdad simplemente porque a la hora de que el nuevo profesional escogiera

una herramienta, usaría la que conocía.

En fin, no me desviare mas.

Que es un Editor?Esta es fácil.

Básicamente hay dos tipos, editores de texto plano, y editores de "richt text" (texto enriquecido?). Los primeros son los que nos interesan. Estos permiten manipular texto en alguna de sus diversas codificaciones, pero

usualmente se refiere a editores de texto plano ASCII.

A veces estos poseen capacidades para reconocer que el texto que se escribe, posee algún tipo de gramática y otras veces tienen herramientas

para interactuar con el entorno (Acceso a Shell por ejemplo).

Que es un Compilador?Sin meternos mucho en discusiones casi filosóficas como que el compilador debe ser tipo 2 en la jerarquía de Chomsky no es compilador, o cosas del estilo, entenderemos por compilador como aquel programa que, toma un

Page 26: Emulador y Simulador

Programa fuente, y entrega un Programa Objetivo.

Un Compilador es un traductor y nada mas.

Que es un IDE?

Integrated Development Environment. La idea es esa, tener un compilador, un editor y otras cosas, por ejemplo:

Debugger: Usualmente se refiere a la posibilidad de poner puntos de parada en el

programa y revisar el estado de las variables.Perfiles de compilación

Si. Posibilidad de tener varias formas a la hora de compilar el proyecto, para ajustar opciones de optimización y demás.

y muchas otras cosas.

En fin. Creo que hasta ahí hay suficiente contexto y pese a que digo solo cosas elementales tenía que hacer un esfuerzo por arreglar el camino al resto de Desencaminados. Probablemente mañana hable de mi reciente

experiencia con Emacs ya que hoy me extendí mucho.