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

相关推荐
犀利豆9 小时前
Claude code tools 研究系列-开篇(AskUserQuestion)
后端
颜酱12 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端
逻极13 小时前
Rust 从入门到精通:内存安全与高性能系统编程实战
rust·系统编程·性能·内存安全
IT_陈寒13 小时前
SpringBoot自动配置坑了我一周,原来问题这么蠢!
前端·人工智能·后端
iOS开发上架哦14 小时前
Android代码混淆与iOS加固技术详解
后端·ios
Alan_69115 小时前
商品详情优化三板斧-拆分-多级缓存-GC调参
后端·缓存
Conan在掘金15 小时前
ArkTS 进阶之道(3):为哈禁解构声明?类型一眼可见 vs 推断链断裂
后端
晚安code15 小时前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
feng尘15 小时前
深度解析布隆过滤器(Bloom Filter):原理、优缺点与 1000 万黑名单实战
后端·面试
大陈AI15 小时前
Docker Compose 前后端部署踩坑实录:3 个坑让我的容器反复 Exit(1)
后端