Apollo-11: Menggunakan penyertaan alih-alih tautan

9

Baru-baru ini didigitalkan dan diubah menjadi repo, kode sumber komputer panduan Apollo 11 asli telah tersedia untuk dilihat di Github .

Di MAIN.agc , penulis repo berkomentar bahwa mereka

pisahkan kode sumber monolitik besar menjadi potongan yang lebih kecil dan lebih mudah dikelola - yaitu, menjadi file sumber # individu.

Beberapa saat kemudian, penulis menyatakan

Mungkin wajar ditanyakan mengapa puluhan ribu baris sumber digabungkan dengan cara inklusi, daripada hanya mengumpulkan file sumber secara individual dan kemudian menautkannya untuk membentuk executable. Jawabannya adalah bahwa tim pengembangan asli tidak memiliki tautan.

Saya tahu apa itu linker dan saya mengerti maksudnya - tetapi saya belum pernah mendengar frasa (sejauh ASM) "bergabung dengan cara inklusi".

Apa artinya ini? Mempertimbangkan bahwa penghubung adalah masalah besar dalam pemrograman, saya ingin tahu apa pengganti dari penghubung ini dengan "cara inklusi 'dan bagaimana cara kerjanya.

8 proton
sumber
7
Contoh "bergabung melalui inklusi" akan menjadi #includearahan dalam C. Dengan kata lain, alih-alih kode yang dikompilasi ke komponen yang kemudian ditautkan bersama, sepertinya $notasi menyertakan konten file itu, untuk menghasilkan satu file sumber besar. Satu file sumber besar itu kemudian dikompilasi sebagai satu kesatuan.
David Arno
1
@ Davidvidno komentar Anda sepertinya jawaban yang lebih baik daripada salah satu dari dua jawaban saat ini di papan tulis.
Ross Presser

Jawaban:

18

Mereka tampaknya berarti penggabungan / penyisipan teks sederhana. Dengan kata lain, meskipun teks sumber dipecah menjadi file individual , program tidak dibagi menjadi modul .

Jörg W Mittag
sumber
-2

Bagaimana inklusi sederhana dibandingkan dengan menautkan?

Jadi penyertaan sederhana dilakukan dengan menggunakan #include "someCFile.c".

Secara default, tautan akan menambahkan perpustakaan runtime. Dengan inklusi, ini harus dimasukkan.

Saya menduga bahwa penyertaan akan memakan waktu lebih sedikit karena objek tidak perlu memiliki tabel yang berisi titik masuk dan variabel yang berpotensi dengan nama. Dalam penautan dinamis, tabel titik masuk harus ada di sana. Saya tidak yakin apakah penghubung statis akan menghapusnya atau tidak, saya kira tidak.

Dalam hal kecepatan pemrosesan, inklusi mungkin sedikit lebih cepat (pasti dalam kasus perpustakaan terkait secara dinamis), namun tidak fleksibel, beberapa aplikasi tidak dapat berbagi perpustakaan yang sama.

Mempertimbangkan ukuran biner, inklusi akan lebih besar.

Mempertimbangkan waktu kompilasi, inklusi akan lebih lama.

Untuk komputer navigasi NASA, penyertaan sederhana tidak masalah karena komputer navigasi hanya menjalankan satu program.

Robert Baron
sumber
2
Saya tidak berpikir ini menjawab pertanyaan "apa itu dan bagaimana cara kerjanya".
tofro
tofro: Saya menafsirkan "Apa artinya?" seperti apa artinya dari sudut pandang praktis dalam hal ukuran biner dan kecepatan eksekusi.
Robert Baron
"Penyertaan akan lebih besar" - Jangan mengerti ini. Jika kode dalam, itu dalam dan menggunakan ruang - terlepas dari bagaimana ia masuk ke dalam biner. Bahkan tidak menyetujui waktu kompilasi - pembangunan penuh akan membutuhkan waktu yang sama. Anda hanya mendapatkan kecepatan ketika melakukan tambahan membangun, dan saya ragu ini sudah dipraktekkan di 60ies
tofro
Kecepatan eksekusi akan lebih cepat karena semua fungsi sistem operasi minimal berada dalam executable, jadi ini hanya panggilan yang bertentangan dengan menggunakan interupsi (saya sedang mempertimbangkan sistem operasi minimal seperti DOS di mana ia menggunakan interupsi pada 8086 untuk melakukan panggilan sistem). Juga, karena seluruh sistem operasi akan dimasukkan, ini akan mengkonsumsi lebih banyak ruang daripada ketika tidak dan akan menambah waktu kompilasi.
Robert Baron