.NET生态系统概览

ASP.NET | 置顶 加精
1969 0
369 2020-10-09
我是一只小可爱
2002 年,.NET 发布。在接下来的 12年多时间里,.NET 开发社区以看似稳定的速度增长。2010年以后,情况开始迅速变化。微软预见到了生态系统的变化,采纳了开源开发理念,甚至收购了 GitHub。出现这样的变化,说明 .NET Framework 开发人员已经准备好迎接刚刚开始的加速发展。微软后来收购了全球领先的软件开发平台 GitHub,而 .NET Framework 开发人员也做好了迎接加速发展的准备。 2014 年 11 月,.NET Core 诞生。对于.NET 生态系统来说,这预示着一个革命性的开源新时代的到来,但这并非一帆风顺。困惑和沮丧随之而来;开发人员还没有准备好迎接如此巨大的变化。 img[/filehub/2020/10/09/b12f7651-99f6-4298-aa49-db6444c1e625.jpg] .NET Standard 开发人员必须了解 .NET Standard,但是多年以后,.NET Standard 仍然让那些不知道如何使用它的人感到困惑——他们将它误认为运行时,而它实际上只是一个规范。作为一个目标框架别名(TFM),开发人员可以编写面向 .NET Standard 的类库,并使生成的包可以供 .NET Core 或 .NET Framework 应用程序使用。考虑下多平台。借助编译器指令,包的作者可以编写条件代码,以 .NET Core 或 .NET Framework 为编译目标。这种标准化可以提供多种满足标准的实现。使用 .NET Standard,版本可以与 .NET Core 和 .NET Framework 实现保持一致。 [pre] .NET Standard 是一个规范。它代表所有.NET 平台都必须实现的一组 API。 ——Immo Landwerth [/pre] .NET是跨平台的开发栈。它有一个标准库,称为.NET Standard Library,其中包含了大量的APIs。这个标准库由各种.NET运行环境实现:.NET Framework、.NET Core和Xamarin-flavored Mono。 .NET Framework就是现有的开发人员一直使用的.NET Framework。它实现了.NET Standard Library,就是说任何仅依赖于.NET Standard Library的代码都可以在.NET Framework上运行。它包含了其他Windows专用的APIs,比如说用于Windows桌面开发的APIs如Windows Forms和WPF。.NET Framework针对构建Windows桌面应用程序进行了优化。 .NET Core是针对服务器工作负载优化的新的跨平台运行环境。它实现了.NET Standard Library,就是说任何使用.NET Standard Library的代码都可以在.NET Core上运行。该运行环境适合新的Web开发栈ASP.NET Core使用。它是现代的、高效的并为处理大规模的服务器和云工作负载设计的。 Xamarin-flavored Mono是Xamarin应用程序的运行环境。它实现了.NET Standard Library,就是说任何仅依赖于.NET Standard Library的代码都可以在Xamarin应用程序上运行。它包含了其他iOS、Android、Xamarin.Forms和Xamarin.Mac使用的APIs。它针对在iOS和Android上构建移动应用程序进行了优化。 多亏有.NET Standard,特别是在.NET Standard 2.0中交付的APIs,开发人员不需要太多地考虑哪个运行环境来运行他们的应用程序。跟上.NET的人可能有兴趣了解我们为某些特定用例优化的运行环境(例如说,为移动应用和游戏优化的Mono),但是在极大多数程度上,开发人员只需要知道,无论他们有什么需求,我们都已经为他们满足了。 当谈论到选择运行环境的问题,选择方式应该是这样的: [pre] .NET Framework是以Windows为中心的框架,为Windows开发人员提供最好的服务。如果你正在搭建Windows为中心的应用程序,请你选择它。 .NET Core是云优化引擎,它是跨平台的。它使用相同的高性能JIT编译器,但在所有支持的操作系统(Windows、Linux、macOS)上运行代码。它没有特定的Windows APIs,因为这有悖于跨平台的目标。 Mono是用于移动应用和Apple平台(Android、iOS、watchOS、tvOS)的运行环境,用于游戏控制器和Unix桌面应用程序。 [/pre] 统一 .NET Core 和 .NET Framework [hr] 在 2019 年微软 Build 大会上,他们宣布了 .NET 5,统一了 .NET Core 和 .NET Framework. [pre] 以后将只有一个 .NET,你可以使用它开发面向 Windows、Linux、macOS、iOS、Android、 tvOS、watchOS、WebAssembly 等平台的应用。 ——Richard Lander [/pre] img[/filehub/2020/10/09/916e46ff-d927-4dad-996d-2898c7f98a92.jpg] 是的,没错,但值得再重复一遍,.NET 5 的目标是统一 .NET Framework 和 .NET Core。要使这一公告成为现实还有许多工作要做。将在2020年11月发布正式版,目前已经发布了RC1。这将给开发人员社区带来极大的帮助,因为它让事情变得简单! 微软还利用了 Mono 运行时和 .NET Core 的成果。乍一看可能有点吓人(再强调一遍,作为开发人员,我们需要拥抱变化而不是害怕它),但是请放心,为实现 .NET 5 所做的所有工作都是以 .NET Core 和 Mono 的成功经验为基础。.NET 的统一在真正意义上终结了过去多年来困扰开发人员社区的.NET 生态系统分裂的问题。目前还不清楚 .NET Standard 是否会继续存在。 未来展望 虽然我们很容易沉溺于过去,对过去的担忧和挫折牢骚满腹,但我们必须前进。也许,最合理的方法之一就是统一 .NET Core 和 .NET Framework……我敢说:“让 .NET 再次变得伟大!”也许我的说法太过了,但我们还是讨论一下未来吧。微软将把我们引向何方? 让我们先退一步,讨论一下我们从哪里来,然后再深入讨论我们要到哪里去。并不是所有的.NET 开发人员都知道他们的代码是如何编译的以及最终生成了什么。 [pre] 从一开始.NET 就是基于即时(JIT)编译器将中间语言(IL)翻译成最优的机器码。 ——Richard Lander [/pre] 回顾我之前提到的 Mono 项目,我们知道,在.NET 预编译(AOT)方面已经做了大量的工作。Mono 已经实现了业界领先的 LLVM 编译器基础设施。 [pre] Mono AOT 编译器可以将.NET 代码编译成一个可以在机器上运行的本地可执行代码,就像 C++ 代码一样。 ——Richard Lander [/pre] 重要的是要认识到,在 .NET Core 3.0 之后,不会再移植任何 .NET Framework 特性。再说一次,.NET 5 预计在 2020 年 11 月推出,它会很快就会到来。你可以问下自己,“在此期间我们应该做些什么?”我们下次再讨论这个问题。 以性能为中心的创新 微软官方建议您使用 .NET Core 开发新应用程序。如果可能的话,考虑将现有的 .NET Framework 应用程序移植到 .NET Core 也是一个好主意。 [pre] 新应用程序应该基于 .NET Core 构建。未来针对 .NET 的投入都将投入到 .NET Core 上。 ——Scott Hunter [/pre] 在.NET 生态系统中,.NET Core 一直处于创新的中心。它是一种可以替代 .NET Framework 的运行时,从头开始进行了完全重写;这使得针对性能的积极创新成为可能。.NET Core 和 ASP . NET Core 的每次迭代都会在保证一致性的情况下进行改进。“减少分配”是一个非常常见的主题,为的是提升性能。一个新的行业术语诞生了: [pre] Allocaty(形容词:al·lo·caty)——进行不必要分配的代码。 ——David Fowler [/pre] CoreCLR 和 CoreFX 的 GitHub 存储库不断收到大量的拉取请求,都是聚焦于通过减少分配来提高性能。这些努力直接导致了 ASP . NET Core 的诞生。根据 Tech Empower 的基准测试,.NET Core 已经成为世界上速度最快的 Web 服务器之一。见证这些进步令人难以置信,但它们源于大量时间和精力的付出以及社区的参与。微软是在开放的环境下发展的,这使得开源开发者社区能够为这些创新做出贡献。性能改进不局限于减少分配;通过利用硬件的固有特性,甚至可以获得更底层的收益。 不断发展的 C# 不用说,我是 C#语言的超级粉丝,而 .Net Core 是用 C#构建的并且以性能为中心。所以,我想在这里稍微讨论一下,这可能有点出乎意料。 [pre] 作为 .Net Core 的一个主题,只要有可能,以性能为重心的新功能不仅应该公开给公众使用,而且应该在内部使用。 ——Stephen Toub [/pre] C# 7 及其后续的单点版本,以及现在的 C# 9,都触及到了社区采用的容忍界限。我非常信赖语言的进化。我支持这样做,但与此同时,我同情那些因为业务限制而无法采用新版本的开发人员。我能理解这样的担忧;您要问下自己——“价值定位是什么?”某些新特性以性能为中心,您可以根据自己的需要考虑这些特性。 在 Twitter 上的一个帖子中,Nick Craver 说:“ C# 8 对我来说已经死了,”这句话大致的意思是“ StackExchange 要很多年才能升级到 C# 8。”这部分是因为某些 C#特性依赖于公共语言运行时 CLR 的更新。一个例子是“默认接口成员”特性,它目前依赖于 .NET Core 3.0。绝大多数其他特性只依赖于 C#编译器,这就完美了。 C# 添加了很多灵感来源于函数式编程的功能,这让写代码变得更加愉悦。F#仍然是奇妙的函数式语言,它为C#很多功能激发了灵感,但似乎很难跻身主流语言行列。 .NET正在努力成长为跨平台开发的强劲选择,但在保持相对性和增长方面仍然面临着挑战。虽然C#开发人员非常紧缺,但在学校、bootcamps和code academies中教C#的比例与Node和JavaScript相比少了太多。虽然.NET生态系统很强大且在不断增长,但它还是非常依赖于Microsoft。很少有大的公司为其OSS项目做出贡献。 .NET 基金会 .NET 基金会是一个独立的组织,旨在促进围绕.NET 生态系统的开放开发和协作。它为社区和商业开发人员提供了一个论坛,旨在通过促进开放性和社区参与来鼓励创新,从而拓宽和强化 .NET 生态系统的未来。 .NET 走向开源,采用MIT许可协议开源。微软为了推动.NET开源社区的发展,2014年联合社区成立了.NET基金会。2019年3月份 .NET 基金会完成第一次全面改选,2014年 .NET基金会的创始成员中有六位创始人,均非微软公司员工,随着微软的收购Xamarin,Miguel 也成了微软员工,Miguel 一直在努力让.NET基金会独立于微软。 .NET基金会是一个独立的组织,支持.NET社区和开源,旨在拓宽和加强.NET生态系统和社区。这可以通过多种方式完成,包括项目指导,指导,法律和营销帮助,技术和财务支持设置等. 2014年以来已经有众多知名公司加入.NET基金会, 仅在平台项目中,.NET平台上有87%贡献者其实不在Microsoft工作。在.net conf 2019 AWS加入了支持.NET Foundation的.NET开源生态系统中越来越多的行业领导者,这些成员包括Microsoft,Google,Red Hat,JetBrains,Unity,三星,Pivotal,Insight和Telerik,AWS等公司。 一定要访问他们的网站并参与其中,或者成为其中的一员。作为成员,你就有资格在董事会投票——同样,你也有资格成为董事会年度选举的候选人。 .NET 生态应用创新 [hr] ARM 版本的 .NET Core,这是三星,微软和社区合作开发的产物,他们可以在树莓派,物联网等上使用.NET Core技术,三星在其基于 Linux 的 Tizen 操作系统中使用ARM版本的.NET Core,该操作系统正在驱动可穿戴设备和其他设备。华为的鲲鹏服务器上也可以使用ARM版本的.NET Core技术移植.NET应用程序 。 龙芯团队从2019年7 月份开始着手.NET Core的MIPS64支持研发,经过将近一年的研发,在2020年6月18日完成了里程碑性的工作,在github CoreCLR 仓库:https://github.com/gsvm/coreclr, 随后受到.NET社区的很大参与热情鼓舞之下,2020年7月7日,龙芯团队在github发布了 corefx:https://github.com/gsvm/corefx、core-setup :https://github.com/gsvm/core-setup。2020年7月9日,龙芯团队发布了 dotnet 运行时、aspnet core 运行时与 sdk 的 EA 版本,见 loongson-dotnet/releases。同时在龙芯开源社区上线了.NET主页:http://www.loongnix.org/index.php/Dotnet。 富有意义的发展之路 [hr] .NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展。有了开源和跨平台这两个关键优先事项,您就可以放心了。当我意识到 .NET Core 和 .NET Framework 是 .NET 生态系统的压力源,并导致了 .NET 5 的统一时,我个人感到振奋。虽然这几年颇痛苦,但它也使这样的创新成为可能。我建议您尝试移植到 .NET Core,并开始使用 .NET Core 进行任何新的开发;这就是未来。 .NET Standard 的方向已经明确,在.NET 5将完成统一,但在当前我们仍然建议使用它最大化代码重用。我希望,无论决定是什么,影响都不会太大。 [hr] 原文: a(https://mp.weixin.qq.com/s/pXO-CW3qAmKQws-al2Knrg)[https://mp.weixin.qq.com/s/pXO-CW3qAmKQws-al2Knrg]
回帖
  • 消灭零回复