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.
la source
#include
directive deC
. 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é.Réponses:
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 .
la source
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.
la source