Tiger编译器的目标架构

时间:2009-07-06 12:33:48

标签: compiler-construction target platform tiger

我正在用F#编写一个Tiger编译器,我终于达到了无法推迟目标架构决策的程度。

这是我的第一个编译器,但绝对不会是我的最后一个。那么......什么是好事 第一个编译器的目标架构?

我考虑过针对CIL(.NET),但the book中的中间代码 似乎更适合注册机器。

我还想知道在完成这个编译器后我应该去哪里。我应该试试 针对另一个架构?我应该关注编译器的另一部分吗?为什么呢?

3 个答案:

答案 0 :(得分:4)

为了纯粹的个人满意度,以您拥有的硬件为目标并在裸机上运行已编译的代码是无可替代的。但是,有合理的选择:

  • MIPS是一个非常干净的指令集,像SPIM这样的模拟器随时可用。您的编译器很简单,调试体验也相对满意。

  • 根据您编写编译器的原因,您可能会乐意定位低级编译器目标语言,如LLVMC--。但是为什么其他人会有写你的后端的所有乐趣?

  • 如果您使用的是Intel或AMD硬件,我强烈建议您使用带有SSE扩展的64位指令集。您将拥有两倍的寄存器,并且您的浮点代码(如果有的话)将是合理的。

答案 1 :(得分:1)

如果您正在使用F#编写编译器,那么发出CIL听起来肯定是一个好的决定,因为您将能够使用CodeDOM的所有内置功能等。

或者,您可以设计自己的输出格式并编写在.NET中运行的VM,如果这样可以使输出更容易(由于是更合适的架构)。它可能更容易调试 - 虽然它当然也意味着编写VM:)

答案 2 :(得分:1)

您是否考虑过定位x86程序集? 几年前我自己做了一个Tiger编译器,尽管很难写,汇编发射器是整个项目中最有价值的东西之一。用C编写自己的小VM也是一个很好的(如果不是更好的)想法。

如果您正在创建一种生产语言,那么定位现有VM是务实的,但会从练习中消除许多学习可能性。

如果我是你,我会在项目后期仔细研究不同的优化技术。