3

私はF# でTigerコンパイラを作成していますが、最終的にターゲット アーキテクチャの決定を先延ばしできないところまで来ました。

これは私の最初のコンパイラですが、間違いなく最後ではありません。では...最初のコンパイラのターゲット アーキテクチャとして適切なものは何でしょうか?

CIL (.NET) をターゲットにすることも考えましたが、本の中間コードは レジスター マシンにより適しているようです。

また、このコンパイラが完成したらどこに行けばよいか知りたいです。別のアーキテクチャをターゲットにする必要がありますか? コンパイラの別の部分に焦点を当てる必要がありますか? なんで?

4

3 に答える 3

4

完全に個人的な満足を得るためには、所有しているハードウェアをターゲットにして、コンパイルしたコードをベア メタルで実行する以外に方法はありません。ただし、合理的な代替手段があります。

  • MIPS は非常にクリーンな命令セットであり、SPIMのようなシミュレーターはすぐに利用できます。コンパイラはシンプルになり、デバッグ エクスペリエンスは比較的満足のいくものになります。

  • コンパイラを作成する理由によっては、 LLVMC--などの低レベルのコンパイラ ターゲット言語を対象として満足する場合があります。しかし、なぜ他の誰かがあなたのバックエンドを書くことをすべて楽しんでいる必要があるのでしょうか?

  • Intel または AMD ハードウェアを使用している場合は、SSE 拡張機能を備えた 64 ビット命令セットを使用することを強くお勧めします。使用するレジスタが 2 倍になり、浮動小数点コード (もしあれば) は正常になります。

于 2009-07-07T02:05:32.800 に答える
1

x86アセンブリをターゲットにすることを考えましたか?私は数年前に自分でTigerコンパイラを作成しました。アセンブリエミッタは、書くのは難しいですが、プロジェクト全体で最もやりがいのあるものの1つでした。独自の小さなVMをCで作成することも、(良いとは言えないまでも)良い考えです。

実稼働言語を作成している場合、既存のVMをターゲットにすることは実用的ですが、演習から多くの学習の可能性を排除します。

私があなたなら、プロジェクトの後半でさまざまな最適化手法を詳しく見ていきます。

于 2009-07-06T13:21:02.567 に答える
1

F# を使用してコンパイラを記述している場合、CodeDOM などのすべての組み込み機能を使用できるため、CIL を発行することは確かに良い決定のように思えます。

または、独自の出力形式を設計し、.NET 内で実行される VM を作成することもできます。これにより、(より適切なアーキテクチャであるため) 出力が容易になります。デバッグする方が簡単かもしれません - もちろんそれは VM を書くことも意味します :)

于 2009-07-06T12:54:56.347 に答える