我目前正在參與一些有趣的編程語言研究,到目前爲止,這些研究都圍繞着擴展即將推出的Java 7.0編譯器和一些非常強大的基於程序員生產力的功能。這項工作應該同樣適用於相關的編程語言,例如C#。擴展Mono C#編譯器:是否有任何文檔或先例?
我目前正在爲原型設計C#端口的功能提供選項。我更喜歡開放源代碼選項,以便可以將這項工作的成果與最廣泛的受衆共享。因此,Mono C#編譯器似乎是最明顯的出發點。我是一位經驗豐富的C#開發人員,因此編寫代碼不是問題。我主要關心的是如何以可維護和支持的方式擴展編譯器。在關於這個主題的單聲道常見問題解答(link)中,聲明「Mono已經被用作嘗試C#語言新思路的基礎(有三個或四個編譯器來自Mono的C#編譯器)」。不幸的是,除此之外沒有更多的指標,到目前爲止,谷歌搜索沒有任何改變。
我在想,如果有人有任何關於此的信息。有mcs
/gmcs
/dmcs
是否有標準的可擴展性模型?具體來說,我將在程序的抽象語法樹上執行一些有趣的轉換。是否有標準的機制將功能插入到抽象語法樹生成和類型檢查器之間的編譯器鏈中,然後生成代碼?
到目前爲止,我已經編寫了一些代碼的臨時擴展(主要在代碼生成器中),但這似乎不是一個可維護的解決方案,尤其是考慮到我打算讓我的擴展保持最新Mono的Git主幹儘可能多。此外,如果能夠對我的擴展進行更新,而不必在每次進行更改時都不必重新編譯整個編譯器,那就太好了。我希望能夠將我所有的AST操作封裝到一個單獨的.NET程序集中,該程序集可以通過mcs
/gmcs
/dmcs
動態加載,而無需直接對核心編譯器代碼進行破解。
任何有關擴展Mono C#編譯器的想法或指針都會非常感激!
最新通報(2010年10月23日)
爲響應答覆我的問題,我決定,我將開始以創建編譯器的簡單擴展模型對單的一個分支工作。這是在其早期階段,但在這裏它是在GitHub上:
http://github.com/rcook/mono-extensibility
和主要承諾是:http://github.com/rcook/mono-extensibility/commit/a0456c852e48f6822e6bdad7b4d12a357ade0d01
如果有人有興趣在這個項目上進行合作,請讓我知道!
或者,請查看[Boo](http://boo.codehaus.org/)。編譯器可擴展性是「包」的一部分。 – 2010-10-03 02:37:02