Rust 1.88.0更新:IF语句连一行和naked函数


Rust 编程语言更新啦!1.88.0 版本带来超酷新功能,让你的代码更强大!

Rust 是个什么语言呢?简单来说,它就像一个超级英雄,能帮助大家写出又快又安全又靠谱的软件。想象一下,你平时用的电脑软件、手机App,甚至游戏,如果背后是用 Rust 写的,那它们就会更稳定,不容易崩溃,运行起来也像飞一样!

怎么升级到最新版?
如果你之前已经在电脑上安装了 Rust,而且是通过一个叫 rustup 的工具装的,那恭喜你,升级超级简单!只要打开你的命令行(那个黑框框,或者叫终端),输入下面这句魔法咒语,然后敲回车,等着它自己更新就好啦:
$ rustup update stable

如果你还没安装 Rust,或者想了解更多新版本的信息,可以去 Rust 的官方网站看看。那里有详细的安装教程和 1.88.0 版本的“更新日志”,就像游戏更新说明一样,告诉你这次都加了哪些新东西。

如果你是个爱折腾、爱尝鲜的同学,想提前体验未来的 Rust 版本,还可以把你的 Rust 环境切换到“测试版”或者“尝鲜版”。如果你在使用过程中发现了什么bug(就是程序里的错误),记得一定要向我们报告,帮助我们把 Rust 变得更好!

1.88.0 版本有什么新鲜玩意儿?
这次 1.88.0 版本更新,带来了好几个让人眼前一亮的新功能,我们来挑几个重点讲讲,保证让你听懂:

1. let 语句也能“连连看”了!(Let chains)
以前,我们写代码的时候,如果想同时判断好几个条件,比如“如果变量 a 是这个,并且变量 b 是那个,而且变量 c 又是这样”,就得用好几个 if 语句嵌套起来,看起来乱七八糟的。就像这样:

Rust

if let Some(x) = get_value_x() {
    if let Some(y) = get_value_y() {
        if x > 10 && y < 20 {
            // 做点什么
        }
    }
}

是不是看着有点晕?

现在好了,有了新功能 let chains,你可以把好几个条件像串珠子一样连起来,甚至还能和普通的逻辑判断混着用,代码一下就变得又简洁又清楚了!就像这样:

Rust

if let Channel::Stable(v) = release_info()
    && let Semver { major, minor, .. } = v
    && major == 1
    && minor == 88
{
    println!("<code>let_chains</code> was stabilized in this version");
}

你看,上面的代码一下子就判断了三个条件:1. 发布信息是不是稳定版?2. 如果是,那它的主版本号是不是 1?3. 副版本号是不是 88?所有条件都满足,才执行后面的代码。

不过呢,这个超酷的功能只能在 Rust 2024 版本中使用。这就像手机App一样,有些新功能只有升级到最新的操作系统才能用。所以,如果你想用这个功能,记得把你的项目升级到 Rust 2024 版本哦!

2. 可以写“光溜溜”的函数了!(Naked functions)
这个功能听起来有点奇怪,但它可是给那些写超级底层代码的程序员准备的“神器”!

我们平时写的函数,编译器(就是把你写的代码翻译成电脑能懂的语言的程序)会自动给它加上一些“开场白”和“结束语”,就像函数自己会做一些准备工作和收尾工作一样。这在大多数情况下都很好,但有时候,特别是在写操作系统或者控制硬件的程序时,程序员需要完全控制函数的一举一动,连那些“开场白”和“结束语”都不想要。

现在,Rust 允许你写一种特殊的函数,叫做 “裸函数”(naked functions)。顾名思义,这些函数就是“光溜溜”的,编译器不会给它们添加任何多余的代码。这意味着程序员可以完全用汇编语言(一种非常底层的编程语言)来编写函数的全部内容,实现最极致的性能控制。

就像这个例子:

Rust

#[unsafe(naked)]
pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 {
    // 相当于 a + b,但能处理溢出
    core::arch::naked_asm!(
        "lea rax, [rdi + rsi]", // 这是汇编语言,意思是把 rdi 和 rsi 寄存器的值相加,结果放到 rax
        "ret"                   // 返回
    );
}

这种函数通常用于非常底层的程序,比如 Rust 自己的“运行时库”、操作系统内核,或者嵌入式设备(比如智能手表、智能家电里的程序)等等。对于我们普通写应用软件的同学来说,可能暂时用不到,但知道有这个功能是不是感觉 Rust 更强大了?

3. 配置条件判断更清晰了!(Boolean configuration)
在 Rust 里,我们有时候会根据不同的情况来编译代码。比如,你想让某个功能只在 Windows 电脑上编译,在苹果电脑上就不编译。这叫做“条件编译”。

以前,你需要写一些比较绕弯子的代码来表示“总是开启”或者“总是关闭”某个功能,比如 cfg(all()) 表示总是开启,cfg(any()) 表示总是关闭。是不是有点像绕口令?

现在好了,Rust 支持直接写 cfg(true) 表示总是开启,cfg(false) 表示总是关闭。是不是一下子就看明白了?这样能让你的代码更清晰,不容易出错。

4. Cargo 会自动帮你清理垃圾了!(Cargo automatic cache cleaning)
Cargo 是 Rust 的一个好帮手,它负责管理你的项目,下载你需要的各种“依赖库”(别人写好的代码模块)。

以前,Cargo 下载的这些文件会一直存在你的电脑里,时间长了就会占用越来越多的硬盘空间,就像你手机里的缓存文件一样,会越来越多。

现在,从 1.88.0 版本开始,Cargo 变得更聪明了!它会自动帮你清理那些不常用的文件,就像一个勤劳的“管家”一样。

从网上下载的文件,如果 3 个月没用过,它就自动删掉。

从本地拷贝过来的文件,如果 1 个月没用过,它也自动删掉。

这样,你的硬盘空间就不会被 Cargo 的缓存文件占满了!不过,如果你在离线状态下使用 Cargo,或者你还在用特别老版本的 Cargo,这个自动清理功能可能不会生效。但对于大多数同学来说,这绝对是个省心又实用的好功能!

怎么样,这次 Rust 1.88.0 的更新是不是很给力?感觉 Rust 变得越来越好用、越来越智能了!如果你有什么问题,或者想试试这些新功能,赶紧去更新你的 Rust 版本吧!