2009-07-06 46 views
3

我正在編寫F#編譯器Tiger,我終於達到了無法推遲目標體系結構決策的程度。Tiger編譯器的目標體系結構

這是我的第一個編譯器,但它肯定不會是我的最後一個。那麼......對於第一個編譯器來說,什麼是好的 目標體系結構?

我曾考慮過針對CIL(.NET),但the book 中的中間代碼似乎更適合註冊機器。

我也想知道我完成這個編譯器後應該去哪裏。我應該嘗試 針對另一種架構嗎?我應該關注編譯器的另一部分嗎?爲什麼?

+0

我決定爲x86寫一個後端,也許以後再寫一個MIPS。無論如何,我可能會再次編寫整個編譯器。 – 2009-07-13 21:23:51

回答

3

對於純粹的個人滿意度,無法替代針對您擁有的硬件,並在裸機上運行您的編譯代碼。不過,也有合理的替代方案:

  • 的MIPS是一個非常乾淨的指令集和像SPIM模擬器都一應俱全。你的編譯器很簡單,你的調試經驗相對比較開心。

  • 根據您編寫編譯器的原因,您可能很高興針對編譯器目標語言如LLVMC--。但爲什麼其他人可以盡情地寫你的後端?

  • 如果您有英特爾或AMD硬件,我強烈建議使用帶有SSE擴展的64位指令集。你將有兩倍的寄存器來玩,並且你的浮點代碼(如果有的話)將是理智的。

1

如果您使用F#寫的編譯器,發射CIL肯定聽起來是個不錯的決定,因爲你將能夠使用的CodeDOM等的所有內置功能

或者你可以設計你自己的輸出格式,並編寫一個運行在.NET內部的虛擬機,如果這樣會使輸出變得更容易(由於是更合適的體系結構)。它可能更容易調試 - 儘管當然它的確意味着編寫虛擬機:)

1

您是否考慮過針對x86彙編? 幾年前,我自己做了一個Tiger編譯器,而程序集發佈者雖然很難寫,但卻是整個項目中最有價值的東西之一。用C編寫自己的小型虛擬機也是一個好的(如果不是更好的)想法。

如果您正在創建一種生產語言,但是從練習中移除了許多學習可能性,那麼以現有VM爲目標是務實的。

如果我是你,我會仔細看看項目後期的不同優化技術。

+0

我確實已經考慮過x86彙編和編寫虛擬機。我只是想知道RISC架構是否可能會更好。有什麼想法嗎? – 2009-07-06 13:25:31

相關問題