.NET生态系统概览

本文要点

  • .NET 5 预计会在 2020 年发布,届时将统一所有.NET 平台。

  • 在进行特性开发时优先考虑性能。

  • C#语言的发展直接推动了开发者的采用。

  • 开源社区让.NET 生态系统变得更好。

2002 年,.NET 发布。在接下来的 12 年多时间里,.NET 开发社区以看似稳定的速度增长。然后,情况开始迅速变化。微软预见到了生态系统的变化,采纳了开源开发理念,甚至收购了 GitHub。出现这样的变化,说明 .NET Framework 开发人员已经准备好迎接刚刚开始的加速发展。微软后来收购了全球领先的软件开发平台 GitHub,而 .NET Framework 开发人员也做好了迎接加速发展的准备。

2014 年 11 月,.NET Core 诞生。对于.NET 生态系统来说,这预示着一个革命性的开源新时代的到来,但这并非一帆风顺。困惑和沮丧随之而来;开发人员还没有准备好迎接如此巨大的变化。为了消除这种困惑,睿智的.NET 团队产品经理 Immo Landwerth 开始着手创建一系列视频,解释 .NET Standard、.NET Core、.NET Framework 和新的.NET 生态系统的各种细节——通常是坐在温暖的火炉旁,手里拿着苏格兰威士忌。尽管这看起来很惬意,但我认为,如果一位微软的 PM 愿意坐在火炉旁解释一些事情,这是一个令人担忧的迹象。

.NET Standard

开发人员必须了解 .NET Standard,但是多年以后,.NET Standard 仍然让那些不知道如何使用它的人感到困惑——他们将它误认为运行时,而它实际上只是一个规范。作为一个目标框架别名(TFM),开发人员可以编写面向 .NET Standard 的类库,并使生成的包可以供 .NET Core 或 .NET Framework 应用程序使用。考虑下多平台。借助编译器指令,包的作者可以编写条件代码,以 .NET Core 或 .NET Framework 为编译目标。这种标准化可以提供多种满足标准的实现。使用 .NET Standard,版本可以与 .NET Core 和 .NET Framework 实现保持一致。

.NET Standard 是一个规范。它代表所有.NET 平台都必须实现的一组 API。
——Immo Landwerth

想象一下代码维护;感觉如何——一个有趣的概念,但并非没有一点焦虑。

统一 .NET Core 和 .NET Framework

Landwerth 做了一项了不起的工作,视频也非常有用,但现在微软又开始转向了。在 2019 年微软 Build 大会上,他们发布了 .NET 5,统一了 .NET Core 和 .NET Framework。

以后将只有一个 .NET,你可以使用它开发面向 Windows、Linux、macOS、iOS、Android、 tvOS、watchOS、WebAssembly 等平台的应用。

——Richard Lander

是的,没错,但值得再重复一遍,.NET 5 的目标是统一 .NET Framework 和 .NET Core。要使这一公告成为现实还有许多工作要做。2019 年是不可能实现的,所以期待 2020 年吧。这将给开发人员社区带来极大的帮助,因为它让事情变得简单!

微软还利用了 Mono 运行时和 .NET Core 的成果。乍一看可能有点吓人(再强调一遍,作为开发人员,我们需要拥抱变化而不是害怕它),但是请放心,为实现 .NET 5 所做的所有工作都是以 .NET Core 和 Mono 的成功经验为基础。.NET 的统一在真正意义上终结了过去多年来困扰开发人员社区的.NET 生态系统分裂的问题。目前还不清楚 .NET Standard 是否会继续存在。

未来展望

虽然我们很容易沉溺于过去,对过去的担忧和挫折牢骚满腹,但我们必须前进。也许,最合理的方法之一就是统一 .NET Core 和 .NET Framework……我敢说:“让 .NET 再次变得伟大!”也许我的说法太过了,但我们还是讨论一下未来吧。微软将把我们引向何方?

让我们先退一步,讨论一下我们从哪里来,然后再深入讨论我们要到哪里去。并不是所有的.NET 开发人员都知道他们的代码是如何编译的以及最终生成了什么。

