3

我正在用 F# 编写一个Tiger编译器,我终于到了不能再推迟对目标体系结构的决定的​​地步。

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

我曾考虑过以 CIL (.NET) 为目标,但书中的中间代码 似乎更适合注册机。

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

4

3 回答 3

4

对于纯粹的个人满意度,没有什么可以替代您拥有的硬件并在裸机上运行您的编译代码。但是,有一些合理的选择:

  • MIPS 是一个非常干净的指令集,并且像SPIM这样的模拟器很容易获得。你的编译器会很简单,你的调试体验也会相对愉快。

  • 根据您编写编译器的原因,您可能会乐于以LLVMC--等低级编译器目标语言为目标。但是,为什么其他人会乐于为您编写后端呢?

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

于 2009-07-07T02:05:32.800 回答
1

如果您使用 F# 编写编译器,发出 CIL 听起来确实是一个不错的决定,因为您将能够使用 CodeDOM 等的所有内置功能。

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

于 2009-07-06T12:54:56.347 回答
1

您是否考虑过以 x86 程序集为目标?几年前我自己做了一个 Tiger 编译器,汇编发射器虽然很难写,但却是整个项目中最有价值的东西之一。用 C 语言编写自己的小型 VM 也是一个好主意(如果不是更好的话)。

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

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

于 2009-07-06T13:21:02.567 回答