Rust开发团队很高兴地宣布发布新版本1.38.0。 Rust是一种编程语言,它使每个人都可以创建可靠而高效的软件。
如果您使用rustup安装了Rust的先前版本,那么要升级到1.38.0版本,您只需要运行以下命令:
rustup update stable
如果尚未安装rustup,则可以从我们网站的相应页面进行安装 。
稳定版包含哪些内容?
此版本的重点是管道编译。
管道编译
编译器不需要完全组装的依赖关系来构建程序包,而只需在编译的早期阶段生成它们的“元数据”(类型,依赖关系,导出等的列表)即可。 从Rust 1.38.0开始,一旦其元数据可用,Cargo将立即开始构建依赖的软件包。
一个软件包的构建时间并没有减少, 但是我们的测试表明 ,在优化构建的情况下(其中一些依赖项已经被编译),编译速度提高了10%-20%。 对于其他软件包,编译速度没有发生很大的提高。 构建软件包所需的时间取决于计算机,因此性能可能会有所不同。 从1.38.0版开始自动启用管道编译。
检查mem::{uninitialized, zeroed}
滥用
如先前宣布的那样 ,不建议使用std::mem::uninitialized
。 而是应使用MaybeUninit<T>
。
mem::uninitialized
函数尚未被弃用,但这将在以后的版本中完成。 但是尽管如此,从1.38.0开始,rustc使用mem::uninitialized
或mem::zeroed
rustc
检查一小类不正确的初始化。
对于某些类型,例如&T
和Box<T>
,空值被视为未定义行为,因为它们是类似指针的对象,不应为null
。 使用mem::uninitialized
或mem::zeroed
初始化这些类型是错误的,因此,如果这些函数中的任何一个用于初始化上述对象,则编译器将尝试警告您,而无论是直接初始化还是将它们初始化为大型结构的领域。 此检查是递归的,因此以下代码需要警告:
struct Wrap<T>(T); struct Outer(Wrap<Wrap<Wrap<Box<i32>>>>); struct CannotBeZero { outer: Outer, foo: i32, bar: f32 } ... let bad_value: CannotBeZero = unsafe { std::mem::uninitialized() };
细心的读者可能会注意到标准库包含更多不应填充零的类型,尤其是NonNull<T>
和NonZero<T>
。 到目前为止, 尚未验证使用mem::uninitialized
或mem::zeroed
的这些结构的mem::uninitialized
。
这些检查并不涵盖不正确使用mem::uninitialized
或mem::zeroed
MaybeUninit
所有情况,但是允许您检测应保证会切换到MaybeUninit
错误代码。
#[deprecated]
巨集
#[deprecated]
属性(最初在Rust 1.9.0中引入)允许程序包作者将计划在将来的版本中删除的过时功能通知用户。 Rust 1.38.0允许您将此属性应用于宏。
std::any::type_name
调试代码时可能需要使用所使用类型的字符串表示形式。 例如,在泛型函数的主体中,您可能需要打印传递的参数的类型。 现在std::any::type_name
使用std::any::type_name
:
fn gen_value<T: Default>() -> T { println!("Initializing an instance of {}", std::any::type_name::<T>()); Default::default() } fn main() { let _: i32 = gen_value(); let _: String = gen_value(); }
结果:
Initializing an instance of i32 Initializing an instance of alloc::string::String
与标准库的所有功能(仅用于调试)一样,该功能不能保证字符串的确切内容和格式。 返回值是对该类型的最好描述; 多个类型可以由相同的type_name
表示,但在以后的编译器版本中可能会更改。
对标准库的更改
此外,某些功能已稳定:
其他变化
语法 , 货物包裹管理器和Clippy分析器也进行了一些更改。
成员1.38.0
很多人一起创建了Rust 1.38.0。 没有你们大家,我们不可能做到这一点, 谢谢 !
来自翻译
如果您对Rust语言有任何疑问,他们将可以在俄语电报聊天或对新手进行的类似聊天中为您提供帮助。
本文由andreevlex , nlinker , funkill和Gymmasssorla共同翻译。