Nightly 前瞻:cargo-script 让 Rust 也能写脚本

Nightly 前瞻:cargo-script 让 Rust 也能写脚本

在项目开发过程中,我们经常需要编写一些工具脚本。在过去,这类需求往往离不开脚本语言,如 Python、Javascript 等。

但如今,Rust 也终于开始迈入脚本化的时代,随着 cargo-script 特性正式合并进 Nightly,我们终于可以提前体验到直接使用 Rust 编写并运行脚本文件。

环境准备

目前 cargo-script 仍属于实验性特性,需要切换到 Nightly 版本才可以使用,具体操作命令如下:

shell 复制代码
# 安装 Nightly 版本
rustup install nightly

# 同步更新 Nightly 工具链至最新版
rustup update

# 将全局默认工具链切换为 Nightly
rustup default nightly

执行完成后,通过 rustc --version 即可确认当前为 Nightly 版本。

实战案例:简单脚本

cargo-script 最核心的优势就是零项目初始化、零冗余配置,仅需一个 Rust 文件即可完成可执行脚本开发。我们从最简单的 Hello World 示例开始。

新建 hello_world.rs 脚本,并写入:

rust 复制代码
#!/usr/bin/env cargo

fn main() {
    println!("Hello, world!");
}

需要重点注意:当前 Nightly 版本中,cargo-script 尚未稳定,属于实验性特性,必须通过 -Zscript 参数手动开启,无法直接运行。执行以下命令启动脚本:

shell 复制代码
cargo -Zscript hello_world.rs

# 运行输出
# Hello, world!

除了通过 Cargo 命令运行,我们也可以赋予文件可执行权限,直接运行脚本文件。

首先赋予文件执行权限:

shell 复制代码
chmod +x hello_world.rs

直接执行脚本会触发报错:

plaintext 复制代码
error: running the file `./hello_world.rs` requires `-Zscript`

报错原因十分明确:直接运行脚本文件时,系统无法自动识别实验性特性,缺少必需的 -Zscript 开启参数。解决方案非常简单,直接修改文件头部的 Shebang 指令,内置开启参数即可。

修改后完整代码:

rust 复制代码
#!/usr/bin/env cargo -Zscript

fn main() {
    println!("Hello, world!");
}

再次直接执行脚本,即可正常运行:

shell 复制代码
./hello_world.rs

# 运行输出
# Hello, world!

实战案例:带第三方依赖的脚本

纯原生语法的脚本仅能实现简单逻辑,实际开发中,绝大多数脚本都需要依赖第三方库完成复杂需求。cargo-script 支持引入依赖,无需独立的 Cargo.toml 文件,可直接在脚本文件中声明依赖。

我们以正则日期格式校验的常用场景为例,引入 regex 正则库,改造 hello_world.rs 脚本,完整代码如下:

rust 复制代码
#!/usr/bin/env cargo

---
[dependencies]
regex = "1"
---

use regex::Regex;

fn main() {
    // 正则校验 YYYY-MM-DD 日期格式
    let re = Regex::new(r"^\d{4}-\d{2}-\d{2}$").unwrap();
    println!("Did our date match? {}", re.is_match("2014-01-01"));
}

文件中通过 --- 分隔符区分代码区与依赖配置区,写法完全兼容原生 Cargo 配置语法。执行脚本命令:

shell 复制代码
cargo -Zscript hello_world.rs

# 运行输出
# Did our date match? true

首次运行时,Cargo 会自动解析文件内的依赖配置,自动下载、编译对应版本的 regex 库,并缓存编译产物,二次运行无需重复编译,启动速度大幅提升。

未来稳定版迭代方向

cargo-script 目前处于快速迭代的实验阶段,功能尚未完全定型。根据 Rust 官方迭代规划,cargo-script 后续将持续优化,大概率在 2026 年下半年稳定落地 Release 版本,核心迭代方向包括:

  • 支持隐式 main 函数,进一步精简样板代码;
  • 优化 Lock 文件机制,平衡单文件简洁性与工程复现性;
  • 支持脚本纳入 Workspace 工作流管理;
  • 优化缓存策略,提升依赖复用率,降低启动耗时;
  • 适配更多 IDE 智能提示、语法校验、一键运行能力。

结语

虽然目前该特性仍处于 Nightly 实验阶段,需要手动开启参数、存在部分体验短板,但从官方明确的迭代规划不难看出,脚本化是 Rust 未来的核心演进方向之一。对于开发者而言,提前上手体验、熟悉语法规范与开发逻辑,既能提前适配未来的开发范式,也能在日常工作中借助该特性提升轻量化开发效率。

相关推荐
CQU_JIAKE4 小时前
11.7[高体】
java·后端·spring
Csvn5 小时前
认识 Nginx
后端·nginx
红尘散仙5 小时前
谁说终端只能敲键盘?我用 Rust 给小说阅读器加上了鼠标
前端·后端·rust
特立独行的猫A6 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
陈随易6 小时前
C++26 草案被否,二十八年来头一回
前端·后端·程序员
金銀銅鐵7 小时前
同一个 Hello World,Kotlin 和 Java 在字节码层面差在哪
jvm·后端·kotlin
IT_陈寒10 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala10 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
wo_jack13 小时前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
量化分析码农15 小时前
【Python量化波动率实战 02】波动率会传染:EWMA 指数加权给近期行情更大话语权
后端