Rust 1.79.0发布

Rust 1.79.0发布 ,此版本中的一些主要新功能和改进:

内联 const 表达式

内联表达式(例如块)现在在表达式位置上是稳定的,允许显式输入 const 上下文而无需额外声明。这使得涉及常量的代码更加简洁和可读,尤其是在通用上下文中。

以前:

const EMPTY: Option<Vec > = None;

let foo = [EMPTY; 100];

现在:

let foo = [const { None }; 100];

值得注意的是,这对于通用上下文也是如此,以前需要使用关联常量的详细特征声明:

fn create_none_array<T, const N: usize>() -> [Option ; N] {

**const** { None:: }; N

}

这使得代码更加简洁,更易于阅读。

关联类型位置的Bound

Rust 1.79 稳定了在其他特征bound边界内直接指定关联类型边界bound的能力:

T: Trait<Assoc: Bounds...>

例如。这样就避免了仅仅为了约束关联类型而需要额外的泛型类型。

这一功能允许在一些地方指定界限,而在以前,这些地方要么是不可能的,要么是对使用施加了额外的、不必要的限制:

where 子句

在这个位置上,相当于将边界分成两个(或多个)where 子句。

例如,

where T:Trait<Assoc: Bound>

相当于

where T:Trait, ::Assoc: Bound

Supertraits

与 where 子句不同,在使用trait 时,通过新语法指定的约束是隐含的。

语法示例:

trait CopyIterator: Iterator<Item: Copy> {}.

关联类型项边界(Associated type item bounds)

这允许对与 trait 关联类型相关联的嵌套刚性投影进行约束,例如

trait Trait { type Assoc: Trait2<Assoc2: Copy>; }

不透明类型边界(RPIT、TAIT)

可以约束与不透明类型相关联的关联类型,而无需命名不透明类型。例如, impl Iterator<Item:Copy> 定义了一个迭代器,它的项是 Copy,而无需实际命名该项绑定。

延长自动临时寿命延长

在构造中被立即引用的暂时项现在会在match 和 if 构造中自动进行生命周期扩展。这与块构造中暂时项的生命周期扩展行为相同。

if 构造

let a = if true {

..;

&temp() // used to error, but now gets lifetime extended } else {

..;

&temp() // used to error, but now gets lifetime extended

};

match构造

let a = match () {

_ => {

..;

&temp() // used to error, but now gets lifetime extended }

};

现在

let a = {

..;

&temp() // lifetime is extended

};

这种行为是向后兼容的,因为以前这些程序会出现编译失败。

为标准库启用框架指针

标准库现在默认编译时启用了框架指针,从而可以更轻松地分析使用它的程序。

Rust 项目发布的标准库现在在编译时使用了 -Cforce-frame-pointers=yes,这样下游用户就能更轻松地配置自己的程序。需要注意的是,标准库还会继续提供行级调试信息(如 DWARF),不过 Cargo 发布的配置文件默认会删除这些信息。

相关推荐
killerbasd1 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
橘子编程2 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
叫我一声阿雷吧2 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰3 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong233 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
天若有情6734 小时前
【C++原创开源】formort.h:一行头文件,实现比JS模板字符串更爽的链式拼接+响应式变量
开发语言·javascript·c++·git·github·开源项目·模版字符串
yuki_uix4 小时前
重排、重绘与合成——浏览器渲染性能的底层逻辑
前端·javascript·面试
止观止5 小时前
拥抱 ESNext:从 TC39 提案到生产环境中的现代 JS
开发语言·javascript·ecmascript·esnext
时寒的笔记5 小时前
js逆向7_案例惠nong网
android·开发语言·javascript
吴声子夜歌5 小时前
ES6——Generator函数详解
前端·javascript·es6