3

Mac OS X で実行する Forth の独自のコピーを (一度に 1 ステップずつ) 構築しようとしています。

現在、PHP、Ruby、および Python で Apache および localhost で実行されているバージョンの Forth を使用しています。

コンパイルされた Forth コードの独自のネイティブ実行可能ファイルを作成できる Forth のネイティブ実行可能バージョンを作成する C で Forth のバージョンを作成したいと考えています。半再帰的な文章ですみません。私の目標は、C で開始し、最終的には独自の Forth コンパイラーになることです (もはや C コードでは実行されません)。

私の出発点は、最小限のテスト プログラムをターミナルのバイナリ実行可能ファイルとして実行することです。既存の C コンパイラが何をしているかを理解できたら、そのメソッドを自分の目的に合わせて変更できます。

私は C で小さな「hello world」プログラムを作成し、最終的に 8,497 バイトの実行可能ファイルになりました。これは、ほとんどが 0x00 配列 (おそらくバッファー) で構成されていました。私の推測では、stdio ライブラリ全体が含まれていました。

次に、考えられる限り最小の C プログラムを作成しました (完全にヌルのプログラムを除いて -- 結果の 16 進数で自分のコードを見つけられるようにしたかったのです)。

int main(void)
{
    char testitem;
    testitem = 'A';
    return -1;
}

これにより、ASCII A のストレージとすべての 1 の戻り値を簡単に見つけることができるため、可能な限り最小限のオーバーヘッドが得られるはずでした。

代わりに、4,313 バイトのファイルになってしまいました。0x41 (ASCII 'A') には 4 つの位置がありましたが、MOV 即時バイト命令の一部ではありませんでした。おそらく、0x41 は定数データとして格納され、別の MOV 命令でロードされました。

ここでも、多数の 0x00 配列 (3,731 バイト、または 402 バイトを除くすべて) がありました。おそらく、オブジェクトファイルにはある種のヘッダーデータがあり(ターミナルで正しく実行され、-1 を通知します)、他に何があるかは誰にもわかりません。

現時点では、アプリケーション バンドルを持つことには関心がありません。Terminal で実行することが私の短期的な目標です。この最初のステップが機能したら、完全なアプリケーションに進むことができます。

オブジェクト ファイルがターミナル ツールとして正しく機能するために必要なものを決定する方法について何か提案はありますか?

4

1 に答える 1