微软即将发布的.NET 5,蕴藏哪些 特性?
原标题:微软即将发布的.NET 5,蕴藏哪些 特性?
以下为译文:
为了统一.NET平台,.NET 5改进了RyuJIT中代码质量、垃圾收集和JSON序列化等功能。
Preview 8
微软已经发布了功能完整的.NET 5的第8个预览版,除了bug修复外,几乎所有的功能都是最终版本。.NET 5中 .NET Framework和.NET Core已合并,旨在一统.NET平台。 版本预计将于2020年11月10日正式发布。
日前,.NET 5的第8个预览版在8月25号已发布。而在11月的正式版发布前,还将有两个候选版本发布。
.NET 5更高层次的目标包含提供统一的.NET SDK体验,即在所有.NET 5应用程序中使用一个BCL(基类库),并支持跨多个操作系统的本地和web应用程序。一个.NET 5本地应用程序项目将使用这些平台上的本地控件来支持Windows、Microsoft Duo (Android)和Apple iOS等目标。
.NET 5的其他目标还有:允许构建高性能的云应用程序、在BCL中实现更快的算法、运行时中为容器提供更好地支持、以及对HTTP3的支持。.NET 5.0通过Mono的运行时和.NET库,将支持WebAssembly二进制格式,还提供了一组可为空的引用类型注释。
Preview 7
此前,.NET 5 的第7个预览版在7月21日发布。彼时,关于第7个预览版的公告确认了在.NET 5中有约250个面向性能的请求,而这对于关注.NET 核心性能的人而言会是一个惊喜。
以下是.NET 5第7个预览版公告中提到的其他新增功能和改进:
在序列化时,新的System.text.json JSON API提供了忽略值类型属性的默认值的功能,这有助于减少序列化和线路成本。还为System.text.json添加了在序列化时处理循环引用的功能,预计现在的API就将是最终版本。
垃圾回收将使用GetGCMemoryInfo方法公开最近收集的详细数据,该方法返回GCMemoryInfo结构。GCMemoryInfo会提供关于机器、堆内存和最近收集的信息,或者是指定的GC类型的 收集(临时、完全阻塞或后台)的信息。这个API很有可能会用于日志记录/监视,或者为请求完整的GC向负载平衡器发出停止旋转机器的指示。同时,为了将昂贵的重置内存操作推迟到低内存情况下,还更改了另一项GC。
Ryujit是.NET的汇编代码生成器,其增强的功能包括:取消某些边界检查、尾部重复改进,以及为消除冗余零初始化而进行的改进。Ryujit还具有ARM64硬件内在特性和API优化功能。
Preview 6
6月25日发布的.NET 5第6个预览版,删除了对WinRT(Windows运行时)的内置支持,WinRT是用于构建通用Windows平台应用程序的API集合。这是一个很重要的变化,因为使用WinRT的.NET Core 3.x应用程序都必须重新编译。.NET和Windows团队一直在竭力改变WinRT在Windows上的工作方式,所以用.NET 5中的C#/ WinRT工具链代替WinRT支持。C#/ WinRT是一个NuGet-packaged的工具包,为C#提供WinRT投影支持。
.NET 5 第6个预览版中的其他变化:
.NET 5第6个预览版SDK支持Windows ARM64设备上的Windows Form,并继续在Windows ARM64上添加对Windows Presentation Foundation的支持。
RyuJIT代码质量改进包括为消除冗余的零初始化,进行结构处理和优化。此外,在ARM64硬件内在优化以及改进ARM64生成的代码(减小代码大小)方面也取得了进展。
平台支持计划已更新。
Preview 5
6月10日发布的.NET 5第5个预览版包含以下新功能:
RyuJIT JIT编译器可以更快,更方便地使用尾调用助手。一旦JIT发现需要一个助手来执行尾调用,它就会在运行时寻求帮助。对于RyuJIT,ARM64硬件内在特性也一直在不断进步。RyuJIT还有其他的改进:在影响正则表达式编译和提高英特尔架构性能的情况下提高了速度。
启用了对带有.NET代码调用的本机二进制文件的导出。此功能的构建块是承载了对UnManagedCallersOnlyAttribute的API支持。本机导出项目允许公开自定义本机出口。它不需要像COM这样的高级互操作技术,而且是跨平台的。
DirectoryServices.Protocols的使用正在往Linux和MacOS扩展。