Rust 1.47 编程语言发布

发表 系统编程语言版本1.47 ,由 Mozilla 项目创建。 该语言关注内存安全,提供自动内存管理,并提供了一种无需使用即可实现高任务并行性的手段 垃圾收集器 и 运行 (运行时归结为标准库的基本初始化和维护)。

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

创新:

  • 实现了对类型的支持 数组 任何尺寸。 以前,由于无法为所有整数值定义泛型函数,标准库仅针对大小最多为 32 个元素的数组提供内置特征支持(每个大小的特征都是静态定义的)。 由于常量泛型(“const generics”)功能的创建,为任何数组大小定义泛型函数成为可能,但它们尚未包含在稳定语言功能中,尽管它们在编译器中实现并且是现在 涉及 在标准库中任何大小的数组特征。

    例如,Rust 1.47 中的以下构造将打印数组的内容,尽管以前它会导致错误:

    fn 主(){
    让 xs = [0; 34];

    println!("{:?}", xs);
    }

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

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

    以前,迹线分 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 (锈 使用 LLVM 作为后端 代码生成)。 同时,保留了使用旧版 LLVM(最高版本 8)进行构建的能力,但默认情况下(在 rust-lang/llvm-项目)现在正在使用 LLVM 11。LLVM 11 预计将在未来几天内发布。
  • 在 Windows 平台上,rustc 编译器提供对启用控制流完整性检查(Control Flow Guard)的支持,使用“-C control-flow-guard”标志激活。 在其他平台上,此标志暂时被忽略。
  • 新的部分 API 已转移到稳定类别,包括稳定的
    识别::new_raw,
    范围::is_empty,
    范围包含::is_empty,
    结果::as_deref,
    结果::as_deref_mut,
    向量::泄漏,
    指针::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

添加评论