【问题标题】:Target architecture for Tiger-compilerTiger-compiler 的目标架构
【发布时间】:2009-07-06 12:33:47
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我决定为 x86 写一个后端,也许稍后再为 MIPS 写一个。无论如何,我可能会再次编写整个编译器来练习。

标签: compiler-construction target platform tiger


【解决方案1】:

为了纯粹的个人满意度,没有什么可以替代以您拥有的硬件为目标并在裸机上运行已编译的代码。但是,有一些合理的替代方案:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 我确实考虑过 x86 汇编和编写 VM。我只是想知道第一次尝试 RISC 架构是否会更好。有什么想法吗?
      • 我唯一的 RISC 经验是使用 AVR 组装,我喜欢它。它有趣、干净且易于学习。我对 ARM 或 PowerPC 不太了解,但我猜想,任何东西都比 x86 更好:)
      • 为 wuub +1。第一次尝试使用 RISC 真的很棒,您可以尝试 MIPS,并使用 SPIM 进行模拟。
      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2013-05-30
      • 1970-01-01
      相关资源
      最近更新 更多