系统编程语言 Rust 1.53 已发布,该语言由 Mozilla 项目创建,但现在由独立非营利组织 Rust 基金会赞助开发。 该语言专注于内存安全,提供自动内存管理,并提供了无需使用垃圾收集器或运行时即可实现高任务并行性的方法(运行时被简化为标准库的基本初始化和维护)。
Rust 的自动内存管理使开发人员在操作指针时避免错误,并防止由于低级内存操作而出现的问题,例如在释放后访问内存区域、取消引用空指针、缓冲区溢出等。 为了分发库、提供构建和管理依赖项,该项目开发了 Cargo 包管理器。 crates.io 存储库支持托管库。
主要创新:
- 对于数组,已经实现了 IntoIterator 特征,它允许您按值组织数组元素的迭代: for i in [1, 2, 3] { .. }
也可以将数组传递给接受迭代器的方法,例如: let set = BTreeSet::from_iter([1, 2, 3]); for (a, b) in some_iterator.chain([1]).zip([1, 2, 3]) { .. }
以前,IntoIterator 仅针对数组引用实现,即迭代值需要使用引用(“&[1, 2, 3]”)或“[1, 2, 3].iter()”。 数组的 IntoIterator 实现受到早期编译器从 array.into_iter() 到 (&array).into_iter() 转换导致的兼容性问题的阻碍。 这些问题已通过解决方法解决 - 编译器将继续将 array.into_iter() 转换为 (&array).into_iter() ,就好像没有 IntoIterator 特征的实现一样,但仅在使用“.into_iter(”调用该方法时)” 语法,并且不触及“in [1, 2, 3]”、“iter.zip([1, 2, 3])”、“IntoIterator::into_iter([1, 2, 3]”形式的调用)”。
- 可以指定表达式“|” (逻辑或运算)在模板的任何部分,例如,而不是“Some(1) | Some(2)" 你现在可以写 "Some(1 | 2)": 匹配结果 { Ok(Some(1 | 2)) => { .. } Err(MyError { kind: FileNotFound | PermissionDenied, .. }) => { .. } _ => { .. } }
- 允许在标识符中使用非 ASCII 字符,包括 Unicode UAX 31 规范中定义的任何国家字符,但不包括表情符号字符。 如果使用不同但相似的字符,编译器将发出警告。 const BLÅHAJ: &str = "🦈"; struct 人 { 名字: String, } 让 α = 1; 让我们= 2; 警告:“s”和“s”之间的标识符对被认为容易混淆
- 新的部分 API 已转移到稳定类别,包括以下稳定的 API:
- 数组::from_ref
- 数组::from_mut
- AtomicBool::fetch_update
- AtomicPtr::fetch_update
- BTreeSet::保留
- BTreeMap::保留
- BufReader::seek_relative
- cmp::min_by
- cmp::min_by_key
- cmp::max_by
- cmp::max_by_key
- DebugStruct::finish_non_exhaustive
- 持续时间::零
- 持续时间::最长
- 持续时间::is_zero
- 持续时间::saturating_add
- 持续时间::saturating_sub
- 持续时间::saturating_mul
- f32::is_subnormal
- f64::is_subnormal
- 数组的 IntoIterator
- {整数}::位
- io::错误::不支持
- NonZero*::leading_zeros
- NonZero*::trailing_zeros
- 选项::插入
- 排序::is_eq
- 订购::is_ne
- 订购::is_lt
- 订购::is_gt
- 订购::is_le
- 订购::is_ge
- OsStr::make_ascii_lowercase
- OsStr::make_ascii_uppercase
- OsStr::to_ascii_lowercase
- OsStr::to_ascii_uppercase
- OsStr::is_ascii
- OsStr::eq_ignore_ascii_case
- 可查看::peek_mut
- RC::increment_strong_count
- RC::decrement_strong_count
- 切片::IterMut::as_slice
- AsRef<[T]> 用于 slice::IterMut
- impl SliceIndex for (绑定, 边界)
- Vec::extend_from_within
- 对 wasm64-unknown-unknown 平台的第三级支持已经实现。 第三级涉及基本支持,但没有自动化测试、发布官方构建或检查代码是否可以构建。
- 默认情况下,Cargo 包管理器已更改为使用名称“main”作为 Git 存储库 (HEAD) 的主分支。 托管在使用名称 main 而不是 master 的存储库中的依赖项不再需要配置branch =“main”。
- 在编译器中,对LLVM最低版本的要求提高到LLVM 10。
此外,我们还可以注意到为将 Rust 语言开发组件的工具集成到 Linux 内核中的开发提供了资金。 这项工作将在 ISRG 组织(互联网安全研究小组)赞助下的 Prossimo 项目框架内进行,该组织是 Let's Encrypt 项目的创始人,致力于推动 HTTPS 和技术的发展,以提高网络安全性。互联网。 这些资金将由谷歌提供,谷歌将支付 Rust-for-Linux 项目作者 Miguel Ojeda 的工作费用。 此前,ISRG 和 Google 已经资助为 curl 实用程序创建替代 HTTP 后端,并为 Apache http 服务器开发新的 TLS 模块。
据微软和谷歌称,大约 70% 的漏洞是由不安全的内存处理引起的。 预计使用 Rust 语言开发设备驱动程序等内核组件将降低因不安全内存处理而导致的漏洞风险,并消除诸如在释放内存区域后访问内存区域以及超出缓冲区边界等错误。
Rust 在编译时通过引用检查、跟踪对象所有权和对象生命周期(作用域)以及在代码执行期间评估内存访问的正确性来提供内存安全处理。 Rust 还提供防止整数溢出的保护,要求在使用前强制初始化变量值,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,提供强静态类型以最小化逻辑错误。
来源: opennet.ru