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。
期间,他们还采取了一项重大举措,就是将 Roslyn 源代码从 CodePlex 迁移到 GitHub。 这不只是代码位置的变化,更重要的是开源模型和工作流程的变化。在迁移之前,他们采用的是一种“有限开源”模型。也就是说,问题跟踪和代码审核系统都是内 部的,社区贡献的代码需要他们手动复制粘贴然后合并,而无法直接合并。在迁移之后,他们采用了“完全开源”模型,使用 GitHub 的问题跟踪和代码审核系统,通过 pull 请求提交代码,并制定了代码贡献流程。这一举措增加了社区的透明度,仅用三分之一的时间就几乎实现了社区参与度的成倍增长:
Roslyn 的用户数也稳步增加,下图是 pull 请求数和问题记录数的增长趋势:
另外,Uhlenhuth 还提供了一些有关项目团队响应率的统计,旨在表明,与开发全新功能相比,他们优先接受代码,如下图所示:
从 1 月份到现在,他们又开源了 Scripting、“表达式求值器 Expression Evaluators”、Visual Studio 语言服务等平台组件。现在,他们正在简化 F5 构建。将来,他们还有许多细节工作要做,比如,将一些历史问题从 CodePlex 迁移到 GitHub,找出一种在 GitHub 上标记问题的理想方法,将提交映射到不同产品版本的方法等等。