Rust 1.58 编程语言发布

通用编程语言 Rust 1.58 已发布,该语言由 Mozilla 项目创建,但现在由独立非营利组织 Rust 基金会赞助开发。该语言专注于内存安全,提供自动内存管理,并提供了无需使用垃圾收集器或运行时即可实现高任务并行性的方法(运行时被简化为标准库的基本初始化和维护)。

Rust 的自动内存管理使开发人员在操作指针时避免错误,并防止由于低级内存操作而出现的问题,例如在释放后访问内存区域、取消引用空指针、缓冲区溢出等。 为了分发库、提供构建和管理依赖项,该项目开发了 Cargo 包管理器。 crates.io 存储库支持托管库。

主要创新:

  • 在行格式化块中,除了以前可用的按编号和名称替换行后显式列出的变量的功能之外,还实现了通过向行添加表达式“{identifier}”来替换任意标识符的功能。例如: // 以前支持的结构: println!("Hello, {}!", get_person()); println!("你好,{0}!", get_person()); println!("你好,{person}!", person = get_person()); // 现在你可以指定 let person = get_person(); println!("你好,{person}!");

    标识符也可以直接在格式选项中指定。让(宽度,精度)= get_format(); for (名称, 分数) in get_scores() { println!("{名称}: {分数:宽度$.精度$}"); }

    新的替换适用于所有支持字符串格式定义的宏,但“panic!”宏除外。在 Rust 语言的 2015 和 2018 版本中,panic!("{ident}") 被视为常规字符串(在 Rust 2021 中,替换有效)。

  • Windows 平台上 std::process::Command 结构的行为已更改,因此在执行命令时,出于安全原因,它不再查找当前目录中的可执行文件。当前目录被排除在外,因为如果程序在不受信任的目录中运行,则它可能被用来执行恶意代码 (CVE-2021-3013)。新的可执行文件检测逻辑涉及搜索 Rust 目录、应用程序目录、Windows 系统目录以及 PATH 环境变量中指定的目录。
  • 标准库扩展了标记为“#[must_use]”的函数数量,以便在忽略返回值时发出警告,这有助于识别由于假设函数将更改值而不是返回新值而导致的错误。
  • API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
    • 元数据::is_symlink
    • 路径::is_symlink
    • {整数}::saturating_div
    • 选项::unwrap_unchecked
    • 结果::unwrap_unchecked
    • 结果::unwrap_err_unchecked
  • 函数中使用了“const”属性,它决定了在任何上下文中使用它而不是常量的可能性:
    • 持续时间::新
    • 持续时间::checked_add
    • 持续时间::saturating_add
    • 持续时间::checked_sub
    • 持续时间::saturating_sub
    • 持续时间::checked_mul
    • 持续时间::saturating_mul
    • 持续时间::checked_div
  • 允许在“const”上下文中取消引用“*const T”指针。
  • 在 Cargo 包管理器中,rust_version 字段已添加到包元数据中,并且“--message-format”选项已添加到“cargo install”命令中。
  • 编译器实现了对 CFI(控制流完整性)保护机制的支持,该机制在每次间接调用之前添加检查,以检测某些形式的未定义行为,这些行为可能会导致违反正常执行顺序(控制流)。使用更改存储在函数内存中的指针的漏洞。
  • 编译器添加了对 LLVM 覆盖率比较格式的版本 5 和 6 的支持,用于在测试期间评估代码覆盖率。
  • 在编译器中,对LLVM最低版本的要求提高到LLVM 12。
  • 已实现对 x86_64-unknown-none 平台的第三级支持。第三级涉及基本支持,但没有自动化测试、发布官方构建或检查代码是否可以构建。

此外,我们还可以注意到 Microsoft 发布了 Rust for Windows 0.30 库,它允许您使用 Rust 语言为 Windows 操作系统开发应用程序。该套件包括两个 crate 包(windows 和 windows-sys),通过它们可以访问 Rust 程序中的 Win API。 API 支持的代码是根据描述 API 的元数据动态生成的,这使您不仅可以实现对现有 Win API 调用的支持,还可以实现对将来出现的调用的支持。新版本增加了对UWP(通用Windows平台)目标平台的支持,并实现了Handle和Debug类型。

来源: opennet.ru

添加评论