Rust 1.39.0版本:异步/等待,函数参数的属性,新的常量函数

Rust团队很高兴宣布1.39.0的新版本发布。 Rust是一种编程语言,它使每个人都可以创建可靠而高效的软件。


如果您使用rustup安装了rustup版本的Rust,那么要升级到1.39.0版,您只需运行以下命令:


 $ rustup update stable 

如果尚未安装rustup ,则可以从我们网站的相应页面进行安装 ,以及在GitHub上查看详细的发行说明


稳定版1.39.0中包含什么


最重要的创新包括async / .await ,对match-guards可移动值的共享引用以及函数参数的属性。 有关更多信息,请参见详细的发行说明


随着.await结束,遇到async fn


在Rust 1.36.0的早期, 我们宣布Future特性的可用性。 然后我们注意到:


我们希望这项创新将使流行的板条箱,图书馆和整个生态系统为async / .await做准备,该.await计划在不久的将来得到稳定。

给出了承诺-兑现了承诺。 我们很高兴地宣布,期待已久的async / .await终于可以稳定了,它允许我们定义异步函数和块( async )并等待其执行( .await )!


使用async fn语法(而不是通常的fn )定义的异步函数除了执行任何操作外,什么都不做,只是返回一个实现Future特性的对象。 该对象是一个暂挂计算,可以使用.await语法完成。 另外, async fnasync { ... }async move { ... }都是闭包,可以用来定义异步文字。


您可以在Niko Matsakis博客文章中了解有关async / .await发行版的更多信息


match-guards漫游值的共享链接


匹配图像时,可以通过以下方式之一绑定称为绑定的变量:


  • 通过引用,是不变的或可变的。 例如,可以分别使用语法ref my_varref mut my_var明确地完成此操作。 几乎总是自动显示快照模式。


  • 按值-通过复制(如果绑定变量的类型实现了Copy trait),或者通过将其转移给owner



现在,如果所有权转移到该变量(即移动绑定模板中的变量),则可以在模板的if约束中使用模板变量。 以前,以下代码将被丢弃:


 fn main() { let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]); match array { nums // ---- `nums`    (by move). if nums.iter().sum::<u8>() == 10 // ^------ `.iter()`     `nums` => { drop(nums); // ----------- `nums`      } _ => unreachable!(), } } 

从Rust 1.39.0开始 ,编译器将接受上面的片段,而不会发出警告和错误。 我们希望这项创新将提高match表达的可用性。


功能参数的属性


从Rust 1.39.0开始,可以将属性应用于函数参数,闭包和函数指针。 以前, len()函数可以表示如下:


 #[cfg(windows)] fn len(slice: &[u16]) -> usize { slice.len() } #[cfg(not(windows))] fn len(slice: &[u8]) -> usize { slice.len() } 

但是Rust 1.39.0 使编写上面代码更加简单:


 fn len( #[cfg(windows)] slice: &[u16], //        Windows. #[cfg(not(windows))] slice: &[u8], //       . ) -> usize { slice.len() } 

可用的属性包括:


  1. 条件编译: cfgcfg_attr


  2. 检查管理: allowwarndenyforbid


  3. 过程属性宏用于语法元素的辅助属性。


    我们希望这项创新将有助于生态系统编写更具表现力的基于宏的DSL。



借用支票迁移警告成为Rust 2018中的严重错误


在1.35.0版本中, 我们宣布 ,新的借用分析器(NLL)在Rust 2015版本1.31中发布给Rust 2018的编辑者。


如1.35.0版中所述,以前的借用分析器设计有一些错误,这些错误会导致内存使用不安全。 使用实现NLL的新分析器纠正了这些错误。 由于这些修复程序可能破坏正常工作的代码,Rust团队决定逐步引入它们,以验证先前的分析器应接受该代码,而新分析器将拒绝该代码。 如果是这样,则错误将改为警告。


从Rust 1.39.0开始,这些警告现在是Rust 2018版本中的错误
在Rust 1.40.0的下一发行版中, 此规则还将应用于Rust 2015修订版代码 ,它将从编译器中完全消除旧的借用分析器


如果您受到这些更改的影响,或者想了解更多信息,请查看Niko Matsakis博客文章


标准库中的更多常量函数


从Rust 1.39.0开始,以下功能被标记为const fnconst fn ):



标准库中的稳定功能


在Rust 1.39.0中,以下功能已得到稳定:



其他变化


语法货物包裹管理器Clippy分析器也进行了一些更改。


请阅读兼容性说明,以查看这些更改是否影响您。


成员1.39.0


许多人一起创建了Rust 1.39.0。 没有你们大家,我们不可能做到这一点, 谢谢


来自翻译


如果您对Rust语言有任何疑问,他们将可以在俄语电报聊天对新手进行的类似聊天中为您提供帮助。


本文由andreevlexblandgerfunkillHippolot共同翻译。

Source: https://habr.com/ru/post/zh-CN474808/


All Articles