原文: Announcing .NET Standard 2.1
校对: Cloud

自从大约一年前发布 .NET Standard 2.0以来,我们已经向 .NET Core 2.1 发布了两个更新,并即将发布 .NET Core 2.2 。 现在是时候更新 Standard 了,包括一些新的概念以及一些小改进,使您在不同的 .NET 实现里编码生活更轻松。

继续阅读以了解有关此最新版本中新功能的更多信息,以及有关平台支持、治理和编码的信息。

NET Standard 2.1 有哪些新功能?

总的来说,计划在 .NET Standard 2.1 中添加大约 3000 个 API 。其中很大一部分是全新的,
而其他部分则是现有的API,添加到 Standard 中,以便进一步使 .NET 实现一致。

以下是其中的亮点:

  • Span

    。 在 .NET Core 2.1 中,我们添加了 Span,这是一种类似于数组的类型,允许以统一的方式表示托管和非托管内存,并支持切片而无需复制。它是 .NET Core 2.1 中与性能相关的大多数改进的核心。由于它允许以更有效的方式管理缓冲区,因此可以帮助减少内存分配和复制。我们认为Span 应该是一种非常基础的类型,因为它需要运行时和编译器支持才能充分利用。如果您想了解有关此类型的更多信息,请务必阅读 Stephen Toub 关于 Span 的优秀文章。

  • 使用 span 的基础 API。虽然 Span

    已经作为 .NET Standard 兼容的 NuGet 包(System.Memory)提供,但添加此包不能扩展 .NET Standard 类型的成员去使用 span。例如,.NET Core 2.1添加了许多允许使用 span 的API,如 Stream.Read(Span)。将 span 带入 .Net Standard 的话,添加这些 API 是很重要的一部分。

  • 反射 emit。为了提高生产力,.NET生态系统一直大量使用动态功能,如反射和反射 emit。 Emit 通常用作优化性能的工具,以及为代理接口动态生成类型的方法。因此,许多人要求反射 emit 包含在 .NET standard 中。之前,我们试图通过 NuGet 包提供这个,但我们发现无法使用包来模拟这样的核心技术。在 .NET Standard 2.1 中,您可以使用轻量级代码生成(LCG)以及反射 emit。当然,您可能运行在不支持通过解释运行 IL 或使用 JIT 编译它的运行时,因此我们还公开了两个新的功能 API,允许您检查生成代码的能力(RuntimeFeature.IsDynamicCodeSupported)以及是否解释或编译生成的代码(RuntimeFeature.IsDynamicCodeCompiled)。这将使编写可移植的库变得容易得多。

  • SIMD。.NET Framework 和 .NET Core 现在已经支持 SIMD 一段时间了。我们利用它们来加速BCL 中的基本操作,例如字符串的比较。我们收到了很多在 .NET Standard 中公开这些 API 的请求,因为这些功能需要运行时支持,因此无法作为 NuGet 包来提供。

  • ValueTask 和 ValueTask

    。.NET Core 2.1 最大的功能是改进了我们支持高性能场景的基础知识,其中还包括提高 async/await 效率。 ValueTask 已经存在,如果操作同步完成, 则允许返回结果,而无需分配新的 Task。在 .NET Core 2.1 中,我们进一步改进了这一点,这使得有一个相应的非泛型 ValueTask 变得很有用,它允许减少分配内存,即使是在必须异步完成操作的情况下也是如此,现在使用类似 Socket 和 NetworkStream 的功能。在 .NET Standard 2.1 中公开这些 API 会使库作者能够作为消费者和生产者从其中受益。

  • DbProviderFactories。在 .NET Standard 2.0 中,我们在 ADO.NET 中添加了几乎所有基元类型,以允许 ORM 和数据库实现者进行通信。不幸的是,DbProviderFactories 没有添加在其中,所以我们现在添加它。简而言之,DbProviderFactories 允许库和应用程序在编译时使用特定的ADO.NET 提供程序而不需要知道任何特定类型,方法是在基于名称的已注册 DbProviderFactory 实例中进行选择,例如,可以从配置设置中读取。

  • General Goodness. 自从 .NET Core 开源后,我们在基础类库中添加了许多小功能,例如System.HashCode 用于组合 hash code 或 System.String 上的新重载。.NET Core 中大约有800个新成员,几乎所有成员都加入了 .NET Standard 2.1。

有关更多详细信息,您可能需要查看 .NET Standard 2.1 和 2.0 之间的完整 API 差异。您还可以使用 apisof.net 快速检查 .NET Standard 2.1 中是否包含某些 API。

.NET 平台支持

