Roslyn開源第一年:試煉與凱旋
Roslyn 是微軟創建的一個 .NET 編譯器平臺,提供了開源 C# 和 Visual Basic 編譯器及豐富的代碼分析 API,旨在使開發人員可以使用 Visual Studio 所使用的 API 構建代碼分析工具。該項目于 2014 年 4 月 3 日開源。近日,在其一周歲生日來臨之際,VB 項目團隊經理 Kasey Uhlenhuth 撰文回顧了 Roslyn 的開源之路。
據 Uhlenhuth 介紹,早在 2009 年重新設計 C# 和 VB 編譯器的時候,他們就考慮到了開源。但直到 2014 年,在看到F#,、ASP.NET、TypeScript 開源取得成功后,他們才真正邁出了這一步。
開源之后,他們獲得了許多來自社區的支持和幫助。社區反饋在C# 6.0 的一些設計決策中發揮了重要的作用。比如,主構造函數、null 條件操作符語法和字符串插值均受到了社區反饋的影響。而且,社區還推動了許多與 Roslyn 相關的項目:
- C# Pad 是一個交互式 Shell,允許在瀏覽器中執行C#;
- CodeConnect.io 可以實現設計時調用堆棧可視化,包括重構和搜索特性;
- DuoCode 可以將C# 6.0 交叉編譯為 JavaScript 代碼;
- LINQPad.CodeAnalysis 是一個庫,可以增強 LINQPad 的功能,使它更容易與 Roslyn 搭配使用;
- Mono/Roslyn 是 .NET Framework 的跨平臺開源實現;
- OzCode v2.0使用 Roslyn 提供令人愉快的調試體驗;
- Scrawl 是一個面向現代 Web 開發人員的輕量級編輯器;
- scriptcs 是一個開源項目,允許開發人員將 C# 當作腳本語言使用,并提供一個命令行C# REPL;
- Try Roslyn 演示了 Roslyn 的用法及如何重現一個編譯 Bug;
- WebEssentials Markdown 編輯器也基于 Roslyn。 </ul>
期間,他們還采取了一項重大舉措,就是將 Roslyn 源代碼從 CodePlex 遷移到 GitHub。 這不只是代碼位置的變化,更重要的是開源模型和工作流程的變化。在遷移之前,他們采用的是一種“有限開源”模型。也就是說,問題跟蹤和代碼審核系統都是內 部的,社區貢獻的代碼需要他們手動復制粘貼然后合并,而無法直接合并。在遷移之后,他們采用了“完全開源”模型,使用 GitHub 的問題跟蹤和代碼審核系統,通過 pull 請求提交代碼,并制定了代碼貢獻流程。這一舉措增加了社區的透明度,僅用三分之一的時間就幾乎實現了社區參與度的成倍增長:
Roslyn 的用戶數也穩步增加,下圖是 pull 請求數和問題記錄數的增長趨勢:
另外,Uhlenhuth 還提供了一些有關項目團隊響應率的統計,旨在表明,與開發全新功能相比,他們優先接受代碼,如下圖所示:
從 1 月份到現在,他們又開源了 Scripting、“表達式求值器 Expression Evaluators”、Visual Studio 語言服務等平臺組件。現在,他們正在簡化 F5 構建。將來,他們還有許多細節工作要做,比如,將一些歷史問題從 CodePlex 遷移到 GitHub,找出一種在 GitHub 上標記問題的理想方法,將提交映射到不同產品版本的方法等等。