Apolo-11: uso de la inclusión en lugar de un vinculador

9

Recientemente digitalizado y convertido en un repositorio, el código fuente original de la computadora de guía Apollo 11 se puso a disposición para su visualización en Github .

En MAIN.agc , el autor del repositorio comenta que

divida el enorme código fuente monolítico en fragmentos más pequeños y manejables, es decir, en archivos fuente individuales #.

Un poco más tarde, el autor afirma

Se puede preguntar razonablemente por qué se unen decenas de miles de líneas de origen mediante la inclusión, en lugar de simplemente ensamblar los archivos de origen individualmente y luego vincularlos para formar el ejecutable. La respuesta es que el equipo de desarrollo original no tenía enlazador.

Sé qué son los enlazadores y entiendo el punto de ellos, pero nunca he oído hablar de la frase (en lo que respecta a ASM) "unida por medio de la inclusión".

¿Qué significa esto? Teniendo en cuenta que los enlazadores son un gran problema en la programación, tengo curiosidad por saber qué es esta sustitución de enlazadores por "medios de inclusión" y cómo funciona.

8protones
fuente
77
Un ejemplo de "unidos por medio de la inclusión" sería la #includedirectiva en C. En otras palabras, en lugar del código bing compilado en componentes que luego se unen, parece que la $notación incluye el contenido de ese archivo, para generar un archivo fuente grande. Ese gran archivo fuente se compila como una sola entidad.
David Arno
1
@DavidArno su comentario parece una mejor respuesta que cualquiera de las dos respuestas actualmente en el tablero.
Ross Presser

Respuestas:

18

Parecen significar concatenación / inserción textual simple. En otras palabras, aunque el texto fuente se dividió en archivos individuales , el programa no se dividió en módulos .

Jörg W Mittag
fuente
-2

¿Cómo se compara la inclusión simple con la vinculación?

Entonces, la inclusión simple se logra usando #include "someCFile.c".

Por defecto, los enlazadores agregarán una biblioteca de tiempo de ejecución. Con inclusión, esto debería ser incluido.

Sospecho que la inclusión ocuparía menos espacio ya que los objetos no necesitarían tener tablas que contengan puntos de entrada y potencialmente variables con nombres. En la vinculación dinámica, la tabla de puntos de entrada debe estar allí. No estoy seguro de si la vinculación estática lo eliminaría o no, sospecho que no lo hace.

En términos de velocidad de procesamiento, la inclusión es probablemente un poco más rápida (definitivamente en el caso de las bibliotecas vinculadas dinámicamente), sin embargo, no es tan flexible, son múltiples aplicaciones que no podrían compartir la misma biblioteca.

Considerando el tamaño binario, la inclusión sería mayor.

Considerando el tiempo de compilación, la inclusión llevaría más tiempo.

Para la computadora de navegación de la NASA, la inclusión simple estaba bien, ya que la computadora de navegación solo ejecutaba un programa.

Robert Baron
fuente
2
No creo que esto responda la pregunta "qué es y cómo funciona".
tofro
Tofro: Interpreté el "¿Qué significa?" como lo que significaría desde un punto de vista práctico en términos de tamaño binario y velocidad de ejecución.
Robert Baron
"la inclusión sería mayor" - No entiendas esto. Si el código está dentro, está dentro y usa espacio, independientemente de cómo se introdujo en el binario. Ni siquiera esté de acuerdo con el tiempo de compilación: una compilación completa llevará un tiempo idéntico. Solo ganas velocidad cuando haces construcciones incrementales, y dudo que esto ya se practicara en los años 60
hasta el
La velocidad de ejecución sería más rápida ya que todas las funciones de un sistema operativo mínimo están dentro del ejecutable, por lo que estas son solo llamadas en lugar de usar interrupciones (estoy considerando un sistema operativo mínimo como DOS donde usaba las interrupciones del 8086 para hacer llamadas al sistema). Además, como se incluiría todo el sistema operativo, esto consumiría más espacio que cuando no lo está y se agregaría al tiempo de compilación.
Robert Baron