Sé que esta es una pregunta antigua, y hay muchas buenas respuestas para ella, pero no vi una respuesta con algunas claras distinciones claras. Primero hablaré sobre las tres categorías, y luego algunas advertencias y detalles importantes.
Entonces, primero
Intérpretes
- Quiero comprar una nueva conexión WiFi. ¿Cuál debo comprar, Sparks o Hathway?
- Cómo usar un puente WDS en un enlace TP WR740N
- ¿Se puede usar un Dongle WiFi 3G como un adaptador USB inalámbrico?
- Comparando soluciones de AP inalámbricas en un entorno escolar, ¿cuál sería la solución ideal dado que nos gustaría administrar, monitorear y usar configuraciones específicas del aula?
- ¿Cuánto cuesta wifi?
Los intérpretes son programas que toman el código fuente (ya sea en vivo en su editor dedicado, como con una consola Python, o como archivos de texto), e interpretan esas instrucciones Y las ejecutan cuando se encuentran .
La distinción clave de un intérprete es que no produce ningún código nativo para ser ejecutado por el procesador o la máquina virtual, sino que ejecuta las instrucciones en sí . Se puede decir que los navegadores web son intérpretes, por ejemplo: toman HTML (fuente) y luego ejecutan las instrucciones allí por sí mismos.
Los compiladores son programas que toman el código fuente (como archivos de texto) y traducen ese código a otro idioma. De manera abrumadora, el lenguaje al que se traducirá será, en última instancia, el código de máquina nativo para un microprocesador (real o virtual, ver más abajo). El contenido de los archivos de código fuente será un lenguaje de alto nivel (C / C ++, Pascal, Fortran, Java, Visual Basic, etc.).
La distinción clave de un compilador es que se ejecuta antes de tiempo desde el momento en que desea ejecutar las instrucciones. Y que lo que produce el compilador ya no requiere que el compilador presente sea útil. Es decir, una vez que compila un programa, el ejecutable resultante puede ejecutarse sin el compilador presente (lo cual no es cierto para un programa basado en intérprete).
Ensambladores
Los ensambladores son un tipo especializado de compilador. También toman el código fuente (como archivos de texto) y traducen ese código en código máquina nativo, pero lo más típico es que el idioma fuente tiene una relación literal muy cercana con el código máquina que produce. Es decir, normalmente, existe una relación uno a uno entre la fuente y la salida: por cada instrucción que escriba en la fuente, se genera una instrucción para el procesador de destino.
Líneas borrosas
En estos días, las líneas entre estos se difuminan cada vez más. Por ejemplo, Java es un lenguaje de alto nivel que sí se compila, pero el código producido por un compilador de Java se llama “bytecode” y está destinado a ser ejecutado por una máquina virtual Java, que podría decirse que es , un interprete.
Además, existen entornos de desarrollo que pueden interpretar el código (ejecutarlo línea por línea y mostrar lo que está haciendo) y compilar el código en código nativo. También puede haber algún tipo de línea de comandos de “modo inmediato”, donde puede escribir comandos que se interpretarán y ejecutarán en ese momento, sin tener que compilarlos.
A veces, se puede usar un compilador para pasar de un lenguaje de alto nivel a otro (he escuchado esto llamado “transcodificación” o “transcompilación”), que es una disciplina en sí misma. Puede hacer esto si tiene un idioma destinado a ser altamente portátil, por lo que se transcompila en varios idiomas diferentes que, cada uno, se ejecutan en entornos diferentes. Si bien esto suena innecesariamente complejo, en última instancia es muy eficiente para el programador. El lenguaje oscuro Monkey-X, destinado al desarrollo de juegos de código único con despliegue multiplataforma, utiliza este enfoque.
También hay algunos ensambladores que se ajustan más a la definición que di arriba de un compilador, en el sentido de que pueden honrar tanto las instrucciones sin formato uno a uno como las instrucciones de nivel superior que producen una salida no uno a uno.
Además, los compiladores para muchos idiomas permitirán el código de ensamblaje en línea, colocándolos de alguna manera en la clase de ensambladores que acabo de describir.
En resumen: los compiladores e intérpretes son dos cosas muy distintas, mientras que los ensambladores están muy cerca de los compiladores.