.NET 6 Preview 7 发布
.NET 6 Preview 7 现已。这是发布 RC 版本之前的最后一次预览。本次更新包括对各种功能的最后一点润色,以及一次性的大型功能发布,并且受 Visual Studio 2022 Preview 3 支持。
.NET SDK:现代化的 C# 项目模板
该版本更新了 .NET SDK 模板以使用最新的 C# 语言功能和模式。新模板中使用了以下语言功能:
- Top-level 语句
- 异步 Main
- 全局 using 指令(通过 SDK 驱动的默认值)
- 文件范围的命名空间
- 目标类型的新表达式
- 可空引用类型
通过项目模板启用这些功能,新代码可以从启用这些功能开始,但升级时现有代码不受影响。
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.MapGet("/", () => "Hello World!"); app.Run();
可用于无效信息的反射 API
可空引用类型是编写可靠代码的重要特性,它非常适合编写代码,但不适用于检查。新的反射 API 使用户能够确定给定方法的参数和返回值的可空性性质。 对于上下文,该版本在 .NET 5 中向 .NET 库添加了可空性的注释(并在 .NET 6 中完成),并且正在对 ASP.NET Core 做同样的事情。可空性信息使用自定义属性保存在元数据中,原则上,任何人都可以读取自定义属性。
class Data { public string?[] ArrayField; public (string?, object) TupleField; } private void Print() { Type type = typeof(Data); FieldInfo arrayField = type.GetField("ArrayField"); FieldInfo tupleField = type.GetField("TupleField"); NullabilityInfoContext context = new (); NullabilityInfo arrayInfo = context.Create(arrayField); Console.WriteLine(arrayInfo.ReadState); // NotNull Console.WriteLine(arrayInfo.Element.State); // Nullable NullabilityInfo tupleInfo = context.Create(tupleField); Console.WriteLine(tupleInfo.ReadState); // NotNull Console.WriteLine(tupleInfo.GenericTypeArguments [0].State); // Nullable Console.WriteLine(tupleInfo.GenericTypeArguments [1].State); // NotNull }
ZipFile 获得 Unix 文件权限
System.IO.Compression.ZipFile 类现在在创建和设置文件权限期间捕获 Unix 文件权限。此更改允许通过 zip 存档来回传送可执行文件,这意味着用户不再需要在解压缩 zip 存档后修改文件权限以使文件可执行。如果 zip 存档不包含文件权限,则提取的文件将获得默认文件权限,就像任何其他文件一样新创建的文件。
.NET 7 早期功能预览:通用数学
该版本在 .NET 6 中预览的其中一项功能是静态抽象接口成员,这允许用户在接口中定义静态抽象方法(包括运算符)。例如,现在可以实现代数泛型方法。对于某些用户来说,此功能可能是今年最出色的改进,它可能是自 Span<T> 以来最重要的新型系统功能。以下示例采用 IEnumerable<T>,并且由于 T 被约束为 INumber<T>,因此能够对所有值求和。
public static T Sum<T>(IEnumerable<T> values) where T : INumber<T> { T result = T.Zero; foreach (var value in values) { result += value; } return result; }
NativeMemory API
该版本添加了通过 System.Runtime.InteropServices.NativeMemory 公开的新本地内存分配 API,这些 API 与 malloc、free、realloc 和 calloc C API 等效,还包括用于进行对齐分配的 API。
System.Text.Json 序列化通知
System.Text.Json 序列化程序现在将通知作为(反)序列化操作的一部分公开,这对于默认值和验证很有用。要使用该功能,需要在 System.Text.Json.Serialization 命名空间内实现一个或多个接口 IJsonOnDeserialized、IJsonOnDeserializing、IJsonOnSerialized 或 IJsonOnSerializing。下面是一个在 JsonSerializer.Serialize() 和 JsonSerializer.Deserialize() 期间验证的示例,以确保 FirstName 属性不为空。
public class Person : IJsonOnDeserialized, IJsonOnSerializing { public string FirstName{ get; set; } void IJsonOnDeserialized.OnDeserialized() => Validate(); // Call after deserialization void IJsonOnSerializing.OnSerializing() => Validate(); // Call before serialization private void Validate() { if (FirstName is null) { throw new InvalidOperationException("The 'FirstName' property cannot be 'null'."); } } }
W^X(write xor execute)支持所有平台和架构
运行时现在有一种模式,它不会同时创建或使用任何可写和可执行的内存页面,所有可执行内存都映射为只读。此功能已在 macOS(适用于 Apple Silicon)上和其它平台启用。此前在 Apple Silicon 机器上,同时可写和可执行的内存映射是被禁止的。
在这些平台上,可执行代码的生成/修改是通过单独的读写内存映射完成的,而这些映射是在与可执行代码地址不同的虚拟内存地址处创建的,并且仅在执行写入时存在很短的时间。例如,JIT 现在将代码生成到暂存缓冲区中,在整个方法被 jitt 之后,使用单个内存复制函数调用将代码复制到可执行内存中。并且可写映射生命周期仅跨越内存复制的时间。
用户可以通过将环境变量 DOTNET_EnableWriteXorExecute 设置为 1 来启用此新功能。此功能目前是可选的,因为它具有启动回归(Apple Silicon 除外)。预计在 .NET 7 中解决性能回归问题,并在那时默认启用该功能。
更多详细内容,请查看更新公告。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Go 1.17 正式发布
Go 1.17 已正式发布。 此版本改进了编译器,具体来说是采用了一种新的函数参数和结果传递方式。官方称此项变化将 Go 程序的性能提升了大约 5%,并将amd64 平台的二进制包大小减少了大约 2%,未来还计划支持更多平台。 Go 1.17 还增加了对 Windows 上 64 位 ARM 架构的支持,让 Go 开发者能够在更多设备上原生运行 Go。 新版本还增加了pruned module graphs功能。官方对此功能的描述为,当 Modules 在其go.mod文件中指定了go 1.17或更高版本,其 module graph 只包括其他 Go 1.17 模块的直接依赖,而不是其全部的横向依赖。这将有助于避免go.mod为其他不相关的依赖下载或读取文件,从而在日常开发中节省时间。 语言方面,Go 1.17 包含三个针对语言特性的改进: 支持从 slice (切片)到数组指针的转换 unsafe.Add:unsafe.Add(ptr, len)将len添加ptr并返回更新的指针unsafe.Pointer(uintptr(ptr) + uintptr(len)) unsafe.S...
- 下一篇
Google 推出神经网络编解码器 SoundStream,将整合进开源项目 Lyra
Google 近日发布了一个端到端的神经音频编解码器 ——SoundStream。最重要的是,Google 表示这是世界上第一个由神经网络驱动并支持语音、音乐和环境声音等不同声音类型的音频编解码器,可以在智能手机的处理器上实时处理上述各种音频。 音频编解码器是压缩音频文件的基本工具,以使其体积更小,并在传输过程中尽可能节省时间。因此,音频编解码器对于流媒体、在线语音和视频通话这类有音频传输需求的服务而言至关重要。 虽然音频编解码器能够压缩音频体积,加速音频传输过程,但压缩后的音频也会损失音频质量和细节,产生可以让用户察觉到的差异。而这就是 SoundStream 能够弥补的地方。 今年 2 月的时候,Google 发布了一个用于低比特率语音的神经音频编解码器Lyra,并在今年 4 月正式开源。SoundStream 是 Lyra 的一个扩展版本。SoundStream 不仅集成了 Lyra 在低比特率「语音」方面的能力,还具有对更多声音类型的编码支持,包括清晰的语音、嘈杂的语音、带有回声的语音、音乐和环境声音等。 SoundStream 是围绕一个由编码器、解码器和量化器组成的神经网络...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池