2011-05-16 30 views
9

來自Microsoft的Lisa Feigenbaum會談here關於「編譯器即服務」。我讀過這會讓構建重構工具變得更容易。怎麼樣? Mono's CAAS是偉大的,但如果微軟的版本是類似的,我不明白這個具體的用例是如何完成的。編譯器即服務:如何構建重構工具?

+1

MSFT是一個股票代碼。 – 2011-05-16 16:35:39

回答

6

「編譯器即服務」是指打破編譯成各個片。

而是有一個大的整體黑箱的源代碼進入一端,編譯組件出來的另,你會得到很多有類型的輸出較小(黑色)框。

所以,你可以,例如,節目源代碼放入一個盒子,並得到一個抽象語法樹(AST)出。然後可以在輸入到優化器之前操縱該樹,然後再將代碼的某些其他表示形式提供給編譯器,然後編譯器輸出可執行代碼。

因爲我不知道很多關於針對「編譯器即服務」未來.NET的一部分確切的計劃,以上只是胡亂猜測,但是這就是我看到的可能性。

然後重構可以在AST上運行,我會假設有一種方法可以從AST返回原始源代碼,無論是通過映射還是轉換(映射意味着您可以在AST中獲取節點並詢問「該節點對應的源代碼的哪一部分」,並且轉換意味着「請你給我這個AST現在代表的源代碼,在我修改它之後」。)

例如,我會看到JetBrains和DevExpress都爲微軟製作重構工具,他們不得不評估自己的努力,編寫代碼讀取和挑選重構代碼,而不是使用CAAS提供的代碼。

+0

謝謝@Martinho,我知道有一個術語我不記得在那裏:) – 2011-05-16 16:52:50

1

我公司(語義設計)提供了一個「編譯器即服務」:在DMS Software Reengineering Toolkit

DMS是通用相對於計算機(任何正式的)語言。給定一個語言描述(DMS對於C++,C#,Java,PHP,COBOL和許多其他語言都具有強大的版本),DMS可以將源解析爲AST,並從AST中重新生成有效源,包括原始註釋。

DMS提供各種分析器引擎,包括可配置的屬性評估,流程分析,迭代求解器,使用定義分析,本地和全局調用圖構造以及全局點到分析。 AST可能會被程序代碼(經典編譯器樹黑客攻擊)或源到源轉換修改。這些轉換可以將AST以一種語言映射到相同的語言(「優化」)或其他語言(「優化/翻譯」)。這是非常成熟的基礎設施,擁有超過15年的連續工程。

您可以通過選擇/定義所需的輸入/輸出語言集合,並使用面向編譯器的DSL編寫自定義代碼(由DMS進行編譯以製作您想要的工具!)來調用DMS機器的各個位那完成你的目的。

DMS已經用於構建語言遷移工具(見B-2 Stealth Bomber mission software migration),大型C++ 重新 -architecting工具,代碼生成工具運行的汽車工廠組裝電池,和許多經典的軟件工程工具(測試覆蓋率,剖析,克隆檢測,智能差異)。這是重構工具的自然基礎;我們正在研究這些: - }

+0

既然你自己_italicized_,我不禁要問:什麼是過時的工程?在經過的時間? – sehe 2011-09-06 16:27:03

+0

這句話很糟糕,但是,是15年的工程經驗。我將這個詞改爲「連續」 – 2011-09-06 16:53:06

4

Roslyn CTP包含一個用於構建「Code Action」的walkthrough,這是我們的術語,它可以是「快速修復」,如果它與代碼錯誤或者如果上下文提供了重構。

如果您安裝了Roslyn CTP,還可以查看您將在Visual Studio中看到的CodeRefactoring項目模板。