Rust 1.38 编程语言发布

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

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

创新:

  • 添加了管道式编译模式(pipelined),在该模式下,依赖项元数据可用后就开始构建依赖包,而无需等待其编译完成。 编译包时,不需要完全组装依赖项,只需定义元数据,其中包括类型、依赖项和导出元素的列表。 元数据在编译过程的早期就可用,因此现在可以更早地编译链接包。 当构建单个包时,建议的模式不会影响性能,但如果构建涵盖具有分支依赖项的包,则总体构建时间可以减少10-20%;
  • 确保检测到功能的错误使用 std::mem::未初始化 и std::mem::归零。 例如, std::mem::uninitialized 可以方便地快速创建数组,但它会误导编译器,因为它看起来已初始化,但实际上该值仍未初始化。 mem::uninitialized 函数已被标记为已弃用,建议使用中间类型代替 也许单位。 至于 mem::zeroed,此函数可能会导致无法接受零值的类型出现问题。

    为了帮助识别未定义的行为,新版本向编译器添加了 lint 检查,以检测 mem::uninitialized 或 mem::zeroed 的一些问题。 例如,现在尝试将 mem::uninitialized 或 mem::zeroed 与类型 &T 和 Box<T> 一起使用时会出现错误,这些类型表示不能接受空值的指针对象;

  • “#[deprecated]”属性已扩展,允许将 crate 包标记为过时并计划将来删除。 从 Rust 1.38 开始,该属性也可用于宏;
  • 添加了在子模块中使用“#[global_allocator]”属性的功能;
  • 新增功能 std::any::类型名称,它允许您找出类型的名称,这对于调试目的很有用。 例如,在程序执行期间,您可以找出调用函数的类型:

    fn gen_value<T:默认>() -> T {
    println!("初始化 {} 的实例", std::any::type_name::<T›());
    默认::默认()
    }

    fn 主(){
    让 _: i32 = gen_value(); # 将打印“i32”
    让_:字符串= gen_value(); # 将打印“alloc::string::String”
    }

  • 标准库的扩展功能:
    • slice::{concat, connect, join} 现在除了 &T 之外还可以获取值 &[T];
    • “*const T”和“*mut T”现在实现标记::取消固定;
    • “Arc<[T]>”和“Rc<[T]>”现在实现 FromIterator<T>;
    • iter::{StepBy, Peekable, Take} 现在实现 DoubleEndedIterator。
    • ascii::EscapeDefault 实现克隆和显示。
  • 新的部分 API 已转移到稳定类别,包括已稳定的方法
    • <*const T>::cast, <*mut T>::cast,
    • 持续时间::as_secs_f{32|64},
    • 持续时间::div_duration_f{32|64},
    • 持续时间::div_f{32|64},
    • 持续时间::from_secs_f{32|64},
    • 持续时间::mul_f{32|64},
    • 除法运算与余数
      div_euclid 和 rem_euclid 适用于所有整数基元;

  • 添加了对多次指定“--features”选项的支持,以在货物包管理器中启用不同的功能;
  • 编译器提供了第三个 水平 支持目标平台 aarch64-uwp-windows-msvc、i686-uwp-windows-gnu、i686-uwp-windows-msvc、x86_64-uwp-windows-gnu、x86_64-uwp-windows-msvc 目标、armv7-unknown-linux -gnueabi、armv7-unknown-linux-musleabi、hexagon-unknown-linux-musl 和 riscv32i-unknown-none-elf。 第三级涉及基本支持,但没有自动化测试和官方版本的发布。

来源: opennet.ru

添加评论