从一开始.NET 就是基于即时(JIT)编译器将中间语言(IL)翻译成最优的机器码。

——Richard Lander

回顾我之前提到的 Mono 项目,我们知道,在.NET 预编译(AOT)方面已经做了大量的工作。Mono 已经实现了业界领先的 LLVM 编译器基础设施。

Mono AOT 编译器可以将.NET 代码编译成一个可以在机器上运行的本地可执行代码,就像 C++ 代码一样。
——Richard Lander

重要的是要认识到,在 .NET 3.0 之后,不会再移植任何 .NET Framework 特性。再说一次,.NET 5 预计在 2020 年 11 月推出,所以时间是一个重要的因素。虽然这看起来可能是很长一段时间以后的事,但它会很快就会到来。你可以问下自己,“在此期间我们应该做些什么?”我们下次再讨论这个问题。

以性能为中心的创新

微软官方建议您在此期间开始使用 .NET Core 开发新应用程序。如果可能的话,考虑将现有的 .NET Framework 应用程序移植到 .NET Core 也是一个好主意。

新应用程序应该基于 .NET Core 构建。未来针对 .NET 的投入都将投入到 .NET Core 上。
——Scott Hunter

在.NET 生态系统中,.NET Core 一直处于创新的中心。它是一种可以替代 .NET Framework 的运行时,从头开始进行了完全重写;这使得针对性能的积极创新成为可能。.NET Core 和 ASP . NET Core 的每次迭代都会在保证一致性的情况下进行改进。“减少分配”是一个非常常见的主题,为的是提升性能。一个新的行业术语诞生了:

Allocaty(形容词:al·lo·caty)——进行不必要分配的代码。
——David Fowler

CoreCLR 和 CoreFX 的 GitHub 存储库不断收到大量的拉取请求,都是聚焦于通过减少分配来提高性能。这些努力直接导致了 ASP . NET Core 的诞生。根据 Tech Empower 的基准测试,.NET Core 已经成为世界上速度最快的 Web 服务器之一。见证这些进步令人难以置信,但它们源于大量时间和精力的付出以及社区的参与。微软是在开放的环境下发展的,这使得开源开发者社区能够为这些创新做出贡献。性能改进不局限于减少分配;通过利用硬件的固有特性,甚至可以获得更底层的收益。

不断发展的 C#

不用说,我是 C#语言的超级粉丝,而 .Net Core 是用 C#构建的并且以性能为中心。所以,我想在这里稍微讨论一下,这可能有点出乎意料。

作为 .Net Core 的一个主题,只要有可能,以性能为重心的新功能不仅应该公开给公众使用,而且应该在内部使用。
——Stephen Toub

C# 7 及其后续的单点版本,以及现在的 C# 8,都触及到了社区采用的容忍界限。我非常信赖语言的进化。我支持这样做,但与此同时,我同情那些因为业务限制而无法采用新版本的开发人员。我能理解这样的担忧;您要问下自己——“价值定位是什么?”某些新特性以性能为中心,您可以根据自己的需要考虑这些特性。

在最近 Twitter 上的一个帖子中,Nick Craver 说:“ C# 8 对我来说已经死了,”这句话大致的意思是“StackExchange 要很多年才能升级到 C# 8。”这部分是因为某些 C#特性依赖于公共语言运行时 CLR 的更新。一个例子是“默认接口成员”特性,它目前依赖于 .NET Core 3.0。绝大多数其他特性只依赖于 C#编译器,这就完美了。

.NET 基金会

鉴于 .NET 术语在 Web 上满天飞,再多告诉您一个也无妨了。

.NET 基金会是一个独立的组织,旨在促进围绕.NET 生态系统的开放开发和协作。它为社区和商业开发人员提供了一个论坛,旨在通过促进开放性和社区参与来鼓励创新,从而拓宽和强化 .NET 生态系统的未来。

一定要访问他们的网站并参与其中,或者成为其中的一员。作为成员,你就有资格在董事会投票——同样,你也有资格成为董事会年度选举的候选人。我实际上是 2019 年董事会候选人之一。

