Download - 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
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
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.
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
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
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
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
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
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
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
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
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
-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)
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.
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
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
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.
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.
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.
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:
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.
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.
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.
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.
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
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.