Kürzlich digitalisiert und in ein Repo umgewandelt, wurde der ursprüngliche Quellcode des Apollo 11-Leitcomputers für die Anzeige auf Github zur Verfügung gestellt .
In MAIN.agc kommentiert der Repo-Autor, dass sie
Teilen Sie den riesigen monolithischen Quellcode in kleinere, besser verwaltbare Blöcke auf, dh in einzelne Quelldateien.
Etwas später gibt der Autor an
Es kann vernünftigerweise gefragt werden, warum Zehntausende von Quellzeilen durch Einfügen verbunden werden, anstatt die Quelldateien einfach einzeln zusammenzusetzen und sie dann zu verknüpfen, um die ausführbare Datei zu bilden. Die Antwort ist, dass das ursprüngliche Entwicklungsteam keinen Linker hatte.
Ich weiß, was Linker sind, und ich verstehe den Sinn von ihnen - aber ich habe noch nie von dem Satz (soweit ASM geht) "verbunden durch Inklusion" gehört.
Was bedeutet das? Angesichts der Tatsache, dass Linker eine große Rolle bei der Programmierung spielen, bin ich gespannt, was diese Substitution von Linkern durch "Inklusionsmittel" ist und wie sie funktioniert.
quelle
#include
Richtlinie inC
. Mit anderen Worten, anstelle des Code-Bings, der auf Komponenten kompiliert wurde, die dann miteinander verknüpft werden, sieht es so aus, als ob die$
Notation den Inhalt dieser Datei enthält, um eine große Quelldatei zu generieren. Diese eine große Quelldatei wird dann als einzelne Entität kompiliert.Antworten:
Sie scheinen eine einfache Verkettung / Einfügung von Text zu bedeuten. Mit anderen Worten, obwohl der Quelltext in einzelne Dateien aufgeteilt wurde , wurde das Programm nicht in Module aufgeteilt .
quelle
Wie ist einfache Inklusion mit Verlinkung zu vergleichen?
Die einfache Aufnahme erfolgt also mit #include "someCFile.c".
Standardmäßig fügen Linker eine Laufzeitbibliothek hinzu. Mit der Aufnahme müsste dies einbezogen werden.
Ich vermute, dass die Aufnahme weniger Platz beanspruchen würde, da die Objekte keine Tabellen mit Einstiegspunkten und möglicherweise Variablen mit Namen benötigen würden. Bei der dynamischen Verknüpfung muss die Einstiegspunkttabelle vorhanden sein. Ich bin mir nicht sicher, ob statische Verknüpfungen es entfernen würden oder nicht, ich vermute, dass dies nicht der Fall ist.
In Bezug auf die Verarbeitungsgeschwindigkeit ist die Aufnahme wahrscheinlich etwas schneller (definitiv bei dynamisch verknüpften Bibliotheken), jedoch nicht so flexibel, da mehrere Anwendungen nicht dieselbe Bibliothek gemeinsam nutzen können.
In Anbetracht der Binärgröße wäre der Einschluss größer.
In Anbetracht der Kompilierungszeit würde die Aufnahme länger dauern.
Für den NASA-Navigationscomputer war die einfache Aufnahme in Ordnung, da auf dem Navigationscomputer nur ein Programm ausgeführt wurde.
quelle