版本1.40.0(2019-12-19)

语言



现在,您可以在上下文中使用tuple struct和tuple enum变体的构造函数 const。例如

pub struct Point(i32, i32);

const ORIGIN: Point = {
let constructor = Point;

constructor(0, 0)
};

现在struct,您可以使用属性标记enum,,和enum变体,#[non_exhaustive]以指示将来可能会添加变体或字段。例如,这要求_ => {}在非穷举上的任何match语句中添加通配符branch()enum。(RFC 2008)

现在,您可以在extern块和类型位置中使用类似函数的过程宏。例如type Generated = macro!();

现在macro_rules!,类似于函数和属性的程序宏可以发出 项目,因此您现在可以让宏生成宏。

该meta图案匹配macro_rules!现在可以正确匹配的现代属性语法。例如(#[$m:meta])现在匹配#[attr], #[attr{tokens}],#[attr[tokens]],和#[attr(tokens)]。

编译器



为thumbv7neon-unknown-linux-musleabihf目标添加了第3层支持* 。
添加了对aarch64-unknown-none-softfloat目标的第3层支持 。
为mips64-unknown-linux-muslabi64和 mips64el-unknown-linux-muslabi64目标添加了第3层支持。
* 有关Rust的分层平台支持的更多信息,请参阅Rust的平台支持页面。





现在is_power_of_two,无符号数字类型的方法是一个const函数。

稳定的API



BTreeMap::get_key_value
HashMap::get_key_value
Option::as_deref_mut
Option::as_deref
Option::flatten
UdpSocket::peer_addr
f32::to_be_bytes
f32::to_le_bytes
f32::to_ne_bytes
f64::to_be_bytes
f64::to_le_bytes
f64::to_ne_bytes
f32::from_be_bytes
f32::from_le_bytes
f32::from_ne_bytes
f64::from_be_bytes
f64::from_le_bytes
f64::from_ne_bytes
mem::take
slice::repeat
todo!

Cargo



现在,Cargo将始终显示警告,而不仅仅是在新的版本上。
--all-features现在,传递给虚拟工作区的功能标志(除外)将产生一个错误。以前,这些标志被忽略。
您现在可以发布,dev-dependencies而无需添加version。

杂项



现在,您可以指定#[cfg(doctest)]属性,使其仅在使用进行文档测试时才包括项目rustdoc。
相容性说明
如先前所宣布,2015版中以前的任何NLL警告现在都是硬错误。
该include!宏现在会发出警告,如果它没有包括整个文件。的include!宏无意中只包括所述第一表达在一个文件中,并且这可能是不直观的。这将成为将来的发行版中的一个硬错误,或者行为可能被修复为按预期包括所有表达式。
使用#[inline]的函数原型和consts现在下发出警告 unused_attribute皮棉。现在,正确使用#[inline]特征或extern块中的其他任何位置都会发出硬错误。