Rust 1.39.0 发布,async/.await 终于稳定了
Rust 1.39.0 已经发布。此版本的亮点包括 async/.await,对 match 守卫 by-move 绑定的共享引用,以及函数参数的属性。
async/.await 稳定
此版本 async/.await 特性已经稳定,这意味着现在可以定义 async 函数和块,并进行 .await 操作。
async 函数通过 async fn 引入,被调用时会返回一个 Future,该 Future 是一个会挂起的计算,可以使用 .await 运行并完成计算。而除了 async fn,async{...} 和 async move{...} 块也可以用来定义“异步文字”,它们的行为像闭包。
match 守卫引用 by-move 绑定
在 Rust 中进行模式匹配时,一个变量,也就是“绑定”,可以通过以下方式界定:
-
不可更改或可变地 by-reference。这可以通过诸如
ref my_var
或ref mut my_var
分别明确地实现,在大多数情况下,绑定模式将自动推导。 -
by-value,或者当绑定变量的类型实现 Copy 时 by-copy,否则 by-move。
以往,Rust 将禁止在表达式的保护结构中共享对 match 表达式中 if 守卫的 by-move 绑定的引用,这意味着以下代码将被拒绝:
fn main() { let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]); match array { nums // ---- `nums` is bound by move. if nums.iter().sum::<u8>() == 10 // ^------ `.iter()` implicitly takes a reference to `nums`. => { drop(nums); // ----------- `nums` was bound by move and so we have ownership. } _ => unreachable!(), }
}
Rust 1.39 中,上面的代码段现在已被编译器接受,此特性可以为整体的 match 表达式带来更流畅、更一致的体验。
函数参数的属性
现在允许在函数、闭包和函数指针的参数上使用属性。
比如以往这样编写:
#[cfg(windows)] fn len(slice: &[u16]) -> usize { slice.len() } #[cfg(not(windows))] fn len(slice: &[u8]) -> usize { slice.len() }
现在可以以更简洁的方式:
fn len( #[cfg(windows)] slice: &[u16], // This parameter is used on Windows. #[cfg(not(windows))] slice: &[u8], // Elsewhere, this one is used. ) -> usize { slice.len() }
这里可以使用的属性包括:
-
条件编译:cfg 和 cfg_attr
-
控制 lint:allow、warn、deny 与 forbid
-
应用于项目的过程宏属性使用的帮助程序属性
这在整个语言生态中提供了一个更具可读性的基于宏的 DSL。
标准库中增加的 const fn
此版本中,以下函数成为 const fn:
- Vec::new、String::new 与 LinkedList::new
- str::len、[T]::len 与 str::as_bytes
- abs、wrapping_abs 与 overflowing_abs
增加到标准库的函数
以下函数已经稳定:
- Pin::into_inner
- Instant::checked_duration_since 与 Instant::saturating_duration_since
详情查看更新说明:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Calibre 4.3.0 发布,电子书管理软件
Calibre 4.3.0已发布,更新内容有: Viewer: 添加带有常见操作的可选工具栏,在Preferences->Miscellaneous下将其打开 将默认配色方案更改为“System” 添加键盘快捷方式;进入图书位置 添加一个控件,以便将接口重置为默认值 添加命令行选项强制重新加载书籍 Bug fixes: Content server:修复漫画转换无效 Book details:允许右击复制作者链接和标识符、修复通过右击移除标识符无效、修复单击标记等不能生成精确匹配的搜索 Viewer:当调整大小时,确保在分页模式下返回到相同的页面 Duplicates dialog:根据作者的要求,对匹配的书籍进行排序,以便于查阅 PDF Output:修复指向同一文件中的目标的链接不起作用 DOCX Input:修复了 AlternateContent 块,渲染选择部分和回退部分 Viewer:修复在导航到 CFI 时的异常 修复在下载封面时取消图标主题下载出现的崩溃 Viewer:修复样式表中未正确解释的非 ASCII 内容 更多内容请见发布说明。
- 下一篇
NativeScript 6.2 发布,黑暗模式和新的 npm 包
NativeScript 6.2已经发布,主要内容如下: Dark Mode 该版本引入黑暗模式: 更新主题,最新版本支持黑暗模式的开箱即用 拥有自己实现黑暗模式所需的扩展点 可以选择从操作系统继承暗模式设置,也可以在应用程序中实现自定义控件 大多数 “Pro” NativeScript 组件,如日历、图表和 DataFrom,已经提供了黑暗模式外观 Scoped NPM Packages 该版本在单个 NPM 范围内提供所有 NativeScript NPM 包,包括新的: @nativescript/core @nativescript/angular @nativescript/theme Kotlin 的扩展函数/属性支持 现在能够在 NativeScript 中调用用 Kotlin 写成的ArrayList扩展函数: fun ArrayList<String>.bubbleSort() { // Implementation of a bubble sort } 然后,在 NativeScript 应用程序中,调用此函数: let arrayList = ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路