Compiler construction Tiger编译器的目标体系结构

Compiler construction Tiger编译器的目标体系结构,compiler-construction,target,platform,tiger,Compiler Construction,Target,Platform,Tiger,我正在用F#编写一个编译器,我终于达到了不能再推迟目标体系结构决策的地步 这是我的第一个编译器,但肯定不是最后一个。所以什么是好主意 第一个编译器的目标体系结构 我曾考虑过以CIL(.NET)为目标,但是 似乎更适合注册机 我还想知道当我完成这个编译器后我应该去哪里。我应该试试吗 瞄准另一个架构?我应该关注编译器的另一部分吗?为什么?如果您使用F#来编写编译器,发出CIL当然听起来是个不错的决定,因为您将能够使用CodeDOM等的所有内置功能 或者,您可以设计自己的输出格式,并编写一个运行在.N

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

这是我的第一个编译器,但肯定不是最后一个。所以什么是好主意 第一个编译器的目标体系结构

我曾考虑过以CIL(.NET)为目标,但是 似乎更适合注册机

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

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


或者,您可以设计自己的输出格式,并编写一个运行在.NET内部的VM,如果这样可以使输出更容易(因为它是一个更合适的体系结构)。调试可能会更容易一些,当然这也意味着要编写VM:)

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

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


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

为了完全满足个人需求,没有什么可以替代瞄准你拥有的硬件并在裸机上运行编译后的代码。但是,有合理的替代方案:

  • MIPS是一个非常干净的指令集,类似的模拟器也很容易获得。您的编译器会很简单,调试体验也会比较愉快

  • 根据您编写编译器的原因,您可能会很乐意选择低级编译器目标语言,如或。但是为什么其他人要从编写你的后端中获得乐趣呢

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


我确实考虑过x86汇编和编写VM。我只是想知道,RISC体系结构是否更适合第一次尝试。有什么想法吗?我唯一的RISC体验就是AVR组装,我喜欢它。它有趣、干净、易学。我对ARM或PowerPC了解不多,但我猜,对于wuub来说,任何东西都比x86:)+1好。作为第一次尝试,使用RISC非常好,您可以尝试MIPS,并使用SPIM进行模拟。我决定为x86编写一个后端,稍后可能为MIPS编写一个后端。我可能会再次编写整个编译器,只是为了练习。