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 fn
, async { ... }
和async move { ... }
都是闭包,可以用来定义异步文字。
您可以在Niko Matsakis博客文章中了解有关async
/ .await
发行版的更多信息 。
match-guards
漫游值的共享链接
匹配图像时,可以通过以下方式之一绑定称为绑定的变量:
现在,如果所有权转移到该变量(即移动绑定模板中的变量),则可以在模板的if约束中使用模板变量。 以前,以下代码将被丢弃:
fn main() { let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]); match array { nums
从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],
可用的属性包括:
条件编译: cfg
和cfg_attr
;
检查管理: allow
, warn
, deny
和forbid
;
过程属性宏用于语法元素的辅助属性。
我们希望这项创新将有助于生态系统编写更具表现力的基于宏的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 fn
( const fn
):
标准库中的稳定功能
在Rust 1.39.0中,以下功能已得到稳定:
其他变化
语法 , 货物包裹管理器和Clippy分析器也进行了一些更改。
请阅读兼容性说明,以查看这些更改是否影响您。
成员1.39.0
许多人一起创建了Rust 1.39.0。 没有你们大家,我们不可能做到这一点, 谢谢 !
来自翻译
如果您对Rust语言有任何疑问,他们将可以在俄语电报聊天或对新手进行的类似聊天中为您提供帮助。
本文由andreevlex , blandger , funkill和Hippolot共同翻译。