Recentemente digitalizado e transformado em um repositório, o código-fonte original do computador de orientação Apollo 11 foi disponibilizado para visualização no Github .
Em MAIN.agc , o autor do repo comenta que eles
divida o enorme código fonte monolítico em blocos menores e mais gerenciáveis - ou seja, em arquivos # individuais de origem.
Um pouco mais tarde, o autor afirma
Pode-se razoavelmente perguntar por que dezenas de milhares de linhas de origem são unidas por meio de inclusão, em vez de simplesmente reunir os arquivos de origem individualmente e depois vinculá-los para formar o executável. A resposta é que a equipe de desenvolvimento original não tinha vinculador.
Eu sei o que são os linkers e compreendo o objetivo deles - mas nunca ouvi falar da frase (no que diz respeito ao ASM) "unida por meio da inclusão".
O que isto significa? Considerando que os linkers são muito importantes em programação, estou curioso sobre o que é essa substituição de linkers por "meios de inclusão" e como ela funciona.
fonte
#include
diretiva emC
. Em outras palavras, em vez do código bing compilado nos componentes que são então vinculados, parece que a$
notação inclui o conteúdo desse arquivo, a fim de gerar um grande arquivo de origem. Esse arquivo de origem grande é compilado como uma única entidade.Respostas:
Eles parecem significar concatenação / inserção textual simples. Em outras palavras, mesmo que o texto de origem tenha sido dividido em arquivos individuais , o programa não foi dividido em módulos .
fonte
Como a inclusão simples se compara à vinculação?
A inclusão simples é realizada usando #include "someCFile.c".
Por padrão, os vinculadores adicionarão uma biblioteca de tempo de execução. Com a inclusão, isso teria que ser incluído.
Suspeito que a inclusão ocuparia menos espaço, pois os objetos não precisariam ter tabelas contendo pontos de entrada e potencialmente variáveis com nomes. Na vinculação dinâmica, a tabela do ponto de entrada deve estar lá. Não tenho certeza se a vinculação estática a removeria ou não, acho que não.
Em termos de velocidade de processamento, a inclusão é provavelmente um pouco mais rápida (definitivamente no caso de bibliotecas vinculadas dinamicamente), no entanto, não é tão flexível, pois vários aplicativos não poderiam compartilhar a mesma biblioteca.
Considerando o tamanho binário, a inclusão seria maior.
Considerando o tempo de compilação, a inclusão levaria mais tempo.
Para o computador de navegação da NASA, a inclusão simples era aceitável, pois o computador de navegação executava apenas um programa.
fonte