Apollo-11: Bağlayıcı yerine dahil etme kullanma


9

Son zamanlarda sayısallaştırıldı ve bir repoya dönüştü, orijinal Apollo 11 rehberlik bilgisayar kaynak kodu Github'da görüntülenmek için hazırlandı .

In MAIN.agc , repo yazar Yorumlara o

büyük monolitik kaynak kodunu daha küçük, daha yönetilebilir parçalara, yani tek tek kaynak # dosyalarına bölün

Biraz sonra yazar

Kaynak dosyaları tek tek bir araya getirmek ve ardından yürütülebilir dosyayı oluşturmak için bağlamak yerine on binlerce kaynağın neden içerme yoluyla birleştirildiği makul olarak sorulabilir. Cevap, orijinal geliştirme ekibinin bağlayıcısı olmadığıdır.

Bağlayıcıların ne olduğunu biliyorum ve onların amacını anlıyorum- ama "ASM'nin katıldığı sürece" ifadesini hiç duymadım.

Ne anlama geliyor? Bağlayıcıların programlamada büyük bir anlaşma olduğu düşünüldüğünde, bağlayıcıların "içerme yoluyla" değiştirilmesinin ne olduğunu ve nasıl çalıştığını merak ediyorum.


7
"İçerme yoluyla katıldı" bir örneği olacaktır #includeiçinde yönergesi C. Başka bir deyişle, daha sonra birbirine bağlanan bileşenlere derlenen kod bingi yerine $, büyük bir kaynak dosyası oluşturmak için gösterimin bu dosyanın içeriğini içerdiği anlaşılıyor. Bu büyük kaynak dosya daha sonra tek bir varlık olarak derlenir.
David Arno

1
@DavidArno yorumunuz şu anda tahtada bulunan iki cevaptan daha iyi bir yanıt gibi görünüyor.
Ross Presser

Yanıtlar:


18

Basit metin birleştirme / ekleme anlamına geliyorlar. Başka bir deyişle, kaynak metin ayrı dosyalara bölünmüş olsa da , program modüllere bölünmemiştir .


-2

Basit dahil etme bağlantı ile nasıl karşılaştırılır?

Yani basit dahil etme #include "someCFile.c" kullanılarak gerçekleştirilir.

Varsayılan olarak, bağlayıcılar bir çalışma zamanı kitaplığı ekler. Kapsama dahil edildiğinde, bunun dahil edilmesi gerekir.

Nesnelerin giriş noktalarını içeren ve potansiyel olarak isimlerle değişkenler içeren tablolara sahip olması gerekmediğinden, dahil etmenin daha az yer kaplayacağından şüpheleniyorum. Dinamik bağlantıda, giriş noktası tablosu orada olmalıdır. Statik bağlamanın onu kaldırıp kaldırmayacağından emin değilim.

İşlem hızı açısından, içerme muhtemelen biraz daha hızlıdır (kesinlikle dinamik olarak bağlı kütüphaneler söz konusu olduğunda), ancak esnek değildir, aynı kütüphaneyi paylaşamayan birden fazla uygulamadır.

İkili büyüklük göz önüne alındığında, içerme daha büyük olacaktır.

Derleme zamanı düşünüldüğünde içerme daha uzun sürer.

NASA navigasyon bilgisayarı için, navigasyon bilgisayarı sadece bir program çalıştırdığı için basit dahil olmak iyiydi.


2
Bunun "ne olduğu ve nasıl çalıştığı" sorusunu cevapladığını sanmıyorum.
tofro

tofro: "Bu ne anlama geliyor?" ikili boyut ve yürütme hızı açısından pratik açıdan ne anlama gelirdi.
Robert Baron

"içerme daha büyük olurdu" - Bunu anlama. Kod içerideyse, içeride ve boşluk kullanır - ikili dosyaya nasıl girdiğine bakılmaksızın. Derleme zamanı üzerinde bile anlaşmayın - tam bir yapı aynı zaman alacaktır. Sadece artımlı yapılar yaparken hız kazanıyorsunuz ve bunun
60'larda

Yürütme hızı, en az bir işletim sisteminin tüm işlevleri yürütülebilir içinde olduğundan daha hızlı olurdu, bu yüzden bunlar sadece kesmeleri kullanmak yerine çağrılardır (8086 kesmelerini kullandığı DOS gibi en az işletim sistemini düşünüyorum. sistem çağrıları yapmak için). Ayrıca, tüm işletim sistemi dahil edileceğinden, bu, olmadığı zamandan daha fazla yer kaplar ve derleme süresine katkıda bulunur.
Robert Baron
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.