如果您错过了我们的 .NET Core 3.0 和 .NET Framework 4.8 更新,其中已经描述了我们对 .NET Framework 和 .NET Core 的支持,如下所示:

  • .NET Framework 是 .NET 的实现,它安装在超过 10 亿台计算机上,因此需要保持尽可能的兼容。因此,它的更新速度要比 .NET Core 慢。即使安全性和小错误修复也会导致应用程序中断,因为应用程序依赖于先前的行为。我们将确保 .NET Framework 始终支持最新的网络协议、安全标准和Windows 功能。

  • .NET Core 是 .NET 的开源、跨平台和快速移动版本。由于它的 side-by-side 性质,它可以进行一些无法在 .NET Framework 上冒险进行的修改。这意味着 .NET Core 将随着时间的推移获得 .NET Framework 无法获得的新 API 和语言功能。在 Build 大会中,我们展示了 .NET Core 上文件 API 如何比之前更快。如果我们将这些相同的更改放入 .NET Framework ,我们可能会破坏现有的应用程序,我们不希望这样做。

鉴于 .NET Standard 2.1 中的许多 API 添加需要修改运行时才能有意义,.NET Framework 4.8将保留在 .NET Standard 2.0 上,而不是实现 .NET Standard 2.1 。.NET Core 3.0 以及即将推出的 Xamarin,Mono 和 Unity 版本将更新以实现 .NET Standard 2.1。

需要支持 .NET Framework 客户的库作者应该继续使用 .NET Standard 2.0。实际上,大多数库都可以保留在 .NET Standard 2.0 上,因为新添加的 API 主要用于高级场景。但是,这并不意味着库作者无法利用这些 API,即使他们必须支持 .NET Framework。在这些情况下,他们可以使用多目标来编译 .NET Standard 2.0 和 .NET Standard 2.1。这允许编写可以暴漏更多特性的代码,或者在支持 .NET Standard 2.1 的运行时上提供更高效的实现,同时不放弃 .NET Standard 2.0 提供的更大的支持范围。

有关多目标的更多推荐,请查看跨平台目标的最新文档。

Governance model 治理模式

.NET Standard 1.x 和 2.0 版本专注于揭露现有概念。大部分工作都在 .NET Core 方面,因为该平台从更小的 API 集开始。在前进的道路上,我们通常必须标准化全新技术,这意味着我们需要考虑对所有 .NET 实现的影响,而不仅仅是 .NET Core ,包括在其他社区(如 Mono 或 Unity )中管理的那些。我们的治理模式已经更新,来考虑所有因素:

.NET Standard 审核委员会。为确保我们不会最终添加无法实现的大量 API,审核委员会将签署有关 .NET Standard 的 API 添加内容。该委员会由 .NET 平台、Xamarin、Mono、Unity 和 .NET Foundation 的代表组成,将由 Miguel de Icaza 担任主席。我们将继续努力根据共识做出决策,并将利用 Miguel 的广泛专业知识和经验来构建 .NET 的实现,并在需要时得到多方的支持。

正式批准流程。.NET Standard 1.x 和 2.0 版本在很大程度上是通过计算现有 .NET 实现的 API 共同来实现的,这意味着 API 集实际上是计算结果。展望未来,我们正在实施一种社区策略:

  • 任何人都可以向 .NET Standard 提交 API 添加建议。

  • 默认认为已有实现中的成员存在 Standard 中。为了防止意外的分裂,我们将默认认为任何 .NET 实现已经添加的所有成员已经存在在 Standard 中。这里的基本原则是成员级别的分歧是不可取的,除非API 出现问题,否则很可能是一个很好的补充。

  • 验收要求:

    • 审核委员会成员的响应。该人将被分配该问题,并且引导这个问题,直至其被接受或被拒绝。如果没有董事会成员愿意响应该提案,将被视为被拒绝。

    • 至少在一个 .NET 实现中稳定实现。这个实现必须授权在与 MIT 兼容的开源许可下。这将允许其他 .NET 实现启动他们自己的实现或只是按原样使用该功能。

  • .NET Standard 更新是由计划的,通常会遵循一组主题。我们避免发布大量不属于一组常见方案的微小功能。相反,我们尝试定义一组目标,以描述特定 .NET Standard 版本提供的功能区域类型。这简化了某些库应该依赖于 .NET Standard 的问题。它还使 .NET 实现更容易决定是否值得实现更高版本的 .NET Standard。

  • 版本号需要经过讨论,通常它是很重要的。虽然我们不打算进行重大更改,但如果新版本添加了大量API(例如,当我们将 .NET Standard 2.0 中的 API 数量增加一倍时),或者整个开发体验有了相当大的改变,我们将修改 major 版本(就像我们在 .NET Standard 2.0 中添加的.NET Framework 库一样,增加了兼容性模式)。

有关更多信息,请查看 .NET Standard 治理模式和 .NET 标准审核委员会。
For more information, take a look at the .NET Standard governance model and the .NET Standard review board.


总结

.NET Standard 2.1 的定义正在进行中。您可以在 GitHub 上观看我们的进度并提出请求。

如果要快速检查特定 API 是否在 .NET Standard(或任何其他.NET平台)中,可以使用 apisof.net 。您还可以使用 .NET 可移植性分析器检查现有项目是否可以移植到.NET Standard 2.1。

