BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 谢丽 关注 11 他的粉丝 发布于 2015年4月14日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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上标记问题的理想方法,将提交映射到不同产品版本的方法等等。


感谢徐川对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT