我正在用F#编写一个Tiger编译器,我终于达到了无法推迟目标架构决策的程度。
这是我的第一个编译器,但绝对不会是我的最后一个。那么......什么是好事 第一个编译器的目标架构?
我考虑过针对CIL(.NET),但the book中的中间代码 似乎更适合注册机器。
我还想知道在完成这个编译器后我应该去哪里。我应该试试 针对另一个架构?我应该关注编译器的另一部分吗?为什么呢?
答案 0 :(得分:4)
为了纯粹的个人满意度,以您拥有的硬件为目标并在裸机上运行已编译的代码是无可替代的。但是,有合理的选择:
答案 1 :(得分:1)
如果您正在使用F#编写编译器,那么发出CIL听起来肯定是一个好的决定,因为您将能够使用CodeDOM的所有内置功能等。
或者,您可以设计自己的输出格式并编写在.NET中运行的VM,如果这样可以使输出更容易(由于是更合适的架构)。它可能更容易调试 - 虽然它当然也意味着编写VM:)
答案 2 :(得分:1)
您是否考虑过定位x86程序集? 几年前我自己做了一个Tiger编译器,尽管很难写,汇编发射器是整个项目中最有价值的东西之一。用C编写自己的小VM也是一个很好的(如果不是更好的)想法。
如果您正在创建一种生产语言,那么定位现有VM是务实的,但会从练习中消除许多学习可能性。
如果我是你,我会在项目后期仔细研究不同的优化技术。