初探 Roslyn 編譯器平台 (1): 從認識到使用

//Build/ 2014 開發者大會上,有 「C# 之父」之稱的 Anders Hejlsberg 在 Keynote 上公佈並且現場開源了 Roslyn 編譯器平台專案。在現在的開發技術中,編譯器的技術不是只是用來把開發者撰寫的程式碼變成平台可以執行的東西而已,它還可以分析程式碼的語法(syntax)、語意(semantics)等等,除了幫助使用者更瞭解他自己寫了些什麼之外,還可以應用在 IDE(如:Visual Studio)的開發輔助技術,像是語法提示的 IntelliSense、產生合適的程式碼、移至定義(Go to Definition)、尋找所有參考(Find all references)等等功能,當然還有與其它函式庫繫結、產生平台可執行程式碼等功能。所以一個編譯器的 pipeline 可能長成這樣:

而 Roslyn 這個專案最主要有兩個任務:

  1. 提供一個開源的 .NET 編譯器,可以讓人瞭解這個編譯器黑盒子做了什麼事情,甚至是除了 Visual Studio 之外的 C#/VB.net 編譯器或開發工具(如:Mono project)都可以整合使用。
  2. 作為一個可以讓開發人員以 API 形式呼叫編譯器內某功能的編譯器平台

所以有了 Roslyn 這個編譯器平台之後,做為開發人員,你就可以透過 APIs 的方式來使用編譯器 pipeline 中的任何一個功能,而 Roslyn 提供的 APIs 如下圖所示:

在開發中使用 Roslyn 

如果您現在已經是使用 Visual Studio 2013 以及 C# 或 Visual Basic.NET 來開發應用程式,那你就可以直接安裝 Roslyn 的 Visual Studio 插件來使用 Roslyn 的功能(Visual Studio "14" CTP 已經內建在 IDE 中),您會看到很多功能原本在 Visual Studio IDE 就有,這裡只是要介紹 Roslyn 插件做的事情,未來如果有其它的 IDE 整合了 Roslyn 就能夠擁有這些能力。

這裡我們介紹的是 End User Preview 這個部份。安裝之後,你可以在 Visual Studio 中已安裝的插件看到 Roslyn Preview 這個套件:

接下來你可以隨意開一個 Visual C# 或 Visual Basic 的專案,比方說一個 Visual C# > Windows 桌面 > 主控台應用程式,當專案建好了之後,你就可以立刻看到安裝 Roslyn 的效果。

這是一個很簡單主控台應用程式,在最上面引用的命名空間部份是範本中帶出來的,您可以注意到這裡有黑色及灰色的區別,因為 Roslyn 可以分析程式碼,所以它會知道哪些命名空間在目前的程式碼中是不需要用到的,於是用灰階的方式呈現,而且也會自動浮出燈泡圖案來給予建議,上圖就是建議您可以把沒用到的命名空間從程式碼中移除掉。又或者是當已經引用了命名空間,程式碼不需要重覆加上這些命名空間,Roslyn 也會提供建議:

而除了一些主動提供的建議之外,也有一些程式碼建議是由開發人員所驅動,比方說上述的程式碼,當我選取計算圓形面積的程式碼,右鍵選 Refactor... 時,它也會建議我是不是要另外用變數存,或是拆成一個新的函式來做:

您可以在實際的開發專案中試試 Roslyn 會提供什麼建議。

接下來...

這一篇文章介紹了基於 Roslyn 做成的 Visual Studio plugin 所提供的功能,雖然原本 Visual Studio IDE 就已經有了相同或類似的功能,但 Roslyn 專案就是把這些功能開放出來,讓其它的 IDE 也可以實作這些功能,在下一篇文章我們將會來看,怎麼運用 Roslyn 作為一個平台,透過 API、函式庫來使用這些編譯、程式碼分析等相關功能。

參考資料