¿Cuáles son las diferencias entre un compilador, un intérprete y un ensamblador? Proporcione ejemplos.

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

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.

Compiladores

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.

Gracias por [correo electrónico protegido] ,
Diferencia entre compilador e intérprete

  • El compilador escanea todo el programa una vez y luego lo convierte en lenguaje máquina que luego puede ser ejecutado por la página de la computadora en el procesador. En resumen, el compilador traduce todo el programa de una vez y luego lo ejecuta. Por otro lado, el intérprete convierte primero el lenguaje de alto nivel en un código intermedio y luego lo ejecuta línea por línea. Este código intermedio es ejecutado por otro programa.
  • La ejecución del programa es más rápida en el compilador que en el intérprete, ya que en el código del intérprete se ejecuta línea por línea.
  • El compilador genera un informe de error después de la traducción de todo el código, mientras que en el caso del intérprete, una vez que se encuentra un error, se le notifica y no se escanea más código.
  • Ejemplo Python es un lenguaje interpretado, mientras que C, C ++ son lenguajes compilados. Sin embargo, Java utiliza tanto el compilador como el intérprete. En la próxima publicación, veremos cómo funciona exactamente esto en caso de Java.
  • Representación esquemática

¿Qué es ensamblador?
Assembler se utiliza para convertir el código de lenguaje de bajo nivel (lenguaje ensamblador) en lenguaje de nivel de máquina. Si ha trabajado en microprocesadores como 8085 y 8086, el módulo que convierte el lenguaje ensamblador en lenguaje de máquina no es más que Assembler.
Java: ¿compilado o interpretado?

Como nuestros conceptos básicos ahora están claros, pasemos a Java. Bueno, debes haber escuchado que Java es un lenguaje compilado e interpretado . Cuando se trata de la pregunta: ¿Cómo funciona Java? Va algo como abajo –

  • Cuando ejecuta javac HelloWorld.java, se invoca el compilador java que convierte el código legible por humanos (Contenido del archivo .java) en códigos de bytes java (forma intermedia). Estos códigos de bytes se almacenan en un archivo especial (llamado archivo de clase) con extensión .class .
  • Finalmente, cuando ejecuta java HelloWorld se invoca al intérprete java que lee estos códigos de byte línea por línea, lo convierte en lenguaje máquina y lo ejecuta.

Esta es la razón por la cual Java se llama como lenguaje tanto compilado como interpretado. Pero esto no es todo. Hay otro concepto llamado: compilación justo a tiempo

JIT (compilación justo a tiempo)
Puede leer la página wiki para obtener detalles completos, pero aquí solo voy a proporcionar puntos relevantes desde la perspectiva de Java.

  • JIT, como su nombre indica, lo hace justo a tiempo o sobre la marcha compilación de códigos de bytes de Java en lenguaje nativo que puede ser ejecutado directamente por el procesador .
  • El compilador JIT se ejecuta solo después de que el programa (JVM) ha comenzado. por lo tanto, tiene acceso a información dinámica de tiempo de ejecución, mientras que un compilador estándar no tiene y puede hacer mejores optimizaciones, como las funciones de línea que se usan con frecuencia.

Pero puede surgir una pregunta: ¿ se dedica tiempo de adición cada vez para compilar el código?

