查看原文
其他

拥抱开源四年的 .NET,现在怎么样了?

Matt Warren CSDN 2019-02-15

作者 | 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 开源开发者交流群

立即扫小编的微信二维码加入吧!

加好友时请备注#开源+公司+职位#

如无备注,不会通过哦

 热 文 推 荐 

☞ 微软自证开源决心:GitHub 私有库免费无限开放!

☞ 中兴倒逼芯片、华为5G突围、币圈哀鸿遍野 | 2018 年科技大事记

☞ PYPL 1 月 IDE 榜单:Visual Studio Code 猛追 IntelliJ

 1年丢失140亿!你是区块链的受害者吗?|年度安全事件回顾

 华为 36 岁工程师猝死,曾 22 月无休:比挣钱更重要的是活着

 细数阿里达摩院2019年的十个Flag

 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 阅读更贴心!

喜欢就点击“好看”吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存