Rust 编程语言 2021 版 (1.56)

系统编程语言 Rust 1.56 的发布,由 Mozilla 项目创建,但现在在独立的非营利组织 Rust 基金会的赞助下开发,已经发布。 除了常规版本号外,该版本还标记为 Rust 2021,标志着过去三年中提出的更改已趋于稳定。 Rust 2021 还将作为未来三年功能构建的基础,类似于 Rust 2018 版本在过去三年中如何成为语言开发的基础。

为了保持兼容性,开发人员可以在他们的程序中使用“2015”、“2018”和“2021”标签将程序链接到与所选 Rust 版本对应的语言状态切片。 引入修订以分离不兼容的更改,并通过“[package]”部分中的“edition”字段在货物包的元数据中进行配置。 例如,2018 版包括在 2018 年底稳定的功能,还涵盖了未来不违反兼容性的所有更改。 2021 版还包括当前 1.56 版本中提出并批准在未来实施的兼容性破坏功能。 除了语言本身,编辑们还考虑了工具和文档的状态。

Rust 2021 中修复的主要不兼容性是:

  • 在闭包中单独捕获 - 闭包现在可以捕获单个字段名称而不是整个 ID。 例如,“|| ax + 1" 只会捕获 "ax" 而不是 "a"。
  • 数组的 IntoIterator 特性:array.into_iter() 允许您按值而不是按引用迭代数组的元素。
  • “|”表达式的处理已在 macro_rules 中更改模式中的(逻辑或运算)- 匹配中的“:pat”说明符现在尊重模式“A | 乙”。
  • 货物包管理器默认包含功能解析器的第二个版本,在 Rust 1.51 中引入了对它的支持。
  • 特征 TryFrom、TryInto 和 FromIterator 已添加到 prelude 标准库模块中。
  • panic!(..) 和 assert!(expr, ..) 宏现在总是使用 format_args!(..) 来格式化字符串,类似于 println!()。
  • 表达式 ident#、ident"..." 和 ident'...' 在该语言的语法中保留。
  • bare_trait_objects 和 ellipsis_inclusive_range_patterns 警告已移至错误类别。

Rust 1.56 中的新功能:

  • 在 Cargo.toml 中,在“[package]”部分,添加了 rust-version 字段,通过它可以确定 crate 包支持的最低 Rust 版本。 如果当前版本与指定参数不匹配,Cargo 将异常中止。
  • 当使用“binding @pattern”表达式进行模式匹配时,支持指定额外的绑定(例如,“let matrix @Matrix { row_len, .. } = get_matrix();”)。
  • API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • 核心::恐慌::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::收缩到
    • 字符串::收缩到
    • OsString::shrink_to
    • PathBuf::shrink_to
    • 二进制堆::shrink_to
    • VecDeque::收缩到
    • HashMap::shrink_to
    • 哈希集::收缩到
  • “const”属性,它决定了在任何上下文中使用它而不是常量的可能性,在函数中使用
    • std::mem::嬗变
    • [T]::首先
    • [T]::首先分割
    • [T]::最后
    • [T]::split_last
  • 编译器已切换为使用 LLVM 版本 13。
  • 实现了对 aarch64-apple-ios-sim 平台的 32 级支持和对 powerpc-unknown-freebsd 和 riscvXNUMXimc-esp-espidf 平台的 XNUMX 级支持。 第三层意味着基本支持,但没有自动化测试、发布官方构建和检查构建代码的能力。

回想一下,Rust 语言专注于安全内存管理,提供自动内存管理,并提供一种实现作业执行的高度并行性的方法,同时无需使用垃圾收集器和运行时(运行时减少为基本的初始化和维护标准库)。

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

来源: opennet.ru

添加评论