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.
fuente
#include
directiva enC
. 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.Respuestas:
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 .
fuente
¿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.
fuente