2009-07-06 6 views
3

F#でTigerコンパイラを作成していますが、最終的に目標アーキテクチャの決定を延期できなくなりました。Tigerコンパイラのターゲットアーキテクチャ

これは私の最初のコンパイラですが、間違いなく私の最後のコンパイラです。だから...最初のコンパイラのための良い ターゲットアーキテクチャは何ですか?

私はCIL(.NET)をターゲットにすることを考えましたが、the book の中間コードは、登録機にもっと適しているようです。

このコンパイラを終了したら、どこに行かなければならないかも知りたいと思います。別のアーキテクチャをターゲットにして を試してください。私はコンパイラの別の部分に焦点を合わせるべきですか?どうして?

+0

私は、x86用のバックエンドと、おそらくはMIPS用のバックエンドを書くことにしました。私はたぶん練習のためにコンパイラ全体をもう一度書くつもりです。 –

答えて

3

完全に個人的な満足感を得るために、のコンパイルコードを実行しているハードウェアをターゲットにして、の代わりに使用することはできません。しかし、合理的な選択肢があります

  • MIPSはSPIMのような非常にきれいな命令セットとシミュレータで容易に入手可能です。コンパイラはシンプルになり、デバッグの経験は比較的幸せです。

  • コンパイラを書く理由に応じて、LLVMC--のような低レベルのコンパイラターゲット言語を対象にするとうれしいかもしれません。しかし、なぜ誰かがあなたのバックエンドを書くという楽しみを全部持っているべきですか?

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

1

あなたがたCodeDOMなどのすべての組み込み機能を使用することができますよう、CILは確かに良い決断のように聞こえる発光、コンパイラを書くためのF#を使用している場合

代わりにあなたが設計可能性独自の出力フォーマットを使用して、.NET内で実行されるVMを作成すると、より適切なアーキテクチャであるため、出力が容易になります。デバッグが簡単になるかもしれませんが、VMを書くことを意味します。

1

x86アセンブリのターゲット設定について考えましたか? 私は数年前にTigerコンパイラを作っていましたが、アセンブリエミッタは書き込みが難しいものの、プロジェクト全体で最も報酬の高いものでした。自分の小さなVMをC言語で書いても良い(それほど良いとは限りませんが)良い考えです。

既存のVMをターゲットにすることは実用的ですが、プロダクション言語を作成しているにもかかわらず、エクササイズから多くの学習の可能性が排除されます。

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

+0

私は実際にx86アセンブリとVMの作成の両方について考えました。私は、RISCアーキテクチャが最初の試みの方が良いかもしれないかどうか疑問に思っています。何かご意見は? –

+1

私の唯一のRISC経験はAVRアセンブリであり、私はそれを大好きです。楽しく、きれいで、簡単に学ぶことができます。私はARMやPowerPCについてよく分かりませんが、x86よりも優れていると思います。 –

+0

+1 for wuub。 RISCを最初に試してみるのは本当にうれしい仕事です.MIPSを試してみて、シミュレーションにSPIMを使うことができます。 –

関連する問題