Apollo-11: utiliser l'inclusion au lieu d'un éditeur de liens

9

Récemment numérisé et transformé en référentiel, le code source d'origine de l'ordinateur de guidage Apollo 11 a été mis à disposition pour visualisation sur Github .

Dans MAIN.agc , l'auteur du référentiel commente qu'ils

divisez l'énorme code source monolithique en morceaux plus petits et plus faciles à gérer, c'est-à-dire en fichiers source individuels.

Un peu plus tard, l'auteur déclare

On peut raisonnablement se demander pourquoi des dizaines de milliers de lignes de source sont jointes par inclusion, plutôt que de simplement assembler les fichiers source individuellement puis de les lier pour former l'exécutable. La réponse est que l'équipe de développement d'origine n'avait aucun éditeur de liens.

Je sais ce que sont les linkers et j'en comprends l'intérêt - mais je n'ai jamais entendu parler de l'expression (en ce qui concerne l'ASM) "jointe au moyen de l'inclusion".

Qu'est-ce que ça veut dire? Étant donné que les éditeurs de liens jouent un rôle important dans la programmation, je suis curieux de savoir quelle est cette substitution des éditeurs de liens par les "moyens d'inclusion" et comment elle fonctionne.

8 protons
la source
7
Un exemple de "joint par inclusion" serait la #includedirective de C. En d'autres termes, plutôt que le code bing compilé sur des composants qui sont ensuite liés ensemble, il semble que la $notation inclut le contenu de ce fichier, afin de générer un grand fichier source. Ce grand fichier source est ensuite compilé en une seule entité.
David Arno
1
@DavidArno, votre commentaire semble être une meilleure réponse que l'une des deux réponses actuellement au tableau.
Ross Presser

Réponses:

18

Ils semblent signifier une simple concaténation / insertion textuelle. En d'autres termes, même si le texte source était divisé en fichiers individuels , le programme n'était pas divisé en modules .

Jörg W Mittag
la source
-2

Comment l'inclusion simple se compare-t-elle à la liaison?

L'inclusion est donc simple en utilisant #include "someCFile.c".

Par défaut, les éditeurs de liens ajouteront une bibliothèque d'exécution. Avec l'inclusion, cela devrait être inclus.

Je soupçonne que l'inclusion prendrait moins de place car les objets n'auraient pas besoin d'avoir des tables contenant des points d'entrée et potentiellement des variables avec des noms. Dans la liaison dynamique, la table des points d'entrée doit être là. Je ne sais pas si la liaison statique le supprimerait ou non, tu soupçonnes que ce n'est pas le cas.

En termes de vitesse de traitement, l'inclusion est probablement un peu plus rapide (certainement dans le cas des bibliothèques liées dynamiquement), mais elle n'est pas aussi flexible, c'est que plusieurs applications ne peuvent pas partager la même bibliothèque.

Compte tenu de la taille binaire, l'inclusion serait plus importante.

Compte tenu du temps de compilation, l'inclusion prendrait plus de temps.

Pour l'ordinateur de navigation de la NASA, l'inclusion simple était correcte car l'ordinateur de navigation n'exécutait qu'un seul programme.

Robert Baron
la source
2
Je ne pense pas que cela réponde à la question "qu'est-ce que c'est et comment ça marche".
tofro
tofro: J'ai interprété le "Qu'est-ce que cela signifie?" comme ce que cela signifierait d'un point de vue pratique en termes de taille binaire et de vitesse d'exécution.
Robert Baron
"l'inclusion serait plus grande" - Ne comprenez pas cela. Si le code est dedans, il est dedans et utilise l'espace - quelle que soit la façon dont il est entré dans le binaire. Ne vous entendez même pas sur le temps de compilation - une version complète va prendre un temps identique. Vous ne gagnez en vitesse que lorsque vous effectuez des builds incrémentiels, et je doute que cela ait déjà été pratiqué dans les années
60
La vitesse d'exécution serait plus rapide car toutes les fonctions d'un système d'exploitation minimal se trouvent dans l'exécutable, donc ce ne sont que des appels plutôt que d'utiliser des interruptions (je considère un système d'exploitation minimal tel que DOS où il utilise les interruptions du 8086 pour effectuer des appels système). De plus, comme tout le système d'exploitation serait inclus, cela consommerait plus d'espace que lorsqu'il ne l'est pas et augmenterait le temps de compilation.
Robert Baron