系统编程语言 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