Apollo-11:リンカーの代わりにインクルージョンを使用する


9

最近デジタル化されてリポジトリになり、元のApollo 11ガイダンスコンピューターのソースコードがGithub表示できるようになりました。

ではMAIN.agc、レポ作者のコメント、彼らはその

巨大なモノリシックソースコードを、より小さく管理しやすいチャンク、つまり個別のソースファイルに分割します。

少し後で、著者は述べています

単純にソースファイルを個別にアセンブルしてからリンクして実行可能ファイルを形成するのではなく、何万行ものソース行がインクルードによって結合される理由を合理的に尋ねられる場合があります。答えは、元の開発チームにはリンカーがなかったということです。

リンカとは何か知っており、リンカの要点は理解していますが、「ASMに関する限り」「結合によって結合される」というフレーズは聞いたことがありません。

これは何を意味するのでしょうか?リンカはプログラミングにおいて非常に重要であることを考えると、「組み込み手段」によるリンカのこの置換が何であり、それがどのように機能するのか私は興味があります。


7
「包含によって結合」の例は、の#includeディレクティブですC。つまり、$1つの大きなソースファイルを生成するために、コンポーネントにコンパイルされて一緒にリンクされるコードではなく、表記にはそのファイルのコンテンツが含まれているように見えます。その1つの大きなソースファイルは、単一のエンティティとしてコンパイルされます。
David Arno

1
@DavidArnoあなたのコメントは、現在ボード上にある2つの回答のどちらよりも良い回答のようです。
ロスプレッサー2016

回答:


18

それらは単純なテキストの連結/挿入を意味するようです。つまり、ソーステキストが個別のファイルに分割されていても、プログラムモジュールに分割されていませんでした。


-2

単純な包含はリンクとどのように比較されますか?

したがって、#include "someCFile.c"を使用することで、単純なインクルードが実現されます。

デフォルトでは、リンカーはランタイムライブラリを追加します。含める場合、これを含める必要があります。

オブジェクトにはエントリポイントや名前付きの変数が含まれている可能性があるテーブルを含める必要がないため、インクルードの方がスペースが少なくて済むと思います。動的リンクでは、エントリポイントテーブルが存在する必要があります。静的リンクがそれを削除するかどうかはわかりませんが、削除しないと思います。

処理速度の点では、組み込みはおそらく少し高速です(動的にリンクされたライブラリの場合は間違いなく)。ただし、それほど柔軟ではなく、複数のアプリケーションが同じライブラリを共有できませんでした。

バイナリサイズを考慮すると、インクルードはより大きくなります。

コンパイル時間を考慮すると、インクルードにはさらに時間がかかります。

NASAのナビゲーションコンピューターでは、ナビゲーションコンピューターが1つのプログラムしか実行しなかったため、単純な組み込みで問題ありませんでした。


2
これが「それが何で、どのように機能するか」という質問には答えられないと思います。
tofro 2016

tofro:「どういう意味ですか?」バイナリサイズと実行速度の観点から、それは実際的な観点から何を意味するのか。
ロバートバロン

「包含はより大きくなるだろう」-これを取得しないでください。コードが入っている場合は、それが入ってスペースを使用します-どのようにしてバイナリーに入ったかは関係ありません。コンパイル時間についてさえ同意しないでください-完全なビルドには同じ時間がかかります。やってインクリメンタルビルドするときは、スピードだけを得る、と私は、これはすでに60iesで実施された疑い
tofro

最小限のオペレーティングシステムのすべての機能が実行可能ファイル内にあるため、実行速度が速くなるため、これらは割り込みを使用するのではなく単なる呼び出しです(私は、DOSなどの最小限のオペレーティングシステムで8086の割り込みを使用していると考えています)システムコールを行うため)。また、オペレーティングシステム全体が含まれるため、含まれていない場合よりも多くのスペースが消費され、コンパイル時間が長くなります。
Robert Baron
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.