Rust 1.40.0 发布
Rust 1.40.0 已经正式发布。该版本的亮点包括有 #[non_exhaustive]
和 macros!()
and #[attribute]
s 的改进。
具体更新内容如下:
#[non_exhaustive]
结构,枚举和变体
当属性#[non_exhaustive]
附加到struct
或的变体时enum
,它将防止定义它的板条箱外部的代码构造所述struct
或变体。为了避免将来损坏,还防止其他包装箱在田地上进行彻底匹配。以下示例说明了beta
取决于的错误alpha
:
// alpha/lib.rs: #[non_exhaustive] struct Foo { pub a: bool, } enum Bar { #[non_exhaustive] Variant { b: u8 } } fn make_foo() -> Foo { ... } fn make_bar() -> Bar { ... } // beta/lib.rs: let x = Foo { a: true }; //~ ERROR let Foo { a } = make_foo(); //~ ERROR // `beta` will still compile when more fields are added. let Foo { a, .. } = make_foo(); //~ OK let x = Bar::Variant { b: 42 }; //~ ERROR let Bar::Variant { b } = make_bar(); //~ ERROR let Bar::Variant { b, .. } = make_bar(); //~ OK // -- `beta` will still compile...
幕后发生的事情是,#[non_exhaustive]
struct
或的构造函数的可见性enum
降低到pub(crate)
,从而阻止了在定义它的板条箱外部进行访问。
更重要的方面是,#[non_exhaustive]
也可以附加到enum
自身上。从标准库中获取的示例是Ordering
:
#[non_exhaustive] pub enum Ordering { Relaxed, Release, Acquire, AcqRel, SeqCst }
#[non_exhaustive]
在此上下文中的目的是确保可以随时间添加更多变体。这是通过防止其他包装箱从详尽模式实现match
-ing上Ordering
。也就是说,编译器将拒绝:
match ordering { // This is an error, since if a new variant is added, // this would suddenly break on an upgrade of the compiler. Relaxed | Release | Acquire | AcqRel | SeqCst => { /* logic */ } }
取而代之的是,其他板条箱需要通过添加通配符来解决更多变体的可能性,例如_
:
match ordering { Relaxed | Release | Acquire | AcqRel | SeqCst => { /* ... */ } // OK; if more variants are added, nothing will break. _ => { /* logic */ } }
有关该#[non_exhaustive]
属性的更多详细信息,可参见稳定性报告。
Macro and attribute 的改进
例如,用户可以编写以下类型:Foo = expand_to_type!(bar); 其中 expand_to_type 将是一个 procedural macro。
包括有bang!()
macros, 例如:
macro_rules! make_item { ($name:ident) => { fn $name(); } } extern { make_item!(alpha); make_item!(beta); }
Procedural macro attributes on items in extern { ... }
blocks 现在也被支持:
extern "C" { // Let's assume that this expands to `fn foo();`. #[my_identity_macro] fn foo(); }
目前,函数式(mac!()
)和属性(#[mac]
)macros 都可以生成macro_rules!
项目。
也就是说,以下内容现在有效:
macro_rules! accept_meta { ($m:meta) => {} } accept_meta!( my::path ); accept_meta!( my::path = "lit" ); accept_meta!( my::path ( a b c ) ); accept_meta!( my::path [ a b c ] ); accept_meta!( my::path { a b c } );
标准库中增加的 const fn
此版本中,以下函数成为const fn
:
增加到标准库的函数
以下函数和宏已经稳定:
-
{f32,f64}::to_be_bytes
,{f32,f64}::to_le_bytes
,{f32,f64}::to_ne_bytes
,{f32,f64}::from_be_bytes
,{f32,f64}::from_le_bytes
,和{f32,f64}::from_ne_bytes
详情可查看更新说明:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Wine 5.0 rc2 发布,Windows 应用的兼容层
在上周的代码冻结和Wine 5.0-rc1发布之后,Wine 5.0 的第二个候选版本目前也已发布,该版本主要进行了 bug修复。 Wine(Wine Is Not an Emulator)是一个能够在多种兼容 POSIX 接口的操作系统(诸如 Linux、macOS 与BSD 等)上运行 Windows 应用的兼容层。它不是像虚拟机或者模拟器一样模仿内部的 Windows 逻辑,而是将Windows API 调用翻译成为动态的 POSIX 调用,免除了性能和其它一些行为的内存占用,让你能够干净地整合Windows 应用到你的桌面。 Wine 5.0 rc2在过去的一周中已完成了 36 个bug 修复,但由于代码冻结,并没有添加任何新功能。目前,该团队的开发人员预计将于明年 1 月份的下半月发布稳定版的 Wine 5.0。 修复的 36 个bug内容包括有: Age of Wonders 2 演示中的 Direct3D 模式异常缓慢且出现故障 《模拟人生3》:Textures 变成黑色,有时出现异常图案。 StarFisher:输入新事件时崩溃 Pegasus Mail 4.6x崩溃 ...
- 下一篇
TigerVNC 1.10.1 发布,安全修复版本
TigerVNC1.10.1 发布了。TigerVNC 是一个高级的 VNC 远程访问的实现,基于第四代 VNC,包含一个 JPEG 压缩加速器,支持 X.Org 和 X server。 这是一个安全版本,用于修复卡巴斯基实验室发现的许多问题,这些问题影响客户端和服务器,并且理论上可以允许恶意软件控制另一端的软件。 目前尚无可利用的利用程序,并且问题要求对等方首先进行身份验证,不过官方还是敦促用户在可能的情况下升级。 详情查看更新说明: https://github.com/TigerVNC/tigervnc/releases/tag/v1.10.1
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Mario游戏-低调大师作品
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能