Rust 1.60 编程语言发布

Rust 1.60 通用编程语言的发布已经发布,该语言由 Mozilla 项目创建,但现在由独立的非营利组织 Rust 基金会赞助开发。 该语言专注于内存安全,并提供了实现高作业并行性的方法,同时避免使用垃圾收集器和运行时(运行时减少为标准库的基本初始化和维护)。

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

Rust 在编译时通过引用检查、跟踪对象所有权、跟踪对象生命周期(范围)以及评估代码执行期间内存访问的正确性来提供内存安全。 Rust 还提供防止整数溢出的保护,要求在使用前初始化变量,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,并提供强静态类型以最小化逻辑错误。

主要创新:

  • rustc 编译器有一个基于 LLVM 的稳定系统,用于生成覆盖率数据,用于在测试期间评估代码覆盖率。 要在汇编期间启用覆盖率数据,必须使用“-Cinstrument-coverage”标志,例如,使用“RUSTFLAGS =”-C Instrument-coverage“cargo build”命令启动汇编。 运行以这种方式编译的可执行文件后,default.profraw 文件将保存在当前目录中,您可以使用 llvm-tools-preview 组件中的 llvm-profdata 实用程序进行处理。 然后,可以将 llvm-profdata 处理的输出传递给 llvm-cov 以生成带注释的代码覆盖率报告。 有关源代码链接的信息取自正在检查的可执行文件,其中包括有关覆盖计数器和代码之间连接的必要数据。 1| 1|fn main() { 2| 1| println!("你好,世界!"); 3| 1|}
  • 在货物包管理器中,对“-timings”标志的支持已经稳定,其中包括生成有关构建进度和每个步骤的执行时间的详细报告。 该报告可能有助于优化装配过程的性能。
  • Cargo 包管理器为条件编译和选择可选依赖项的机制提供了新的语法,通过在 [features] 部分列出命名属性列表在 Cargo.toml 文件中进行配置,并通过在包构建期间启用这些属性来激活使用“--features”标志。 新版本增加了对单独命名空间中的依赖和弱依赖的支持。

    在第一种情况下,可以在“[features]”部分中使用带有前缀“dep:”的元素来显式链接到可选依赖项,而无需将此依赖项隐式表示为功能。 在第二种情况下,添加了对使用“?”符号进行标记的支持。 ("package-name?/feature-name") 仅当某些其他属性包含给定的可选依赖项时才应包含可选依赖项。 例如,在下面的示例中,启用 serde 属性将启用“serde”依赖项,以及“rgb”依赖项的“serde”属性,但前提是在其他地方启用了“rgb”依赖项:[依赖项] serde = { 版本 = " 1.0.133", 可选 = true } rgb = { 版本 = "0.8.25", 可选 = true } [功能] serde = ["dep:serde", "rgb?/serde"]

  • 已恢复对上一版本中禁用的增量编译的支持。 导致该功能被禁用的编译器错误已得到解决。
  • 解决了为即时计时器提供单调计时保证的一些问题,该保证考虑了系统在睡眠模式下花费的时间。 以前,只要有可能就使用操作系统 API 来操作计时器,这没有考虑到打破时间单调性的问题情况,例如硬件问题、虚拟化的使用或操作系统中的错误。
  • API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
    • 弧::新循环
    • Rc::new_circular
    • 切片::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • 大小::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • 使用::abs_diff
    • 显示 io::ErrorKind
    • 来自退出代码
    • 不是为了 ! (输入“从不”)
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_Detected!
  • 已为 mips64-openwrt-linux-musl* 和 armv7-unknown-linux-uclibceabi (softfloat) 平台实现了第三级支持。 第三级涉及基本支持,但没有自动化测试、发布官方构建或检查代码是否可以构建。
  • 编译器已切换为使用 LLVM 14。

此外,您还可以注意:

  • 添加了对使用 rustc_codegen_gcc 后端引导 rustc 编译器的支持,这允许您使用 GCC 项目中的 libgccjit 库作为 rustc 中的代码生成器,这允许 rustc 为 GCC 中可用的架构和优化提供支持。 编译器升级意味着能够在 rustc 中使用基于 GCC 的代码生成器来构建 rustc 编译器本身。 在实用方面,此功能允许您为 rustc 以前不支持的架构构建 rust 程序。
  • uutils coreutils 0.0.13 工具包已发布,其中正在开发用 Rust 语言重写的 GNU Coreutils 包的类似版本。 Coreutils 附带了一百多个实用程序,包括 sort、cat、chmod、chown、chroot、cp、date、dd、echo、hostname、id、ln 和 ls。 该项目的目标是创建 Coreutils 的跨平台替代实现,能够在 Windows、Redox 和 Fuchsia 平台上运行,并在宽松的 MIT 许可证(而不是 GPL Copyleft 许可证)下分发。

    新版本改进了许多实用程序的实现,包括显着提高了 cp、dd、df、split 和 tr 实用程序与 GNU 项目中对应实用程序的兼容性。 提供在线文档。 clap 解析器用于解析命令行参数,它改进了“--help”标志的输出,并添加了对长命令缩写的支持(例如,您可以指定“ls -col”而不是“ls -color” ”)。

来源: opennet.ru

添加评论