Roslyn开源第一年:试炼与凯旋

2015-04-13 13:48


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。

期间,他们还采取了一项重大举措,就是将Roslyn源代码从CodePlex迁移到GitHub。这不只是代码位置的变化,更重要的是开源模型和工作流程的变化。在迁移之前,他们采用的是一种“有限开源”模型。也就是说,问题跟踪和代码审核系统都是内部的,社区贡献的代码需要他们手动复制粘贴然后合并,而无法直接合并。在迁移之后,他们采用了“完全开源”模型,使用GitHub的问题跟踪和代码审核系统,通过pull请求提交代码,并制定了代码贡献流程。这一举措增加了社区的透明度,仅用三分之一的时间就几乎实现了社区参与度的成倍增长:

Roslyn的用户数也稳步增加,下图是pull请求数和问题记录数的增长趋势:

另外,Uhlenhuth还提供了一些有关项目团队响应率的统计,旨在表明,与开发全新功能相比,他们优先接受代码,如下图所示:

从1月份到现在,他们又开源了Scripting“表达式求值器Expression Evaluators”Visual Studio 语言服务等平台组件。现在,他们正在简化F5构建。将来,他们还有许多细节工作要做,比如,将一些历史问题从CodePlex迁移到GitHub,找出一种在GitHub上标记问题的理想方法,将提交映射到不同产品版本的方法等等。