[八卦] Phoenix Compiler Infrastructure或許那個有望開源?
好在還是有好幾位同事去了。「Hallway session」萬歲!
於是聽到一個讓我很感興趣的、跟LLVM沒關係的小道消息:微軟研究院(MSR)或許有機會未來會把他們以前做的Phoenix Compiler Infrastructure給開源了。簡直興奮啊!…雖然不是啥確定的消息。
完全沒聽說過Phoenix的同學,請看Andy Ayers大大以前做的一個演講:The Phoenix Compiler and Tools Framework
Phoenix是一個可以說定位跟LLVM頗為相似的編譯器及分析工具框架,主要工作在語言中立的中端/後端。它完全使用C++/CLI編寫,有native和CLI版binary,可分別供native C++與任意.NET語言調用。它有一套定義良好的IR以及操作該IR的API,IR有幾個不同的抽象層(HIR -> MIR -> LIR -> EIR),適用於編譯流程中的各階段,而不像LLVM的主IR主要只適合中端使用,到後端則是相當不同的MachineInstr IR。Phoenix自帶C/C++前端支持(可以讀取Visual C++的前端C1生成的CIL / CxxIL)、MSIL前端支持(支持讀取.NET Assembly),並且自帶一個功能完善的PDB Reader以及從x86機器碼提升到LIR的功能。
它最初的目標是作為一個編譯器框架(工具箱)要可以支持多種場景以及多種目標平台。例如說,基於它可以實現替代Visual C++編譯器後端的c2.dll;最初也計劃用它來替代CLR中的JIT64作為新的server JIT compiler…後來這部分目標被放棄了;同時還要可以支持對C/C++以及.NET程序的各種分析與優化,提供插件化API讓用戶可以輕鬆自定義編譯pipeline並插入自己的插件。
幾個實際使用Phoenix的微軟自家項目/產品:
- 替代原本Visual C++編譯器的c2的Phoenix-based c2.dll。用native C++編譯版binary的Phoenix。
- FxCop等Visual Studio裡帶有的代碼分析工具。用CLI編譯版binary的Phoenix。
- 跟Midori項目搭配的Bartok編譯器後端。Bartok是一個用純C#實現的MSIL-to-native AOT編譯器以及運行時,可自舉(是的,它帶有用C#實現的GC,也用Bartok來編譯自舉)。最初Bartok跟Singularity的早期版搭配時是完全純C#的,自己寫了編譯器的中端和後端。後來到Singularity的後期版本就接上了Phoenix作為後端,以期生成更高效的代碼。這個設計也被後來的Midori繼承了下來。
2008年6月,Phoenix發布了最後一個CTP SDK之後,就從外界的視野中銷聲匿跡了。然而當時參與了這個項目的大大們都很不甘心吧。當時它還在活躍開發中的時候是由MSR和VC產品組共同管理的;後來產品組不要管它了,它就變成MSR自己的項目了。作為一個MSR項目,或許開源的阻力會稍微小一點點吧…
拭目以待!
P.S. 一個八卦:當年Chris Lattner在MSR實習的時候還參與過Phoenix的研發。期間做過一個Phoenix-to-LLVM bridge,比較過兩個compiler infrastructure的特性。不知道那段經歷對LLVM的早期設計有多少影響呢?(或許Chris看了Phoenix之後對自己的作品更自豪了哈哈哈…)
推薦閱讀:
※xmake 源碼架構剖析
※庖丁解牛迭代器,聊聊那些藏在幕後的秘密
※c++類的某個成員的析構函數是刪除的,會導致類合成的默認構造函數也是刪除的?
※編譯器簡介: 在 Siri 前時代如何與計算機對話
TAG:编译器 |