原文地址: https://www.cnblogs.com/Rwing/p/announcing-net-standard-2-1.html


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

.NET Standard 2.1 公布相关推荐

  1. .NET Standard 2.0:整齐划一的目标

    在两个月前公布.NET Standard 2.0时,微软认为新版标准的目标在于为现有的三个主要.NET平台:.NET Framework..NET Core,以及Xamarin提供一个坚实的底层基础, ...

  2. 微软家庭服务器,微软公布Windows Server 2012版本方案,不再提供家庭服务器版

    微软 官方网站今日公布Windows Server 2012将有四个版本,分别为Foundation.Essentials.Standard以及Datacenter. 其中Foundation只供给原 ...

  3. 2021年图灵奖公布!72岁的美国科学家 Jack Dongarra 获奖

    刚刚,2021年计算机领域的最高奖项--图灵奖公布!美国计算机科学家 Jack J. Dongarra 获奖,以表彰他在高性能计算领域的卓越成就. >>>> 根据 ACM 的介 ...

  4. 伯克利摘得最佳论文,陈丹琦、杨笛一等华人团队获杰出论文,ACL2022奖项公布...

    视学算法报道 编辑:陈萍.杜伟 刚刚,NLP 领域国际顶会 ACL2022 公布获奖论文信息,其中加州大学伯克利分校的增量句法表示研究被评为最佳论文.此外,最佳主题论文.杰出论文也揭晓. ACL 是计 ...

  5. .net 5+ 知新:【2】 .Net Framework 、.Net 、 .NET Standard的概念与区别

    作为了解历史和演进过程,我们需要将 .Net Framwork ..Net. .Net Stander几个概念进行下理解. .net 代表跨平台框架,从.net 5开始就统一叫.net,废弃原来的.n ...

  6. .Net Framework 、.Net 、 .NET Standard的概念与区别

    作为了解历史和演进过程,我们需要将 .Net Framwork ..Net. .Net Stander几个概念进行下理解. .net 代表跨平台框架,从.net 5开始就统一叫.net,废弃原来的.n ...

  7. 通俗易懂,什么是.NET/.NET Framework/.NET Core/.Net Standard?

    什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包 ...

  8. 【你好,windows】Windows Embedded Standard 7 X86X64纯净终结版2020.1.27

    1.WES7(Windows Embedded Standard 7)是微软在2010年5月13日发布的基于X86平台的组件化的Windows 7嵌入式操作系统(俗称瘦客户端).升级IE11.0,主页 ...

  9. 重大更新!USB PD3.1公布,可提供48V 240W功率,一统笔电充电时代将至!

    作者:晓宇,排榜:晓宇 微信公众号:芯片之家(ID:chiphome-dy) 目前,业界标准基于USB Type-C 方面的USB PD充电协议仅开放到100W ,虽然对于多数手机与入门级游戏笔电等已 ...

最新文章

  1. 起源、进化、创造、探索——穿越138亿年的时间之旅
  2. 智能连接:5G与人工智能、物联网等技术的超级融合
  3. 41、Power Query-Text.Combine函数进阶2
  4. 分布式系统Lease机制
  5. Create Volume 操作(Part I) - 每天5分钟玩转 OpenStack(50)
  6. 泰坦尼克号生存预测入门
  7. UITableView 编辑和删除行
  8. Android系统层次结构及分析
  9. (转)对各种初始化函数的理解:OnInitDialog、InitInstance、InitApplication函数的理解...
  10. 线程池ThreadPoolExecutor使用
  11. [数字dp] hdu 3271 SNIBB
  12. 计算机windows解压文件,win7怎么用DOS命令解压缩文件 DOS解压文件方法
  13. silvaco 学习笔记 2——自定义材料
  14. php判断caj文件页数,CAJ转Word有没有既免费还不限制页数的转换工具?
  15. 关于智能家居、360wifi、wifi开关,以及wifi芯片的选择
  16. 照片处理:PS三步轻松实现背景虚化
  17. 台式计算机怎么强制关机,台式电脑怎么强制关机
  18. zabbix 监控 db2_zabbix实战 - abm
  19. 数据标准是什么?企业如何做好数据管理?
  20. 《freemind中文教程》笔记

热门文章

  1. .gitignore文件将已经纳入版本管理的文件删除
  2. 2018-2019 20165226 Exp9 Web安全基础
  3. 好程序员技术文档HTML5开发中的javascript闭包
  4. python应用POP3、IMAP、SMTP 协议,获取邮箱验证码
  5. std::thread 不 join
  6. 第十周项目1-程序填充与阅读(三)
  7. Javascript函数调用的四种模式
  8. 分享一个基于.NET6包含DDD,ES,CQRS等概念的开源项目
  9. Elasticsearch数据库
  10. 在 Azure Functions 上使用不同的路由前缀