我建议你订阅他们的时事通讯,以便可以了解最新消息。

富有意义的发展之路

.NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展。有了开源和跨平台这两个关键优先事项,您就可以放心了。当我意识到 .NET Core 和 .NET Framework 是 .NET 生态系统的压力源,并导致了 .NET 5 的统一时,我个人感到振奋。虽然这几年颇痛苦,但它也使这样的创新成为可能。我建议您尝试移植到 .NET Core,并开始使用 .NET Core 进行任何新的开发;这就是未来。尽管 .NET Standard 的方向尚且未知,但在有进一步的消息之前,我们仍然建议使用它。我希望,无论决定是什么,影响都不会太大。

关于作者

David Pine是微软的 MVP、谷歌开发专家和内容开发人员。David 喜欢与技术社区共享知识,并在国际会议、用户组和技术会议上发言。David 热衷于通过写作来分享他的想法,并在 davidpine.net 上积极地维护着一个博客。David 的文章已经发表在 ASP . NET、MSDN Web-Dev、MSDN .NET、Dot NET Curry 和 InfoQ 上。作为回报社区的另一种方式,David 喜欢为开源项目和 StackOverflow.com 做贡献。David 是技术委员会成员,并且是近四年来 Cream City Code 的主要组织者之一。工作之余,他会和他的妻子以及他们的三个儿子 Lyric、Londyn 和 Lennyx 呆在一起。您可以在推特上关注 David(@davidpine7)。

原文链接:https://www.infoq.cn/article/A6XZ1b5XSZgGHgOjExr6


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1848 [USACO12OPEN]Bookshelf G(线段树优化 DP)

P1848 [USACO12OPEN]Bookshelf G 有nnn间物品,每个物品有两个属性Wi,HiW_i, H_iWi​,Hi​,宽度跟高度,要求把这nnn件物品划分成若干连续的组,每组内∑Wi≤L\sum\limits W_i \leq L∑Wi​≤L,并且要求最小化每组最大高…

Java 实现 FTP 服务

1、FTP简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的…

L. Continuous Intervals(单调栈 + 线段树 + 思维)