Sí, es cierto si usamos JIT puro, luego se dedica tiempo adicional a la compilación cada vez que se ejecuta el código y, por lo tanto, se introdujo una nueva técnica: la compilación HotSpot. En esto

  • JVM mantiene un recuento del número de veces que se ejecuta un módulo / rutina. Cuando el programa / JVM se inicia por primera vez, pasa por una compilación normal a códigos de bytes seguidos de interpretación.
  • Pero si el recuento de ejecución excede un límite, los códigos de bytes correspondientes se compilan en código máquina por JIT y se ejecutan directamente a partir de entonces.
  • La ventaja es que no hay retraso inicial debido a la compilación.

    La imagen de arriba representa mejor la visión general.

    • El compilador de Java ( javac ) convierte el código de Java en código de byte y luego el intérprete de Java ( java ) interpreta los códigos de byte línea por línea, lo convierte en código nativo y lo ejecuta.
    • Sin embargo, si se encuentra un ” punto caliente “, generalmente un código o método que se ejecuta con mucha frecuencia, aparece el compilador JIT. Compila el código de bytes en código nativo con optimizaciones (ya que JIT tiene información de tiempo de ejecución) y, a partir de ese momento, ese fragmento de código nunca se interpreta: el código nativo generado por JIT se ejecuta directamente.
    • Sí, esto tendrá una sobrecarga adicional en términos de tiempo y huella de memoria, ya que JIT realiza optimizaciones y compilaciones en código nativo sobre la marcha (mientras su aplicación se está ejecutando), pero las llamadas posteriores a esa parte del código son eficientes y rápidas.

    Algunas de las diferencias entre compiladores e intérpretes son:

    Fuente: Diferencia entre compilador e intérprete . Puede encontrar más diferencias en la fuente principal. Estoy enumerando algunas de las diferencias aquí.

    1. Un compilador traduce el código fuente completo a la vez, mientras que un intérprete traduce el código fuente línea por línea.
    2. Un compilador convierte el código fuente de alto nivel en código objeto que luego puede ejecutarse. Sin embargo, un intérprete convierte la instrucción del código fuente en una expresión intermedia y ejecuta directamente su resultado.
    3. Un compilador, por lo tanto, se ejecuta más rápido, mientras que el intérprete consume mucho tiempo.
    4. Un compilador admite la asignación estática de memoria, mientras que un intérprete admite la asignación dinámica de memoria.
    5. Es difícil depurar un código compilado que un código interpretado.
    6. Un compilador registra todos los errores al final, mientras que un intérprete registra el error y las advertencias línea por línea.
    7. Un código compilado no es portátil, mientras que un código interpretado ofrece algún tipo de portabilidad.

    Algunos de los lenguajes compilados son C, C ++, Java, ALGOL, Haskell. Los lenguajes interpretados son Java, C, C ++, Python, LISP, etc.

    Un ensamblador es un tipo de compilador o un programa de utilidad que traduce un código fuente de alto nivel en un código de ensamblaje. El lenguaje ensamblador es un lenguaje de bajo nivel.

    Los ensambladores usan mnemotécnicos para representar instrucciones de máquina de bajo nivel.

    Es difícil escribir y mantener programas en lenguaje de máquina. Los programas escritos en el código de lenguaje de alto nivel y lenguaje de bajo nivel deben convertirse en lenguaje de nivel de máquina utilizando traductores para este propósito.
    Los traductores son solo programas de computadora que aceptan un programa escrito en lenguaje de alto o bajo nivel y producen un programa de nivel de máquina equivalente como salida. Los traductores son de tres tipos:

    • Ensamblador
    • Compilador
    • Interprete

    Assembler se utiliza para convertir el código de lenguaje de bajo nivel (lenguaje ensamblador) en lenguaje de nivel de máquina.
    Los compiladores e intérpretes se utilizan para convertir el código del lenguaje de alto nivel en lenguaje de máquina. El programa de alto nivel se conoce como programa fuente y el correspondiente programa de nivel de máquina se conoce como programa objeto. Aunque tanto los compiladores como los intérpretes realizan la misma tarea, pero hay una diferencia en su trabajo.
    Un compilador busca todos los errores de un programa y los enumera. Si el programa está libre de errores, convierte el código del programa en código de máquina y luego el programa puede ejecutarse mediante comandos separados.
    Un intérprete verifica los errores de una declaración de programa por declaración. Después de verificar una declaración, convierte esa declaración en código de máquina y luego la ejecuta. El proceso continúa hasta que se produce la última declaración del programa.

    Respondí la mayor parte de esto en la respuesta de Mark Miller a ¿Cuál es la diferencia entre un compilador y un intérprete?

    Un ensamblador traduce mnemotecnia a código máquina. Ayuda con la ramificación, ya que procesa etiquetas que se insertan en el código fuente, para que pueda ramificarse a la etiqueta, sin tener que calcular la dirección usted mismo. Se supone que la idea debe hacer que la programación del hardware sea un poco más fácil que solo lidiar con una gran cantidad de números que no significan mucho para los humanos (pero son los medios por los cuales la computadora ejecuta un programa).

    C, C ++, Java y C # son ejemplos de lenguajes compilados. Los dos primeros generalmente se compilan en código máquina. Los dos últimos se compilan en bytecode, que se ejecutan en una máquina virtual de software. También contienen JIT’ers que compilan algunos de los códigos de bytes hasta el código de la máquina durante la ejecución, por lo que se ejecutará directamente en el hardware, para ayudarlo a funcionar más rápido.

    Ruby es un ejemplo de lenguaje interpretado.

    GAS o AS (GNU Assembler) es un ejemplo de ensamblador. Hay muchos ensambladores por ahí. En mi experiencia, cada CPU tenía su propio ensamblador, aunque entiendo que GAS es un ensamblador multiplataforma. Se estandariza en un lenguaje ensamblador, pero lo traduce al código de máquina equivalente para un procesador de destino. Entonces, en ese sentido, actúa un poco como un compilador, ya que no solo hace una traducción uno a uno entre mnemónicos y códigos de máquina.

    El compilador toma un programa de alto nivel y lo transforma a un formato de objeto dependiente de la CPU. La misma fuente se puede compilar en objetos destinados a diferentes CPU. El objeto contiene directamente ejecutable, pero para ejecutarlo realmente, necesitaremos pasar por un enlazador. Una vez que el vinculador se ha completado, el resultado es un ejecutable que se puede ejecutar sin el vinculador / compilador.
    El compilador transformará un bloque de alto nivel en un conjunto de instrucciones de código de máquina que satisfacen la demanda, por ejemplo:

    para (int x = 0; x! = 8; x ++) función de llamada (x);

    Probablemente se compilará en 10 a 20 instrucciones de código de máquina, dependiendo de la CPU de destino y el nivel de optimización deseado.

    Ejemplo : compilador de Visual C ++.

    El ensamblador transforma la mnemotecnia del código de ensamblaje en formato de objeto. El código de ensamblaje está escrito específicamente para una CPU, y cada instrucción (mnemónica) se convierte en una instrucción de CPU. Una vez que el objeto ha sido creado, sigue la misma tubería que el compilador. Puede haber diferentes mnemónicos para la misma instrucción de CPU, por ejemplo, Intel y AT&T usan diferentes mnemónicos para la CPU x86. Las dos declaraciones (AT&T e Intel) producirán resultados binarios idénticos:

    mov ecx, -16 (ebp)
    mov DWORD PTR [-16 + ebp], ecx

    Uno escribe Assembler para una CPU específica. Las CPU más nuevas son compatibles con las anteriores (por ejemplo, AMD64 o Intelx86), pero también tienen extensiones propietarias, como MMX o AVX.

    Ejemplo : ensamblador MASM.

    El intérprete leerá la fuente de un programa de alto nivel línea por línea y lo ejecutará. Para ejecutar el programa, es necesario tener tanto la fuente como el intérprete. El programa fuente no está escrito para ejecutarse en un tipo de CPU específico.

    Ejemplo : intérprete de Python.

    Estas tres áreas bien definidas se superponen hoy. Por ejemplo, Javascript llama a la minificación del código fuente “compilación”. En este proceso, el código permanece estructuralmente igual. Python analizará previamente el programa y producirá un pyc que se interpretará más a fondo. Los lenguajes como Java o .NET transformarán el código fuente a otro formato intermedio, que se compila o interpreta en el momento de la ejecución.

    Ensamblador: Una computadora no entenderá ningún programa escrito en un idioma, que no sea su lenguaje de máquina. Los programas escritos en otros idiomas deben traducirse al lenguaje de máquina. Dicha traducción se realiza con la ayuda del software. Un programa que traduce un programa en lenguaje ensamblador a un programa en lenguaje máquina se llama ensamblador. Si un ensamblador que se ejecuta en una computadora y produce los códigos de máquina para la misma computadora, entonces se llama autoensamblador o ensamblador residente. Si un ensamblador que se ejecuta en una computadora y produce los códigos de máquina para otra computadora, se llama Cross Assembler.

    Los ensambladores se dividen en dos tipos: ensamblador de un paso y ensamblador de dos pasos. Un ensamblador de paso es el ensamblador que asigna las direcciones de memoria a las variables y traduce el código fuente en código de máquina en el primer paso simultáneamente. Un ensamblador de dos pasos es el ensamblador que lee el código fuente dos veces. En el primer paso, lee todas las variables y les asigna direcciones de memoria. En la segunda pasada, lee el código fuente y traduce el código en código objeto.

    Compilador: es un programa que traduce un programa de lenguaje de alto nivel en un programa de lenguaje de máquina. Un compilador es más inteligente que un ensamblador. Comprueba todo tipo de límites, rangos, errores, etc. Pero el tiempo de ejecución de su programa es mayor y ocupa una mayor parte de la memoria. Tiene baja velocidad. Porque un compilador revisa todo el programa y luego traduce todo el programa en códigos de máquina. Si un compilador se ejecuta en una computadora y produce los códigos de máquina para la misma computadora, entonces se lo conoce como compilador automático o compilador residente. Por otro lado, si un compilador se ejecuta en una computadora y produce los códigos de máquina para otra computadora, entonces se lo conoce como compilador cruzado.

    Intérprete: Un intérprete es un programa que traduce las declaraciones de un programa en código máquina. Traduce solo una declaración del programa a la vez. Lee solo una declaración de programa, la traduce y la ejecuta. Luego lee la siguiente declaración del programa nuevamente la traduce y la ejecuta. De esta manera, continúa hasta que todas las declaraciones se traducen y ejecutan. Por otro lado, un compilador revisa todo el programa y luego traduce todo el programa en códigos de máquina. Un compilador es de 5 a 25 veces más rápido que un intérprete.

    Por el compilador, los códigos de la máquina se guardan de forma permanente para referencia futura. Por otro lado, los códigos de máquina producidos por el intérprete no se guardan. Un intérprete es un pequeño programa en comparación con el compilador. Ocupa menos espacio de memoria, por lo que se puede usar en un sistema más pequeño que tiene espacio de memoria limitado.

    Fuente

    Un compilador es un programa que toma otro programa en un idioma de origen como entrada y genera la traducción de ese programa en otro idioma de destino. Por lo general, el idioma de destino será algún tipo de lenguaje ensamblador (que normalmente se enviará a un ensamblador) o código de máquina, pero no tiene que ser así. Los compiladores que generan lenguajes de alto nivel (como Emscripten, que traduce C / C ++ a JavaScript) también suelen denominarse “transpiladores”.

    Un ensamblador es un tipo muy simple de compilador. Básicamente es solo una herramienta para hacer que el código de la máquina de escribir sea más conveniente. Los ensambladores simples pueden hacer un reemplazo individual de las palabras de texto con las correspondientes instrucciones del código de máquina. Los ensambladores más avanzados también pueden manejar cosas como calcular automáticamente las compensaciones de direcciones basadas en etiquetas y otras cosas básicas de mantenimiento de ese tipo que el programador de lo contrario tendría que hacer un seguimiento a mano, tal vez con una calculadora.

    Un intérprete es un programa que toma otro programa, y ​​la entrada de ese programa, como su entrada, y produce la salida de ese programa como su salida. A diferencia de un compilador, no genera una traducción del programa fuente, o al menos, no está destinado a ser utilizado para ese propósito (el intérprete estándar de CPython, por ejemplo, genera archivos .pyc que contienen bytecode Python traducido como forma de memorización, para mejorar la eficiencia al interpretar el mismo programa varias veces, pero no está destinado a guardar y ejecutar esos archivos directamente). Muchos intérpretes simplemente ejecutan los comandos del programa fuente directamente, pero las líneas entre intérpretes y compiladores son bastante borrosas, y muchos otros intérpretes incluirán un compilador de algún tipo; por ejemplo, un programa que ejecuta un compilador y luego ejecuta inmediatamente la salida del compilador podría llamarse razonablemente un intérprete, y la mayoría de los intérpretes modernos de alto rendimiento utilizan la compilación JIT (Just-In-Time): “interpretarán” el código compilando pequeños fragmentos a la vez (justo a tiempo para ejecutarlos), y luego ejecutando directamente el código compilado.

    Compilador: – El compilador es un programa de computadora que escanea todo el programa de una vez y luego codifica en lenguaje máquina.
    Y luego el procesador de la computadora ejecuta el programa.
    P.ej. Borland C ++ Compiler 5.5 es un compilador utilizado para el programa C ++.

    Intérprete: – Interpreta la primera conversación en un idioma superior en un intermedio y escanea el programa línea por línea y, de repente, se detiene y muestra un error y no escanea más.
    P.ej. Idiomas como MATLAB, Ruby usa Intérprete.

    Ensamblador: – Se utiliza para convertir el lenguaje de nivel inferior al lenguaje de maquinaria y generalmente se usa en microprocesadores.

    Compilador: convierte un programa de lenguaje de programación de alto nivel en forma legible por máquina (programa de lenguaje de bajo nivel)

    ejemplo: GCC, Javac, turbo C, etc.

    Intérprete: Interpreta el significado de los comandos para la computadora para qué sirve este comando.

    ejemplo: python, perl, MATLAB (estos son idiomas interpretados, por lo tanto, usa intérprete)

    Ensamblador: traduce el programa en lenguaje ensamblador en el código objeto o en un formulario legible por máquina.

    ejemplo: MASM, NASM

    Ensamblador:

    tanto el compilador / intérprete como el ensamblador se convierten de un lenguaje de nivel superior a un lenguaje inferior, es decir, un lenguaje más cercano al hardware, pero la diferencia. La diferencia radica en cuán lejos está el lenguaje de nivel superior del lenguaje de nivel h / w. Un poco de lectura lo ayudará a comprender la diferencia entre los niveles del lenguaje de nivel superior. Simplemente entienda que cualquier cosa que no sea el lenguaje de máquina es un lenguaje de alto nivel para el hardware.

    En lo que respecta al compilador y al intérprete, la principal diferencia es que, si bien el compilador considera todo el código y sucede antes de la ejecución real del código, el intérprete realiza la conversión en paralelo a la ejecución del programa. También hay otras diferencias que puedes seguir leyendo.

    La diferencia entre compilador e intérprete es la siguiente:

    1) El compilador toma el programa completo como entrada, mientras que el intérprete toma la instrucción individual como entrada.

    2) El código de objeto intermedio se genera en el caso del compilador, mientras que en el caso del intérprete no se genera ningún código de objeto intermedio .

    3) El requisito de memoria es mayor (ya que se genera el código de objeto) en el caso del compilador, mientras que el requisito de memoria es menor en el caso del intérprete.

    4) Los errores se muestran después de que se verifica todo el programa en el caso del compilador. Por lo tanto, la depuración es relativamente difícil. En el caso de un intérprete, se muestran errores para cada instrucción interpretada (si la hay). Un intérprete continúa traduciendo el programa hasta que se cumpla el primer error, en cuyo caso se detiene. Por lo tanto, la depuración es fácil.

    Lenguaje de programación como Python, Ruby usa intérpretes.

    Lenguajes de programación como C, C ++ usan compiladores.

    Diferencia entre ensamblador e intérprete: –

    Un ensamblador puede considerarse un tipo especial de compilador, que solo traduce el lenguaje ensamblador al código de máquina. Los intérpretes son herramientas que ejecutan instrucciones escritas en algún idioma.

    Los sistemas de intérpretes pueden incluir un compilador para precompilar el código antes de la interpretación, pero un intérprete no puede llamarse un tipo especial de compilador. Los ensambladores producen un código objeto, que podría tener que vincularse utilizando programas vinculadores para ejecutarse en una máquina, pero la mayoría de los intérpretes pueden completar la ejecución de un programa por sí mismos.

    Un ensamblador generalmente hará una traducción uno a uno, pero esto no es cierto para la mayoría de los intérpretes. Debido a que el lenguaje ensamblador tiene un mapeo uno a uno con código de máquina, se puede usar un ensamblador para producir código que se ejecute de manera muy eficiente en ocasiones en las que el rendimiento es muy importante (por ejemplo, motores gráficos, sistemas integrados con recursos de hardware limitados en comparación con una computadora personal como microondas, lavadoras, etc.). Por otro lado, los intérpretes se utilizan cuando necesita una alta portabilidad. Por ejemplo, el mismo código de bytes de Java se puede ejecutar en diferentes plataformas utilizando el intérprete adecuado (JVM).

    Compilador:

    Los compiladores se utilizan para convertir lenguajes de alto nivel (como C, C ++) en código de máquina. Un lenguaje de programación de alto nivel utiliza más lenguaje natural.

    Ejemplo: GCC, Microsoft Visual Studio

    Ensambladores:

    Los ensambladores se utilizan para convertir el código del lenguaje ensamblador en código de máquina. El código de máquina es 0 y 1, mientras que el lenguaje ensamblador es un lenguaje en el que los comandos se asignan estrechamente a las instrucciones del procesador.

    Ejemplos: lista de ensambladores

    Interprete :

    Un intérprete es un programa de computadora que ejecuta una declaración directamente.

    Ejemplos: Python, LISP, Ocaml

    El compilador convierte el código fuente a algún tipo de forma intermedia. Para el lenguaje estático, un compilador generalmente convierte el código fuente en ensamblado, que generalmente no se almacenó en el disco, luego se invoca al ensamblador para convertir el ensamblado en código binario, que generalmente se almacena como archivo de objeto (sufijo .o o .obj generalmente), luego se invoca el vinculador para vincular los archivos de objeto al ejecutable binario. También es común referirse a todo este proceso de compilación, ensamblaje y vinculación como compilación. Por lo tanto, puede llamar a gcc un compilador, pero en realidad invoca cc1 que es el compilador para compilar, as que es el ensamblador para ensamblar, ld , que es el vinculador para vincular.

    Para el lenguaje que tiene una forma intermedia llamada bytecode, el código fuente se convierte primero en código de byte, este proceso puede llamarse compilación, javac sirve como ejemplo. Bytecode no se puede ejecutar en máquinas host, necesita un programa, que en realidad es el proceso desde el punto de vista del sistema operativo, para interpretar el bytecode en la máquina host, este programa se llama intérprete, piense en java . Algunos lenguajes, como python, realizan el trabajo de compilación e interpretación con un solo comando python .

    Compilador: Es un programa (s) de computadora que transforma el código fuente escrito en un lenguaje de programación en lenguaje de máquina que es el idioma de destino que generalmente tiene una forma binaria conocida como código objeto.

    Intérprete: Traduce instrucciones de alto nivel en un formulario intermedio, traduce el código en el formulario intermedio línea por línea y realiza acciones específicas.

    Ensamblador: es un programa que toma instrucciones básicas de la computadora y luego las convierte en un patrón de bits que el procesador de la computadora puede usar para realizar sus operaciones básicas. El lenguaje utilizado para programar el ensamblador se llama lenguaje ensamblador.

    En el mundo humano, el intérprete (como los de la ONU) escucha a alguien que habla en un idioma y, en tiempo casi real, convierte lo que escucha al idioma de otra persona. Esto permite que dos personas que no hablan un idioma común se comuniquen a través de un intermediario, el intérprete.

    Los intérpretes son excelentes para el diálogo interactivo. Pero no usarías un intérprete para leer Guerra y paz si no hablas ruso. Un intérprete podría leerlo, pero si desea volver a leer secciones, tiene que volver a traducirlo y todo el proceso sería engorroso. Para algo así como un libro, usamos un traductor.

    La tecnología de programación hace la misma distinción. Los intérpretes hacen las cosas sobre la marcha, los traductores convierten una cosa en otra en un proceso masivo. Más detalles siguen.

    En informática, un intérprete es un programa que acepta programas en un idioma y, efectivamente, lleva a cabo cada declaración tal como se encuentra. Cuando tiene un intérprete, hay 2 idiomas en funcionamiento: el idioma de origen es el idioma de los programas que se le dan al intérprete para ejecutar (lo que escribe); El lenguaje de implementación es el lenguaje del intérprete en ejecución. Por ejemplo, estoy ejecutando Python en otra ventana en mi computadora. El idioma de origen es Python y el lenguaje de implementación es el código de máquina Intel que se ejecuta en mi Mac. Para ejecutar un intérprete, necesita una máquina que ejecute el lenguaje de implementación: ¡necesita un intérprete para el lenguaje de implementación del intérprete! En última instancia, tenemos hardware que interpreta las instrucciones de la máquina para que todo funcione.

    Los sistemas de computación también usan traductores. Tanto los compiladores como los ensambladores son traductores. Un traductor es un programa que toma un programa en un idioma (el idioma de origen ) y, en lugar de ejecutarlo, lo convierte a otro idioma (el idioma de destino ). Con suerte, tendrá una manera de ejecutar programas en el idioma de destino. Debido a que un traductor es un programa, también tiene un lenguaje de implementación . Puede tener un compilador de C ejecutándose en lenguaje máquina Intel que traduzca el código fuente C al lenguaje máquina Intel. Un compilador cruzado es aquel en el que la implementación y los lenguajes de destino son diferentes: podría tener un compilador de C ejecutándose en lenguaje de máquina Intel que traduzca los programas de C al lenguaje de máquina ARM. Esto nos ayuda a poner en marcha nuevos sistemas: reescribe la parte de generación de código del compilador, y luego puede compilar todo su código existente en el idioma de origen de la nueva máquina.

    La diferencia entre un compilador y un ensamblador no está en cómo tratan su entrada, sino más bien en la relación entre el idioma de origen y el de destino. Utilizamos el término ensamblador para referir a un traductor para un lenguaje ensamblador, que es un lenguaje legible por humanos que está muy cerca (casi uno a uno) con el lenguaje de máquina subyacente al que se está ensamblando. Por lo tanto, los compiladores tienen una brecha semántica más grande que cubrir, pero siguen siendo traductores.

    Ejemplo: Tengo una computadora con una CPU Intel que ejecuta lenguaje de máquina Intel. Puedo usarlo para ejecutar un intérprete de Python que esté en lenguaje de máquina Intel (el programa ejecutable que es el intérprete de python ). El intérprete de Python se escribió originalmente en C. Pero mi computadora no puede ejecutar programas en C directamente. Entonces, un compilador de C tradujo el código fuente del intérprete de Python C al lenguaje de máquina Intel. El compilador de C no ejecutó el programa, solo lo tradujo, para que yo y muchos otros pudiéramos ejecutarlo una y otra vez en el hardware de Intel. De hecho, hay más: el proceso de compilación C típico (usando gcc o clang) primero traduce el programa C al lenguaje ensamblador Intel, luego lo ensambla al lenguaje máquina Intel. (Si lo desea, puede pedirle a gcc o clang que le muestre la versión en lenguaje ensamblador del programa, y ​​es divertido hacerlo).

    Cuando escribo declaraciones de lenguaje Python en mi intérprete de Python, el intérprete las interpreta, es decir, las ejecuta una a la vez.

    Una vez más, en realidad hay más: el intérprete de Python realmente traduce las declaraciones de Python a algo llamado códigos de bytes de Python, y luego ejecuta los códigos de bytes resultantes en un intérprete de código de bytes de Python.

    TIEMPO DE PREMIO:

    P: ¿Qué crees que la computadora misma entiende el programa en lenguaje de alto nivel como C, C ++?

    No, la computadora no entiende el lenguaje humano. De hecho, tiene su propio lenguaje en el que las palabras no son más que 0s y 1s. Ahora, si no entiende lo que quiero decir, entonces debería haber alguien que debería traducir nuestro idioma al idioma de la computadora. Esto es lo que hace el compilador. Pero hay compiladores de capturas que tampoco entienden a los humanos hablando lenguaje, solo entiende lo que está escrito en lenguajes de programación como C, C ++. Entonces, el compilador convertirá el código fuente en código de máquina.

    Los compiladores suelen convertir lenguajes de alto nivel (por ejemplo, C ++) en código ensamblador, que se convierte en forma binaria para que las máquinas lo ejecuten. Un intérprete no hace ninguna traducción, es un programa que solo ejecuta lo que el lenguaje de alto nivel dice directamente. Los intérpretes modernos tienen más probabilidades de ser un híbrido, que utiliza un compilador sobre la marcha.

    adherirse

    Los intérpretes han sido populares en el pasado porque en máquinas pequeñas eran más fáciles de usar, y el código es intrínsecamente portátil. Idiomas como Algol-68 o ADA tenían compiladores demasiado grandes para caber en la mayoría de las máquinas de su época.

    Compilador :

    • Convierte lenguaje de alto nivel a lenguaje de bajo nivel.
    • Considera todo el código y lo convierte al Código ejecutable y ejecuta el código.
    • C, C ++ son lenguajes basados ​​en compiladores.

    Intérprete :

    • Convierte el lenguaje de nivel superior en lenguaje de bajo nivel o lenguaje de nivel ensamblador. Se convierte al idioma de 0 ‘y 1’s.
    • Considera una sola línea de código y la convierte al lenguaje binario y ejecuta el código en la máquina.
    • Si encuentra el error, los programas deben ejecutarse desde el principio.
    • BASIC es el lenguaje basado en intérpretes.

    Ensamblador :

    • Es el programa de computadora que toma las instrucciones de la computadora y las convierte en los bits que la computadora puede comprender y realizar mediante ciertas operaciones.

    Ensamblador

    Es el programa de computadora que toma las instrucciones de la computadora y las convierte en los bits que la computadora puede comprender y realizar mediante ciertas operaciones.

    Compilador

    Convierte lenguaje de alto nivel en lenguaje de bajo nivel. Considera el código completo y lo convierte en el código ejecutable y ejecuta el código. C, C ++ son lenguajes basados ​​en compiladores.

    Interprete

    Convierte el lenguaje de nivel superior en lenguaje de bajo nivel o lenguaje de nivel ensamblador. Se convierte al idioma de 0 ‘y 1’s. Considera una sola línea de código y la convierte al lenguaje binario y ejecuta el código en la máquina. Se encuentra el error, los programas deben ejecutarse desde el principio. BASIC es el lenguaje basado en intérpretes.

    Para cualquier soporte relacionado con problemas de red, puede visitar aquí … protección de firewall de red