Rust 1.80加入了多项提高效率、程序代码安全性和灵活性的功能更新,标准函数库添加LazyCell和LazyLock延迟初始化类型,并且强化模式(Pattern)比对的灵活性,而Rust组件管理器Cargo现在则会检查所有已知的cfg名称和值,并且侦测错误配置。
Rust新加入的LazyCell和LazyLock类型简化延迟初始化的实例,使得程序在需要时才进行计算和资源分配的程序代码,变得更加容易编写。延迟初始化操作对于需要按需加载资源的场景特别有用,能够在需要时才分配资源,这将可大幅提高大型应用的启动速度和执行效率,从资源管理的角度来说,对于需要大量内存或是其他系统资源的对象,可以更有效地管理资源,有助于减少程序整体内存使用量。
官方现在直接在标准函数库中加入LazyCell和LazyLock,让实例延迟初始化功能更简单,消除需要的样板程序代码,同时也降低了对外部相依项目的依赖,简化项目管理工作。
LazyLock与LazyCell的差异在于,LazyLock为线程安全,相较于LazyCell只适用于单线程环境,LazyLock实例了Sync trait,因此可在多线程环境中安全使用,不过也由于LazyLock需要处理线程同步,因此会产生额外的性能开销。
Rust 1.70加入了同样用于延迟初始化的OnceCell和OnceLock类型,不过LazyCell和LazyLock本身就包含了初始化逻辑,不像是OnceCell、OnceLock需要外部方法来提供初始化逻辑,因此LazyCell和LazyLock在使用上更为简单,不过当初始化逻辑需要依据执行条件变化,则OnceCell和OnceLock更加灵活。
Rust 1.80通过检查cfg名称和值,来强化程序代码的正确性和可靠性。该功能可以侦测和警告开发者可能的cfg名称或值的拼写错误,避免因为错误条件编译配置所导致的问题,确保开发者只使用已定义和预期的cfg条件,减少意外行为。
由于cfg检查功能在编译阶段就能发现潜在的配置问题,因此大幅降低在执行时才发现错误的风险,提高了整体的程序代码品质和开发效率。
Rust 1.80还引入了一个能够扩展模式比对范围的新功能,开发者已可以使用排他范围(Exclusive Range)语法a..b或..b,其提供类似Range和RangeTo表达式的功能,该表达式在处理连续范围时更方便,允许范围之间没有间格或是重叠,使某些类型的程序代码更清楚且不容易出错,维持语言的一致性和表达性。