Apollo-11: Utilizzo dell'inclusione invece di un linker


9

Recentemente digitalizzato e trasformato in repository, il codice sorgente del computer di guida Apollo 11 originale è stato reso disponibile per la visualizzazione su Github .

In MAIN.agc , l'autore del repository commenta che loro

dividere l'enorme codice sorgente monolitico in blocchi più piccoli e più gestibili, ovvero in singoli file # sorgente.

Poco dopo, afferma l'autore

Si può ragionevolmente chiedere perché decine di migliaia di righe di sorgente siano unite mediante l'inclusione, anziché semplicemente assemblare i file di origine singolarmente e quindi collegarli per formare l'eseguibile. La risposta è che il team di sviluppo originale non aveva linker.

So cosa sono i linker e ne capisco il punto, ma non ho mai sentito parlare della frase (per quanto riguarda l'ASM) "unita mediante l'inclusione".

Cosa significa questo? Considerando che i linker sono molto importanti nella programmazione, sono curioso di sapere cos'è questa sostituzione dei linker con "mezzi di inclusione" e come funziona.


7
Un esempio di "unione mediante l'inclusione" sarebbe la #includedirettiva C. In altre parole, piuttosto che il codice bing compilato su componenti che sono poi collegati insieme, sembra che la $notazione includa il contenuto di quel file, al fine di generare un file sorgente di grandi dimensioni. Quel file sorgente di grandi dimensioni viene quindi compilato come singola entità.
David Arno,

1
@DavidArno il tuo commento sembra una risposta migliore rispetto a una delle due risposte attualmente presenti nel forum.
Ross Presser,

Risposte:


18

Sembrano significare semplice concatenazione / inserimento testuale. In altre parole, anche se il testo sorgente è stato suddiviso in singoli file , il programma non è stato suddiviso in moduli .


-2

Come si confronta l'inclusione semplice con il collegamento?

Quindi l'inclusione semplice si ottiene usando #include "someCFile.c".

Per impostazione predefinita, i linker aggiungeranno una libreria di runtime. Con l'inclusione, questo dovrebbe essere incluso.

Ho il sospetto che l'inclusione richiederebbe meno spazio in quanto gli oggetti non dovrebbero avere tabelle contenenti punti di ingresso e potenzialmente variabili con nomi. Nel collegamento dinamico, la tabella dei punti di ingresso deve essere presente. Non sono sicuro che il collegamento statico lo rimuoverà o meno, sospetto che non lo faccia.

In termini di velocità di elaborazione, l'inclusione è probabilmente un po 'più veloce (sicuramente nel caso di librerie collegate dinamicamente), tuttavia non è così flessibile, poiché più applicazioni non possono condividere la stessa libreria.

Considerando la dimensione binaria, l'inclusione sarebbe maggiore.

Considerando il tempo di compilazione, l'inclusione richiederebbe più tempo.

Per il computer di navigazione della NASA la semplice inclusione era accettabile poiché il computer di navigazione eseguiva un solo programma.


2
Non credo che questo risponda alla domanda "cos'è e come funziona".
Tofro

tofro: ho interpretato il "Che cosa significa?" come cosa significherebbe da un punto di vista pratico in termini di dimensioni binarie e velocità di esecuzione.
Robert Baron,

"l'inclusione sarebbe più grande" - Non capisco. Se il codice è dentro, è dentro e usa lo spazio, indipendentemente da come è entrato nel binario. Non concordare nemmeno sul tempo di compilazione: una compilazione completa impiegherà tempo identico. Guadagni velocità solo quando fai build incrementali, e dubito che questo fosse già praticato negli anni
'60

La velocità di esecuzione sarebbe più veloce in quanto tutte le funzioni di un sistema operativo minimo sono all'interno dell'eseguibile, quindi queste sono solo chiamate invece di usare gli interrupt (sto prendendo in considerazione un sistema operativo minimo come DOS in cui ha usato gli interrupt dell'8086 per effettuare chiamate di sistema). Inoltre, poiché l'intero sistema operativo verrebbe incluso, ciò richiederebbe più spazio rispetto a quando non lo è e si aggiungerebbe al tempo di compilazione.
Robert Baron,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.