Apollo-11: Verwenden von Inklusion anstelle eines Linkers

9

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.

8 Protonen
quelle
7
Ein Beispiel für "durch Inklusion verbunden" wäre die #includeRichtlinie in C. 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.
David Arno
1
@DavidArno Ihr Kommentar scheint eine bessere Antwort zu sein als eine der beiden Antworten, die derzeit im Forum sind.
Ross Presser

Antworten:

18

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 .

Jörg W Mittag
quelle
-2

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.

Robert Baron
quelle
2
Ich glaube nicht, dass dies die Frage beantwortet, was es ist und wie es funktioniert.
Tofro
tofro: Ich habe das "Was bedeutet das?" was würde es aus praktischer Sicht in Bezug auf Binärgröße und Ausführungsgeschwindigkeit bedeuten.
Robert Baron
"Inklusion wäre größer" - Verstehe das nicht. Wenn Code in ist, ist er in und verwendet Leerzeichen - unabhängig davon, wie er in die Binärdatei gelangt ist. Vereinbaren Sie nicht einmal die Kompilierungszeit - ein vollständiger Build wird identische Zeit in Anspruch nehmen. Sie gewinnen nur an Geschwindigkeit, wenn Sie inkrementelle Builds ausführen, und ich bezweifle, dass dies bereits in den 60er Jahren praktiziert wurde
bis zum
Die Ausführungsgeschwindigkeit wäre schneller, da sich alle Funktionen eines minimalen Betriebssystems in der ausführbaren Datei befinden. Dies sind also nur Aufrufe im Gegensatz zur Verwendung von Interrupts (ich erwäge ein minimales Betriebssystem wie DOS, bei dem die Interrupts des 8086 verwendet wurden Systemaufrufe tätigen). Da das gesamte Betriebssystem enthalten wäre, würde dies mehr Speicherplatz verbrauchen als wenn dies nicht der Fall wäre, und die Kompilierungszeit verlängern.
Robert Baron