管道编译(pipelined compilation)
如果想要编译 crate,编译器不需要完全构建依赖项,只需要它们的“元数据”(即类型、依赖项、导出的列表),元数据在编译过程早期生成。从 Rust 1.38.0 开始,Cargo 将基于这一优势,一旦元数据准备就绪,就自动开始构建依赖的 crate。
虽然这种变化对单个 crate 的编译没有任何影响,但经过测试,得到了一些报告,对于涉及多个 crate 的构建,可为干净的和优化的构建带来大约 10~20% 的编译速度 。而其他的改进并不多,速度的提高取决于运行构建的硬件。
mem::{uninitialized, zeroed}
从 1.38 开始,rustc 将为使用 mem::uninitialized 或 mem::zeroed 错误初始化的狭义类提供 lint。
#[deprecated] macros
#[deprecated] 属性最初是在 Rust 1.9.0 版本中引入的。Rust 1.38.0 扩展了属性,允许将其应用于宏,使用 deprecated 属性将宏标记为 deprecated。
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
库的更改
-
slice::{concat,connect,join} 现在支持 &[T] 和 &T
-
*const T 和 *mut T 现在实现 maker::Unpin
-
Arc<[T]> 和 Rc<[T]> 实现 FormIterator<T>
-
iter::StepBy,Peekble,Take 实现 DoubleEndedIterator
-
Duration::div_duration_f32
和Duration::div_duration_f64
-
<*const T>::cast
和<*mut T>::cast
-
Duration::as_secs_f32
和Duration::as_secs_f64
-
Duration::div_f32
和Duration::div_f64
-
Duration::from_secs_f32
和Duration::from_secs_f64
-
Duration::mul_f32
和Duration::mul_f64
rustup update stable
详情请查看「阅读原文」。
开源中国征稿啦!
开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 400 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。
现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿
文章评论