拥抱开源四年的 .NET,现在怎么样了?
作者 | Matt Warren译者 | 弯月责编 | 屠敏出品 |CSDN(ID:CSDNNews)大约在四年多以前,微软宣布他们将要开源 .NET 框架的大部分代码...


作者 | Matt Warren
译者 | 弯月
责编 | 屠敏
出品 | CSDN(ID:CSDNNews)
大约在四年多以前,微软宣布他们将要开源 .NET 框架的大部分代码(http://www.hanselman.com/blog/AnnouncingNET2015NETAsOpenSourceNETOnMacAndLinuxAndVisualStudioCommunity.aspx),而且与众多开发者分享了“.NET Core 和 ASP.NET Core 2.1 的新特性”(https://www.slideshare.net/jongalloway/net-core-previews-new-features-in-net-core-and-aspnet-core-21-blazor-and-more#8),社区对 .NET 框架做出了重要的贡献如下图所示:

注:本文仅是一系列文章中的一篇。如果你想知道 .NET 开源的发展经过,可参考:
三年后的开源 .NET:https://mattwarren.org/2017/12/19/Open-Source-.Net-3-years-later
两年后的开源 .NET:https://mattwarren.org/2016/11/23/open-source-net-2-years-later
一年后的开源.NET——现在ASP.NET也开源了:https://mattwarren.org/2016/01/15/open-source-net-1-year-later-now-with-aspnet
一年后的开源 .NET:https://mattwarren.org/2015/12/08/open-source-net-1-year-later

运行时的改变
在讨论具体数字之前,我想先花点时间看看这四年来发生过的重要的运行时的改变。部分原因是我很喜欢看 CoreCLR 的“内情”(http://mattwarren.org/tags/#Internals),但更重要的原因是,运行时是支持一切的最重要的代码,是一切的基础!
先提供一些背景,下面这个幻灯片来自我称为“从‘dotnet run’到‘hello world’”的一次演讲(https://www.updateconference.net/en/session/from--dotnet-run--to--hello-world--)。翻翻这个幻灯片就能看到构成 CoreCLR 的代码的组件,以及它们的功能。

幻灯片地址:https://www.slideshare.net/mattwarren/from-dotnet-run-to-hello-world?ref=http://mattwarren.org/2018/12/04/Open-Source-.Net-4-years-later
在挖掘了 19059 条评论、5790 个问题和 8 个项目之后,下面是过去几年 .NET Core Runtime (CoreCLR)中的重要改变的列表(如果我漏掉了什么欢迎你在留言区分享!):
- 
   Span<T> (more info) Span<T> (‘umbrella’ issue for the whole feature):包括对运行时多个部分的改动,包括 VM, JIT 和 GC; Will .NET Core 2.1’s Span-based APIs be made available on the .NET Framework? If so, when? 还有一些 CoreFX 的改进,如 Add initial Span/Buffer-based APIs across corefx 和 String-like extension methods to ReadOnlySpan<char> Epic 和编译器改动,如 Compile time enforcement of safety for ref-like types。 
- 
   类似于 ref-like like 的类型(以支持 Span<T>) ‘Generalized ref-like types in source code.’ Detect ByRefLike types using attribute Interpretation of ByRefLikeAttribute in .NET Core 2.1 is a breaking change and a standard violation Search for ‘IsByRefLike’ in the CoreCLR source code 
- 
   分层编译 (more info) Tiered Compilation step 1, profiler changes for tiered compilation, Fix x86 steady state tiered compilation performance 参见更通用的 ‘Code Versioning’ design doc 和 Enable Tiered Compilation by default 
- 
   跨平台 (Unix, OS X等,完整列表见 ‘os-xxx’ labels) Support building mscorlib on UNIX systems Implement stack unwinding and exceptions for Linux Inital build support for FreeBSD 和 Complete FreeBSD bringup Initial Mac OSX Support (PR) 和 rest of the work!! Building and Running .NET’s CoreCLR on OS X 
- 
   新的 CPU 体系 ARM64 Project ARM32 Project 所有问题的列表 labelled ‘arch-xxx’ 
- 
   Hardware Intrinsics (project) Design Document Using .NET Hardware Intrinsics API to accelerate machine learning scenarios 包含对于实现的非常好的介绍 
- 
   默认接口方法 (project) 对于C#语言特性的 default interface methods 的运行时支持 
- 
   性能监视和诊断 (project) Cross-Platform Performance Monitoring Design 和 NET Cross-Plat Performance and Eventing Design Enable Lttng Logging for CoreClr Bringing .NET application performance analysis to Linux 
- 
   可立即运行的镜像 ReadyToRun Overview Bing.com runs on .NET Core 2.1! (‘ReadyToRun Images’一节) 
- 
   LocalGC (project) 参见 Zero Garbage Collector for .NET Core 和续篇 Zero Garbage Collector for .NET Core 2.1 and ASP.NET Core 2.1 
- 
   Unloadability (project) 支持卸载 AssemblyLoadContext 和其中加载的所有 assemblies 
所以在开源之后,运行时有了许多巨大且基础的改变。

代码仓库活跃度
说到数据,首先我们来看看每个代码仓库的活跃程度。方法是分析(创建的)“Issues”或(关闭的)“Pull Requests”每月的数量(折线图真好用!)如果想知道我是怎样拿到的数据,请参见上一篇文章(http://mattwarren.org/2016/11/23/open-source-net-2-years-later#methodology---community-v-microsoft),因为处理方式都是一样的。
注意:黑色的数字来自最近的一个月,而红点表示历史最低,绿点表示历史最高。可以点击 Issues 和 Pull Requests 按钮切换数据,鼠标悬停在这线上可以看到每月的数值,点击项目名可以访问项目的 GitHub主页。


这个数据很好地指示了各个代码仓库的健康程度,是持续增长还是停滞不前。还可以看到每个代码库的不同活跃程度,以及与其他代码仓库的比较。
虽然很显然 Visual Studio Code 比其他任何仓库都要活跃(从问题数量角度来看),但很有意思的是一些仅用于 .NET 的项目也很活跃,比如 CoreFX(基类的库),Roslyn(编译器)和 CoreCLR(运行时)。

整体参与度 - 社区 vs. 微软
接下来我们看看过去四年(从 2014 年 11 月到 2018 年 11 月)的总参与度。所有拉取请求和问题都同等对待,因此大型的拉取请求和修改拼写错误的拉取请求是一样的。尽管这种方法并不理想,但却是最简单的了解社区和微软分工的办法。此外,社区包括其他公司带薪为 .NET 项目工作的人,比如三星的工程师们(https://github.com/dotnet/coreclr/search?q=Samsung.com&unscoped_q=Samsung.com&type=Commits)。
注意:你可以鼠标悬停在各个条上看到实际的数字,而不仅仅是百分比。



按时间分布的参与度 - 社区 vs. 微软
最后我们可以看看过去四年(即2014年11月到2018年11月)每个月的参与度数据。
注意:下拉菜单可以选择不同的代码仓库,但注意图的Y轴会重新分配比例,所以每个代码库的最大值是不一样的。


总结
很显然,社区一直在为 .NET 相关的开源代码库做贡献,而且在相当长的时间内做出了重要贡献。这对于所有 .NET 开发者都是好事,不管你是否为开源做过贡献。.NET 成为开源是一件皆大欢喜的好事!
原文:http://mattwarren.org/2018/12/04/Open-Source-.Net-4-years-later
作者:Matt Warren,.NET(#C)开发者,微软 MVP,喜欢测量、寻找并改正性能问题。是 BenchmarkDotNet 和其他项目的贡献者之一。
本文为 CSDN 翻译,如需转载,请注明来源出处。
CSDN 开源开发者交流群
立即扫小编的微信二维码加入吧!
加好友时请备注#开源+公司+职位#
如无备注,不会通过哦

热 文 推 荐
☞ 中兴倒逼芯片、华为5G突围、币圈哀鸿遍野 | 2018 年科技大事记
☞ PYPL 1 月 IDE 榜单:Visual Studio Code 猛追 IntelliJ
☞ 1年丢失140亿!你是区块链的受害者吗?|年度安全事件回顾
☞ 华为 36 岁工程师猝死,曾 22 月无休:比挣钱更重要的是活着
☞ Google AI骗过了Google,工程师竟无计可施?
print_r('点个好看吧!');
  var_dump('点个好看吧!');
  NSLog(@"点个好看吧!");
  System.out.println("点个好看吧!");
  console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
  cout << "点个好看吧!" << endl;
  Console.WriteLine("点个好看吧!");
  fmt.Println("点个好看吧!");
  Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"
 点击“阅读原文”,打开 CSDN App 阅读更贴心!
点击“阅读原文”,打开 CSDN App 阅读更贴心!
 喜欢就点击“好看”吧!
 喜欢就点击“好看”吧!
更多推荐
 
 



所有评论(0)