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 未来的核心演进方向之一。对于开发者而言,提前上手体验、熟悉语法规范与开发逻辑,既能提前适配未来的开发范式,也能在日常工作中借助该特性提升轻量化开发效率。

相关推荐
AskHarries1 小时前
Chrome 插件有没有机会
后端
浩风祭月1 小时前
一次诡异的 MySQL 死锁,靠 AI 分析日志十分钟定位根因
后端·ai编程
我是一颗柠檬1 小时前
【MySQL全面教学】MySQL子查询与高级查询Day7(2026年)
数据库·后端·mysql
CodePlayer竟然被占用了2 小时前
Claude Code 出安全插件了:AI 写代码的安全网,终于有人正经做了
人工智能·后端
明月_清风2 小时前
Base64:用 33% 的体积膨胀,买一张在文本世界通行的门票
后端
得物技术2 小时前
HorizonVault 技术深潜:如何在 HDD 上做出 100GB/s+ 级大吞吐分布式存储|得物技术
大数据·后端·kafka
码不停蹄的玄黓2 小时前
SpringBoot 自动装配原理
java·spring boot·后端
XovH2 小时前
Docker 从 0 到 1 再到 Kubernetes 实战:深入理解 Docker 镜像和分层结构
后端
来自上海的这位朋友2 小时前
用 Three.js 做一个 Web 3D 非对称追猎 Demo:从场景、角色到手感调试
后端·游戏开发·three.js