L. Continuous Intervals 给定一个长度为nnn的数组,问里面有多少个区间[l,r][l, r][l,r],满足,对这个区间排序后,两两差值$ \leq 1$,输出区间个数。 如果说区间[l,r][l, r][l,r]是符合要求的,则满足max(a…

Azure Application Insights REST API使用教程

本文是Azure Application Insights REST API的简单介绍,并会包含一个通过Python消费API的示例/小工具。新加入的team中的一项工作是制作日常的运维报表,制作方式是手工前往portal.azure.com,在网页中多次执行不同的查询语句、导出excel&#…

用Java Socket实现SMTP邮件发送

目录: 1、邮件基础概念2、Java Mail API介绍3、收发邮件代码示例 PS:如果你想直接拿代码用,可以直接跳到第3部分。 ** 一、邮件基础概念 ** 1.1 邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件…

微软开源新字体Cascadia Code,源于Windows Terminal

微软开源了一套新的字体 Cascadia Code。Cascadia Code 是微软在 5 月份的 Build 大会上宣布推出的等宽字体,微软介绍它是与新的终端 Windows Terminal 一起开发的,官方建议将其与终端应用和 VS、VS Code 等文本编辑器一起使用。Cascadia Code 为命令行和…

C. Safe Distance(二分 + 并查集)

C. Safe Distance(二分 并查集) 给定一个XYX \times YXY的矩形,里面有n,(1≤n≤1000)n,(1 \leq n \leq 1000)n,(1≤n≤1000)个点,我们要从点(0,0)(0, 0)(0,0)走到(X,Y)(X, Y)(X,Y),我们要使过程中与这nnn个点的最小距…

进程间通讯的7种方式

1、常见的通信方式 管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘…

官宣!VS Code Python 全新功能在 PyCon China 全球首发!

北京时间 2019 年 9 月 21 日,PyCon China 2019 在上海举行。在下午的演讲中,来自微软开发工具事业部的资深研发工程师在演讲中,我们看到了 Azure Notebook 与 VS Code 对 Python 的强大的支持。然而,鱼和熊掌似乎不可兼得。Jupyt…

什么是CDN

一、cdn简介 CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。…

数列递推(牛客练习赛83)(数学、分块)

数列递推 给定f(0)f(0)f(0),定义fn∑i1nf(nmodi)f_n \sum\limits_{i 1} ^{n} f_{(n \mod i)}fn​i1∑n​f(nmodi)​,求f1,f2,f3,…,fn−1,fnf_1, f_2, f_3, \dots, f_{n - 1}, f_{n}f1​,f2​,f3​,…,fn−1​,fn​。 ∑i1nf(nmodi)∑i1nf(n−nii)\su…

DNS基础

域名注册完成后首先需要做域名解析,域名解析就是把域名指向网站所在服务器的IP,让人们通过注册的域名可以访问到网站。IP地址是网络上标识服务器的数字地址,为了方便记忆,使用域名来代替IP地址。域名解析就是域名到IP地址的转换过…

基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍

LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.文档地址: https://liningit.github.io/LnskyDB/开源地址: https://github.com/liningit/LnskyDBnuget地址: https://www.nuget.org/packages/LnskyDB…

CF1422F Boring Queries(ST表 + 主席树)

CF1422F Boring Queries 给定一个长度为nnn的数组a,(1≤ai≤2105)a,(1 \leq a_i \leq 2 \times 10 ^ 5)a,(1≤ai​≤2105),有mmm次询问,每次询问给定l,rl, rl,r,要我们求区间[l,r][l, r][l,r],aia_iai​的lcmlcmlcm,强…

高性能最终一致性框架Ray之基本概念原理

一、Actor介绍Actor是一种并发模型,是共享内存并发模型的替代方案。共享内存模型的缺点:共享内存模型使用各种各样的锁来解决状态竞争问题,性能低下且让编码变得复杂和容易出错。共享内存受限于单节点的服务器资源限制。Actor模型的优点&…

B.The Tortoise and the Hare 长春

B. The Tortoise and the Hare 给定一个长度为nnn的数组a,(1≤ai<m)a, (1 \leq a_i < m)a,(1≤ai​<m)&#xff0c;mmm是一个给定的数(1≤m≤109)(1 \leq m \leq 10 ^ 9)(1≤m≤109)&#xff0c;有QQQ次操作&#xff0c;分为两类&#xff1a; 给定u,v,(1≤u≤n,1≤v…

漫画:程序员带娃日常(1)

我是一名IT界资深人士做过乙方苦哈哈做过甲方做过项目、搞点管理做过培训、也上台演讲不过现在最大挑战、交期最长的项目是。。。带 娃娃子啊&#xff0c;爸爸也是第一次当爸爸&#xff0c;要请你多多指教啦&#xff01;1“小刘&#xff0c;把这个需求细化一下。”“兄弟们&…

L. Coordinate Paper(CCPC 长春)构造

L. Coordinate Paper 构造一个长度为nnn的序列aaa&#xff0c;满足ai≥0a_i \geq 0ai​≥0&#xff0c;∑i1nais\sum\limits_{i 1} ^{n} a_i si1∑n​ai​s&#xff0c;对于任意的i∈[1,n−1]i \in [1, n - 1]i∈[1,n−1]&#xff0c;都有ai−ai1korai1−ai1a_i - a_{i 1} …

servlet生命周期

1.servlet的生命周期 主要有三个方法&#xff1a; init()初始化阶段service()处理客户端请求阶段destroy()终止阶段 初始化阶段&#xff1a; Servlet容器加载Servlet&#xff0c;加载完成后&#xff0c;Servlet容器会创建一个Servlet实例并调用init()方法&#xff0c;init(…

表达式树练习实践:入门基础

什么是表达式树来自微软官方文档的定义&#xff1a;表达式树以树形数据结构表示代码。它能干什么呢&#xff1f;你可以对表达式树中的代码进行编辑和运算。这样能够动态修改可执行代码、在不同数据库中执行 LINQ 查询以及创建动态查询。好不好玩&#xff1f;表达式树还能用于动…