Niedawno zdigitalizowany i przekształcony w repozytorium udostępniono oryginalny kod źródłowy komputerowego przewodnika Apollo 11 do przeglądania na Github .
W MAIN.agc autor repozytorium komentuje, że tak
podzielić olbrzymi monolityczny kod źródłowy na mniejsze, łatwiejsze do zarządzania fragmenty - tj. na poszczególne pliki źródłowe #.
Nieco później autor stwierdza
Można zasadnie zapytać, dlaczego dziesiątki tysięcy wierszy źródła są łączone poprzez włączenie, zamiast po prostu pojedynczego złożenia plików źródłowych, a następnie połączenia ich w celu utworzenia pliku wykonywalnego. Odpowiedź jest taka, że pierwotny zespół programistów nie miał linkera.
Wiem, czym są linkery i rozumiem ich sens - ale nigdy nie słyszałem o frazie (o ile chodzi o ASM) „połączone przez włączenie”.
Co to znaczy? Biorąc pod uwagę, że linkery to wielka sprawa w programowaniu, jestem ciekawy, czym jest to substytucja linkerów przez „sposób włączenia” i jak to działa.
źródło
#include
dyrektywa wC
. Innymi słowy, zamiast kodu skompilowanego na komponentach, które następnie są ze sobą połączone, wygląda na to, że$
notacja zawiera zawartość tego pliku, w celu wygenerowania jednego dużego pliku źródłowego. Ten jeden duży plik źródłowy jest następnie kompilowany jako pojedynczy obiekt.Odpowiedzi:
Wydaje się, że oznaczają proste łączenie / wstawianie tekstu. Innymi słowy, mimo że tekst źródłowy został podzielony na pojedyncze pliki , program nie został podzielony na moduły .
źródło
Jak prosta integracja różni się od linkowania?
Tak proste włączenie odbywa się za pomocą #include „someCFile.c”.
Domyślnie linkery dodają bibliotekę wykonawczą. Po włączeniu należałoby to uwzględnić.
Podejrzewam, że włączenie zajmie mniej miejsca, ponieważ obiekty nie będą musiały mieć tabel zawierających punkty wejścia i potencjalnie zmienne o nazwach. W łączeniu dynamicznym tablica punktów wejścia musi tam być. Nie jestem pewien, czy statyczne linkowanie usunęło go, czy nie, podejrzewam, że nie.
Jeśli chodzi o szybkość przetwarzania, włączenie jest prawdopodobnie nieco szybsze (zdecydowanie w przypadku bibliotek połączonych dynamicznie), jednak nie jest tak elastyczne, ponieważ wiele aplikacji nie może współużytkować tej samej biblioteki.
Biorąc pod uwagę rozmiar binarny, włączenie byłoby większe.
Biorąc pod uwagę czas kompilacji, włączenie potrwa dłużej.
W przypadku komputera nawigacyjnego NASA proste włączenie było w porządku, ponieważ komputer nawigacyjny uruchomił tylko jeden program.
źródło