¿Qué es exactamente un objetivo de compilación?

12

Sigo escuchando el término y todas las búsquedas de google me llevan a artículos sobre compiladores. Solo quiero entender lo que significa el término compilar objetivo: |

ACTUALIZACIÓN: Para dar un poco de contexto: escuché que el ensamblado web es un objetivo de compilación para otros lenguajes como C, C ++, Rust, etc.     

pregunta ScionOfBytes 21.03.2017 - 12:56

3 respuestas

15

Los compiladores son, en esencia, traductores que toman información en un idioma y producen en otro. Por ejemplo, el compilador de Eiffel Software toma la entrada del lenguaje Eiffel y produce C. GCC para Intel lee la entrada del lenguaje C y produce el ensamblaje x86. El ensamblador GAS para Intel toma el ensamblaje x86 y produce un código objeto x86. Las tres cosas son técnicamente compiladores.

Independientemente del formato, la entrada leída por un compilador se denomina fuente y la salida se denomina destino . El último término está tomado de una de sus definiciones, "resultado deseado".

La mayoría de los compiladores están diseñados para producir código de ensamblado u objeto para un procesador o arquitectura en particular. Debido a eso, target se usa a menudo para referirse a la arquitectura en lugar del formato de salida.

El objetivo de un compilador no tiene que ser el mismo que el de la arquitectura donde se ejecuta, y en los casos en que eso sucede, el programa se denomina compilador cruzado . (Por ejemplo, GCC puede construirse para ejecutarse en sistemas x86 para compilar C en el ensamblaje ARM).

Además, hay compiladores únicos capaces de producir salida para diferentes objetivos dependiendo de la entrada, como los conmutadores en la línea de comando. Estos se llaman compiladores multi-target .

    
respondido por el Blrfl 21.03.2017 - 14:11
4

En la traducción, ya sea que el idioma sea un lenguaje natural como el inglés o uno artificial como C, usamos la terminología fuente y target para hablar sobre entrada y salida de un sistema de traducción. En la traducción de lenguaje natural, el sistema es el cerebro humano competente capaz de traducir entre dos idiomas. En lenguajes de programación, es un compilador.

Por lo tanto, source para un compilador es el lenguaje de programación (C), mientras que target es el bytecode (instrucciones a nivel de máquina). A menudo usamos target en la compilación porque diferentes sistemas (arquitecturas de CPU) tienen diferentes conjuntos de instrucciones, por ejemplo. BRAZO, MIPS, etc. El compilador necesita saber qué conjunto de instrucciones es el objetivo, para que pueda crear la salida correcta (bytecode).

    
respondido por el Chris Cirefice 21.03.2017 - 22:52
0

WebAssemby es algo nuevo y mejor, que convierte el código c / c ++ en formato binario.

  • WebAssembly tiene como objetivo ejecutar a velocidad nativa aprovechando el hardware común. Está diseñado para integrarse con la plataforma web.

Aquí está el enlace donde se puede ver una de las aplicaciones, qué tan rápido convierte el programa factorial simple en código de máquina.

Comprueba esta bestia, enlace

Puede usar este programa de ejemplo para ejecutar en ese sitio para ver el ensamblaje.

# include<stdio.h>

int square(int num) {
    return num * num;
}

int main() {
    int res = square(4);
    printf("%d\n",res);
  return 0;
}
  • Defina un formato binario portátil, eficiente en tamaño y tiempo de carga para que sirva como un objetivo de compilación que pueda compilarse para ejecutarse a una velocidad nativa aprovechando las capacidades comunes de hardware disponibles en una amplia gama de plataformas, incluyendo dispositivos móviles y IOT.

Información básica sobre el host y el destino, cómo se traduce el lenguaje de programación al 10101010.

host=>pc :(windows, iOS, Linux, zOS, Solaris..etc)
target=>CPUhardware: (Intel x86, ARM, PowerPC, etc)
  1. GCC convierte el código C / C ++ en código de ensamblaje. Una herramienta llamada "ensamblador" convierte el código de ensamblaje en código de máquina y una herramienta llamada "vinculador" conecta varios archivos de código de máquina en un solo archivo ejecutable (.EXE bajo Windows). La mayoría de estos compiladores le permiten escribir el código del ensamblador resultante en un archivo para que pueda ver el código del ensamblador o modificarlo.

  2. El ensamblador y el enlazador forman parte de la cadena de herramientas, lo que significa que normalmente se entregan junto con el compilador.

  3. Sin embargo, algunos compiladores (como Microsoft) convierten directamente el código C / C ++ en lenguaje de máquina, por lo que ya no se necesita ningún ensamblador. Muchos de estos compiladores no pueden crear código de ensamblador, por lo que no puede escribir el código de ensamblador en un archivo.

Por cierto: incluso hay compiladores (no para C / C ++, sino para otros lenguajes de programación) que crean directamente un archivo .EXE, por lo que no se requiere un enlazador.

  

WebAssembly: enlace

    
respondido por el danglingpointer 24.03.2017 - 21:19

Lea otras preguntas en las etiquetas