Rust 1.34 编程语言发布

发生 系统编程语言发布 锈1.34,由 Mozilla 项目开发。 该语言专注于内存安全,提供自动内存管理,并提供一种无需使用垃圾收集器或运行时即可实现高任务并行性的方法。

Rust 的自动内存管理使开发人员免于指针操作,并防止低级内存操作引起的问题,例如释放后内存访问、空指针取消引用、缓冲区溢出等。 正在开发一个包管理器来分发库、确保组装并管理项目的依赖关系。 货物,让您一键获取程序所需的库。 支持存储库来托管库 箱子.

创新:

  • Cargo 包管理器添加了工具来处理可与 crates.io 公共注册表共存的替代包注册表。 例如,专有应用程序的开发人员现在可以使用自己的私有注册表(在 Cargo.toml 中列出依赖项时可以使用该注册表),并为其产品应用类似于 crates.io 的版本控制模型,以及将依赖项引用到两个 crate。 io 并保存到您自己的注册表中。

    将外部注册表添加到 .cargo/config (位于 $HOME 或包目录中)
    为...提供 “[registries]”部分,并且要使用外部注册表,“registry”选项出现在 Cargo.toml 中每个依赖项的描述中。 要连接到其他注册表,只需将身份验证令牌放入 ~/.cargo/credentials 文件中并运行命令
    “cargo login --registry=my-registry”并发布包 -
    “货物发布-registry=my-registry”;

  • 添加了对使用“?”运算符的完全支持。 在测试中 文档测试,允许您使用文档中的示例代码作为测试。 以前的操作员
    “?” 仅当存在“fn main()”函数或“#[test]”函数时,才可用于处理测试执行期间的错误;

  • 在使用过程宏定义的自定义属性中 提供 使用任意标记集的能力(“#[attr($tokens)]”、“#[attr[$tokens]] 和 #[attr{$tokens}]”)。 以前,元素只能使用字符串文字以树/递归形式指定,例如“#[foo(bar, baz(quux, foo = “bar”))]”,但现在可以使用枚举 (' #[range(0. .10)]') 和类似“#[bound(T: MyTrait)]”的结构;
  • 稳定类型(性状) 尝试从 и 尝试,允许进行类型转换并进行错误处理。 例如,像 from_be_bytes 这样的整数类型的方法使用数组作为输入,但数据通常是 Slice 类型,并且手动在数组和切片之间进行转换是有问题的。 借助新特征,可以通过调用 .try_into() 即时执行指定操作,例如“let num = u32::from_be_bytes(slice.try_into()?)”。 对于始终成功的转换(例如,从类型 u8 到 u32),添加了错误类型 无过失,允许透明使用
    TryFrom 用于“From”的所有现有实现;

  • 函数已被弃用 CommandExt::before_exec,它允许在运行 exec 之前执行处理程序,该处理程序在 fork() 调用后分叉的子进程的上下文中执行。 在这种情况下,父进程的某些资源(例如文件描述符和映射的内存区域)可能会重复,这可能会导致未定义的行为和库的错误操作。
    建议使用不安全函数代替before_exec CommandExt::pre_exec.

  • 稳定的有符号和无符号原子整数类型,大小范围为 8 到 64 位(例如, 原子U8),以及有符号类型 非零[8|16|32|64|128].
  • API 的新部分已移至稳定类别,包括 Any::type_id、Error::type_id、slice::sort_by_cached_key、str::escape_*、str::split_ascii_whitespace、Instant::checked_[add|sub ] 和 SystemTime 方法已稳定::checked_[add|sub]。 iter::from_fn 和 iter::successors 函数已经稳定;
  • 对于所有整数类型,实现了checked_pow、saturating_pow、wrapping_pow和overflowing_pow方法;
  • 添加了通过指定“-C linker-plugin-lto”构建选项在链接阶段启用优化的功能。

来源: opennet.ru

添加评论