Sigo escuchando el término y todas las búsquedas de Google me llevan a artículos sobre compiladores. Solo quiero entender qué significa el término compilar objetivo: |
ACTUALIZACIÓN: para dar un poco de contexto: he oído decir que el ensamblaje web es un objetivo de compilación para otros lenguajes como C, C ++, Rust, etc.
Respuestas:
Los compiladores son, en esencia, traductores que toman datos en un idioma y producen resultados en otro. Por ejemplo, el compilador de Eiffel Software toma entradas en lenguaje Eiffel y produce C. GCC para Intel lee entradas en lenguaje C y produce ensamblaje x86. El ensamblador de GAS para Intel toma el ensamblaje x86 y produce código objeto x86. Las tres cosas son técnicamente compiladores.
Independientemente del formato, la entrada leída por un compilador se llama fuente y la salida se llama destino . El último término se toma de una de sus definiciones, "resultado previsto".
La mayoría de los compiladores están diseñados para producir código de ensamblaje u objeto para un procesador o arquitectura en particular. Debido a eso, el objetivo a menudo se usa para referirse a la arquitectura en sí misma en lugar del formato de salida.
El objetivo de un compilador no necesita ser el mismo que 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 un ensamblaje ARM).
Además, hay compiladores únicos capaces de producir resultados para diferentes objetivos dependiendo de la entrada, como interruptores en la línea de comando. Estos se llaman compiladores de múltiples objetivos .
fuente
En la traducción, ya sea que el idioma sea natural como el inglés o artificial como el C, utilizamos la fuente y el objetivo de la terminología para hablar sobre la entrada y salida de un sistema de traducción. En la traducción del 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, la fuente de un compilador es el lenguaje de programación (C), mientras que el objetivo es el código de bytes (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, ARM, MIPS, etc. El compilador necesita saber qué conjunto de instrucciones es el objetivo, para que pueda crear la salida correcta (código de bytes).
fuente
WebAssemby es algo último y mejor, que convierte el código c / c ++ en formato binario.
Aquí está el enlace donde puede ver una de las aplicaciones, qué tan rápido convierte el programa factorial simple en código de máquina.
Mira esta bestia, https://godbolt.org/
Puede usar este programa de muestra para ejecutar en ese sitio para ver el ensamblaje.
Alguna información básica sobre el host y el destino, cómo se traduce el lenguaje de programación al 10101010.
GCC convierte el código C / C ++ en código ensamblador. Una herramienta llamada "ensamblador" convierte el código de ensamblaje en código de máquina y una herramienta llamada "enlazador" conecta múltiples archivos de código de máquina en un solo archivo ejecutable (.EXE en Windows). La mayoría de estos compiladores le permiten escribir el código ensamblador resultante en un archivo para que pueda ver el código ensamblador o modificarlo.
El ensamblador y el enlazador son parte de la cadena de herramientas, lo que significa que generalmente se entregan junto con el compilador.
Sin embargo, algunos compiladores (como Microsoft) convierten directamente el código C / C ++ en lenguaje máquina, por lo que ya no se necesita ensamblador. Muchos de estos compiladores no pueden crear código ensamblador, por lo que no puede escribir el código 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 vinculador.
fuente