拥抱开源四年的 .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 "点个好看吧!"