Rust 1.59.0 稳定版发布,正式支持内联汇编

栏目: 软件资讯 · 发布时间: 4年前

内容简介:Rust 1.59.0 稳定版已正式发布,新版本最值得关注的特性是支持在代码中内联汇编 (Inline assembly),其他变化包括:引入解构式赋值、默认关闭增量编译,以及 Const 泛型参数支持设置默认值等。 内联汇编 (Inline ...

Rust 1.59.0 稳定版已正式发布,新版本最值得关注的特性是支持在代码中内联汇编 (Inline assembly),其他变化包括:引入解构式赋值、默认关闭增量编译,以及 Const 泛型参数支持设置默认值等。

内联汇编 (Inline assembly)

此项特性的使用场景主要是控制底层执行,或者访问特定的机器指令

例如面向 x86-64 目标平台进行编译时,可以用以下的方式编写代码:

use std::arch::asm;

// Multiply x by 6 using shifts and adds
let mut x: u64 = 4;
unsafe {
    asm!(
        "mov {tmp}, {x}",
        "shl {tmp}, 1",
        "shl {x}, 2",
        "add {x}, {tmp}",
        x = inout(reg) x,
        tmp = out(reg) _,
    );
}
assert_eq!(x, 4 * 6);

可以看到,此处格式化字符串的语法与 Rust 格式化字符串中使用的相同,除了asm!global_asm!宏也支持这种用法。

内联汇编中使用的汇编语言和指令取决于目标架构。目前 Rust 编译器支持以下架构的内联汇编:

  • x86 & x86-64
  • ARM
  • AArch64
  • RISC-V

点此查看 更多示例 和 文档

解构式赋值 (Destructuring assignments)

通过此项特性,支持在赋值语句的左侧等式使用元组、切片和结构体模式 (struct patterns)。

let (a, b, c, d, e);

(a, b) = (1, 2);
[c, .., d, _] = [1, 2, 3, 4, 5];
Struct { e, .. } = Struct { e: 5, f: 3 };

assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);

不过要注意使用 +=运算符的赋值语句尚未支持解构式赋值。

Const 泛型参数支持设置默认值

支持为 Const 泛型参数设置默认值,如下:

struct ArrayStorage<T, const N: usize = 2> {
    arr: [T; N],
}

impl<T> ArrayStorage<T> {
    fn new(a: T, b: T) -> ArrayStorage<T> {
        ArrayStorage {
            arr: [a, b],
        }
    }
}

在此前的版本中,类型参数必须要放在所有 const 参数之前,目前此限制已放宽,支持将它们交替排列使用。

fn cartesian_product<
    T, const N: usize,
    U, const M: usize,
    V, F
>(a: [T; N], b: [U; M], f: F) -> [[V; N]; M]
where
    F: FnMut(&T, &U) -> V
{
    // ...
}

默认关闭增量编译

Rust 1.59.0 版本已默认禁用增量编译功能(可通过环境变量显式地启用:RUSTC_FORCE_INCREMENTAL=1 ),此项变更降低了已知 bug #94124 的影响,该 bug 会导致在增量编译过程中引发反序列化错误和 panic。

开发团队表示,他们会在 1.60.0 版本修复这个 bug(六周内),届时如果没有出现意外问题,增量编译会重新设置为默认启用。

稳定的 API 列表

部分方法和 trait 实现已稳定化,点此查看详情

下载地址:https://github.com/rust-lang/rust/releases/tag/1.59.0


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++数值算法(第二版)

C++数值算法(第二版)

William T.Vetterling、Brian P.Flannery、Saul A.Teukolsky / 胡健伟、赵志勇、薛运华 / 电子工业出版社 / 2005年01月 / 68.00

本书选材内容丰富,除了通常数值方法课程的内容外,还包含当代科学计算大量用到的专题,如求特殊函数值、随机数、排序、最优化、快速傅里叶变换、谱分析、小波变换、统计描述和数据建模、常微分方程和偏微分方程数值解、若干编码算法和任意精度的计算等。 本书科学性和实用性统一。每个专题中,不仅对每种算法给出了数学分析和比较,而且根据作者的经验对算法做出了评论和建议,并在此基础上给出了用C++语言编写的实用程......一起来看看 《C++数值算法(第二版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具