Недавно оцифрованный и превращенный в репозиторий исходный компьютерный исходный код Apollo 11 был доступен для просмотра на Github .
В репозитории MAIN.agc автор репозитория комментирует, что они
разбить огромный монолитный исходный код на более мелкие, более управляемые куски - т.е. на отдельные исходные # файлы.
Чуть позже автор заявляет
Можно разумно спросить, почему десятки тысяч строк исходного кода объединяются с помощью включения, а не путем простой сборки исходных файлов по отдельности и последующего связывания их для формирования исполняемого файла. Ответ заключается в том, что в первоначальной команде разработчиков не было линкера.
Я знаю, что такое линкеры, и я понимаю их смысл, но я никогда не слышал о фразе (насколько это касается ASM), «соединенной посредством включения».
Что это значит? Учитывая, что линкеры имеют большое значение в программировании, мне любопытно, что такое замена линкеров «средствами включения» и как она работает.
источник
#include
директива вC
. Другими словами, вместо того, чтобы код кода компилировался на компоненты, которые затем связывались вместе, похоже, что$
нотация включает в себя содержимое этого файла, чтобы создать один большой исходный файл. Этот один большой исходный файл затем компилируется как единый объект.Ответы:
Кажется, они означают простую текстовую конкатенацию / вставку. Другими словами, хотя исходный текст был разбит на отдельные файлы , программа не была разбита на модули .
источник
Как простое включение сравнивается со ссылками?
Так что простое включение осуществляется с помощью #include "someCFile.c".
По умолчанию компоновщики добавят библиотеку времени выполнения. С включением это должно быть включено.
Я подозреваю, что включение заняло бы меньше места, так как объектам не нужно иметь таблицы, содержащие точки входа и потенциально переменные с именами. При динамическом связывании должна быть таблица точек входа. Я не уверен, удалит ли это статическая ссылка или нет, я подозреваю, что это не так.
С точки зрения скорости обработки включение, вероятно, немного быстрее (определенно в случае динамически связанных библиотек), однако оно не столь гибко, поскольку несколько приложений не могут совместно использовать одну и ту же библиотеку.
Учитывая размер двоичного файла, включение будет больше.
Учитывая время компиляции, включение займет больше времени.
Для навигационного компьютера НАСА простое включение было в порядке, поскольку навигационный компьютер запускал только одну программу.
источник