Rust 1.82 通用编程语言的发布已经发布,该语言由 Mozilla 项目创建,但现在由独立的非营利组织 Rust 基金会赞助开发。 该语言专注于内存安全,并提供了实现高作业并行性的方法,同时避免使用垃圾收集器和运行时(运行时减少为标准库的基本初始化和维护)。
Rust 的内存处理方法使开发人员在操作指针时避免错误,并防止由于低级内存处理而出现的问题,例如在内存区域被释放后访问它、取消引用空指针、缓冲区溢出等。 为了分发库、提供构建和管理依赖项,该项目开发了 Cargo 包管理器。 crates.io 存储库支持托管库。
Rust 在编译时通过引用检查、跟踪对象所有权、跟踪对象生命周期(范围)以及评估代码执行期间内存访问的正确性来提供内存安全。 Rust 还提供防止整数溢出的保护,要求在使用前初始化变量,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,并提供强静态类型以最小化逻辑错误。
主要创新:
- “info”命令已添加到货物包管理器中,用于显示存储库中包的信息。
- 在“impl Trait”中添加了对“use<..>”语法的支持,该语法指定有关隐藏类型的信息。例如,“impl Trait + use<'x, T>”指定仅允许在隐藏类型中使用参数“x”和“T”。
- 提出了一种用于创建原始指针的单独语法,替换了以前使用的宏:“addr_of!(expr)”宏已被“&raw const expr”运算符替换,并且“addr_of_mut!(expr)”宏已被替换通过“&raw mut”运算符 expr”。 struct Packed { not_aligned_field: i32, } fn main() { let p = Packed { not_aligned_field: 1_82 }; // 创建原始指针的旧方法 let ptr = std::ptr::addr_of!(p.not_aligned_field); // 创建原始指针的新方法 let ptr = &raw const p.not_aligned_field;让 val = 不安全 { ptr.read_unaligned() }; }
- 现在可以在具有“unsafe”属性的 extern 块内定义具有“静态”生命周期的安全函数和常量(以前,“不安全 extern”中的所有元素只能具有“不安全”属性): unsafe extern { pub安全静态 TAU:f64;酒吧安全 fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> usize; }
- no_mangle、link_section 和 export_name 属性可能导致未定义的行为,现在被认为是不安全的,需要显式的“不安全”标志,例如: #[unsafe(no_mangle)] pub fn my_global_function() { }
- 模式匹配允许跳过空类型,例如“enum Void {}”或具有可见空字段的结构。使用 std::convert::Infallible; pub fn unwrap_without_panic (x:结果) -> T { 让 Ok(x) = x; // “Err”可以被跳过 x }
- 浮点数的类型(f32 和 f64)在处理非数字 NaN 值(0.0/0.0)时具有标准化行为,并且还允许在 const fn 中使用浮点运算。
- 汇编插入提供了使用具有“const”属性的操作数的能力,可以直接使用整数数值,而无需先将它们存储在寄存器中。 const MSG: &str = "你好,世界!\n"; unsafe { core::arch::asm!( "mov rdx, {LEN} // 将生成指令 'mov rdx, 14′", LEN = const MSG.len(), … ); }
- 允许在安全上下文中使用“static”属性寻址表达式,而无需定义不安全块(“&raw mut”和“&raw const”运算符不会影响操作数的值,仅创建指向它的指针):static mut STATIC_MUT:类型 = 类型::new( ); extern "C" { 静态 EXTERN_STATIC: 类型; } fn main() { let static_mut_ptr = &raw mut STATIC_MUT;让 extern_static_ptr = &raw const EXTERN_STATIC; }
- API 的新部分已移至稳定类别,包括特性的方法和实现已稳定:
- std::thread::Builder::spawn_unchecked
- std::str::CharIndices::offset
- std::选项::选项::is_none_or
- [T]::已排序
- [T]::is_sorted_by
- [T]::is_by_key排序
- 迭代器::已排序
- 迭代器::is_sorted_by
- 迭代器::is_sorted_by_key
- std::future::Ready::into_inner
- std::iter::repeat_n
- 为 Take 实现 DoubleEndedIterator
来源: opennet.ru
