Rust 的自动内存管理消除了操作指针时的错误,并防止低级内存操作引起的问题,例如在释放内存区域后访问它、空指针取消引用、缓冲区溢出等。 正在开发一个包管理器来分发库、确保组装并管理项目的依赖关系。
主
- 消除了长期存在的
缺陷 当执行整数和浮点数之间的转换时。 由于Rust编译器使用LLVM作为后端,因此类型转换操作是通过LLVM中间代码指令执行的,例如菲普图伊 ,它有一个重要的特征 - 如果结果值不适合目标类型,则行为未定义。 例如,当将类型为 f300 的浮点值 32 转换为整数类型 u8 时,结果是不可预测的,并且在不同的系统上可能会有所不同。 问题是此功能出现在未标记为“不安全”的代码中。从 Rust 1.45 开始,类型大小溢出的行为受到严格规范,“as”转换操作会检查溢出并强制将值转换为目标类型的最大值或最小值(对于上面的示例,值为300 将转换为 255)。 为了禁用此类检查,提供了额外的 API 调用“{f64, f32}::to_int_unchecked”,在不安全模式下运行。
fn 强制转换(x: f32) -> u8 {
x 为 u8
}fn 主(){
让太大= 300.0;
让太小=-100.0;
让 nan = f32::NAN;令x:f32 = 1.0;
让 y: u8 = 不安全 { x.to_int_unchecked() };println!("too_big_casted = {}",cast(too_big)); //输出255
println!("too_small_casted = {}",cast(too_small)); //输出0
println!("not_a_number_casted = {}",cast(nan)); //输出0
} - 使用稳定
程序宏 类似函数的表达式、模板和语句。 以前,此类宏不能在任何地方调用,而只能在代码的某些部分调用(作为单独的调用,不与其他代码交织在一起)。 与函数类似,扩展宏的调用方式是使 Web 框架正常工作的要求之一火箭 在 Rust 的稳定版本中。 以前,要在 Rocket 中定义处理程序时获得额外的灵活性,需要启用名为“proc_macro_hygiene”的实验性功能,该功能在 Rust 的稳定版本中不可用。 此功能现已内置到该语言的稳定版本中。 - 允许使用“char”类型的范围来迭代范围值(ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
for ch in 'a'..='z' {
打印!(“{}”,ch);
}
println!(); // 将打印“abcdefghijklmnopqrstuvwxyz” - 新的部分 API 已转移到稳定类别,包括稳定的
弧::as_ptr,
BTreeMap::remove_entry,
rc::as_ptr,
rc::Weak::as_ptr,
rc::Weak::from_raw,
rc::Weak::into_raw,
str::strip_prefix,
str::strip_suffix,
同步::弱::as_ptr,
同步::弱::from_raw,
同步::弱::into_raw,
字符::UNICODE_VERSION,
跨度::resolved_at,
跨度:: located_at,
跨度::mixed_site,
unix::process::CommandExt::arg0。 - rustc 编译器添加了对使用“target-feature”标志覆盖各种目标平台功能的支持,例如“-C target-feature=+avx2,+fma”。 还添加了新标志:
“force-unwind-tables”生成展开调用表,无论崩溃处理策略如何; “embed-bitcode”控制 LLVM 位码是否包含在生成的 rlib 中。 Cargo 中默认启用“embed-bitcode”标志,以优化构建时间和磁盘空间消耗。 - 已为mipsel-sony-psp 和thumbv7a-uwp-windows-msvc 平台提供第三级支持。 第三级涉及基本支持,但没有自动化测试和官方版本的发布。
另外,还可以注意到
本文是致力于演示低级编程和操作系统开发所需技术的系列文章中的第一篇。
来源: opennet.ru