Rust 1.47 编程语言发布

由 Mozilla 项目创建的 Rust 系统编程语言 1.47 版本已经发布。该语言专注于内存安全,提供自动内存管理,并提供在不使用垃圾收集器或运行时的情况下实现高任务并行性的手段(运行时被简化为标准库的基本初始化和维护)。

Rust 的自动内存管理消除了操作指针时的错误,并防止低级内存操作引起的问题,例如在释放内存区域后访问它、空指针取消引用、缓冲区溢出等。为了分发库、确保组装和管理依赖关系,该项目正在开发 Cargo 包管理器。 crates.io 存储库支持托管库。

主要创新:

  • 实现了对任意大小数组的特征的支持。以前,由于无法为所有整数值定义泛型函数,标准库仅为大小最多为 32 个元素的数组提供内置特征支持(每个大小的特征都是静态定义的)。由于 const 泛型功能的创建,可以为任何数组大小定义泛型函数,但它们尚未包含在该语言的稳定功能中,尽管它们已在编译器中实现并且现在已在标准库中使用对于任何大小的数组类型。
    例如,Rust 1.47 中的以下构造将打印数组的内容,尽管以前它会导致错误:

fn 主(){
让 xs = [0; 34];
println!("{:?}", xs);
}

  • 提供较短跟踪(回溯)的输出,紧急情况下的输出。 在大多数情况下,不感兴趣的元素会扰乱输出并分散对问题主要原因的注意力,这些元素会从跟踪中排除。 要返回完整跟踪,您可以使用环境变量“RUST_BACKTRACE=full”。 例如,对于代码

fn 主(){
恐慌!();
}

之前,trace 是分 23 个阶段输出的,现在将减少到 3 个阶段,让您立即掌握本质:

线程“main”因“显式恐慌”而恐慌,src/main.rs:2:5
堆栈回溯:
0: std::恐慌::begin_panic
在/rustc/d…d75a/library/std/src/panicking.rs:497
1:游乐场::主要
在 ./src/main.rs:2
2:核心::操作::函数::FnOnce::call_once
在/rustc/d…d75a/library/core/src/ops/function.rs:227

  • rustc 编译器已更新为使用 LLVM 11 进行构建(Rust 使用 LLVM 作为代码生成的后端)。同时,保留了使用旧版 LLVM(最高版本 8)进行构建的能力,但默认情况下(在 rust-lang/llvm-project 中)现在使用 LLVM 11。预计 LLVM 11 的发布将在未来进行。天。
  • 在 Windows 平台上,rustc 编译器提供对启用控制流完整性检查(Control Flow Guard)的支持,使用“-C control-flow-guard”标志激活。在其他平台上,此标志暂时被忽略。
  • API 的新部分已转移到稳定类别,包括稳定的 Ident::new_raw、Range::is_empty、RangeInclusive::is_empty、Result::as_deref、Result::as_deref_mut、Vec::leak、pointer::offset_from 、f32::TAU 和 f64::TAU。
  • “const”属性决定了在任何上下文中使用它而不是常量的可能性,在方法中使用:
    • 对于除零之外的所有整数都是新的;
    • 所有整数的checked_add、checked_sub、checked_mul、checked_neg、checked_shl、checked_shr、saturating_add、saturating_sub 和 saturating_mul;
    • is_ascii_alphabetic、is_ascii_uppercase、is_ascii_lowercase、is_ascii_alphanumeric、is_ascii_digit、is_ascii_hexdigit、is_ascii_punctuation、is_ascii_graphic、is_ascii_whitespace 和 is_ascii_control 用于 char 和 u8 类型。
  • 对于 FreeBSD,使用 FreeBSD 11.4 中的工具包(FreeBSD 10 不支持 LLVM 11)。

取自 opennet.ru

来源: linux.org.ru

添加评论