位置:首页 > Rust > Rust 在 Ubuntu 上的最佳实践:从 rustup 到 Cargo、测试与 CI

Rust 在 Ubuntu 上的最佳实践:从 rustup 到 Cargo、测试与 CI

时间:2026-08-24  |  作者:实验室老王  |  阅读:0

目录

  1. 为什么在 Ubuntu 上优先用 rustup 安装 Rust
  2. 环境加速与常用组件怎么配
  3. 项目结构为什么要尽量遵循 Cargo 规范
  4. 依赖管理与代码质量如何一起落地
  5. 什么时候该做性能优化和持续集成

前言

在 Ubuntu 上使用 Rust,真正拉开差距的往往不是安装那一步,而是后续工具链是否易维护、项目结构是否规范、测试和构建能不能持续复用。下面按安装、依赖、代码质量、性能与 CI 逐段梳理,帮助你判断哪些做法适合入门即采用,哪些更适合在项目进入稳定期后补上。

在 Ubuntu 上使用 Rust,常见问题并不是“能不能装上”,而是装完之后工具链是否好维护、项目结构是否规范、后续升级会不会打乱环境。下面按开发者最常遇到的几个环节展开,从安装方式到依赖、测试、优化与自动化,把一套更适合长期使用的实践串起来。读完后,你可以判断哪些步骤是必做项,哪些属于按项目阶段逐步补齐的增强项。

为什么在 Ubuntu 上优先用 rustup 安装 Rust

在 Ubuntu 上部署 Rust 开发环境,优先选择 rustup,而不是直接用 apt 安装,原因主要有两点:一是它由 Rust 官方维护,二是它能统一管理 stable、beta、nightly 等不同工具链,并处理配套组件。

Rust 工具链在 Ubuntu 上的安装与环境配置流程图
Ubuntu 上 Rust 安装与环境配置用流程图梳理 Ubuntu 上从系统依赖到 rustup 激活,再到镜像和组件补齐的关键步骤。

一套常见安装流程如下:

  • 更新系统依赖:sudo apt update && sudo apt upgrade -y
  • 安装基础编译工具:sudo apt install curl build-essential gcc make -y
  • 执行 rustup 安装脚本:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • 激活环境:source $HOME/.cargo/env
  • 验证安装结果:rustc --versioncargo --version

如果终端能正常输出版本号,说明编译器和包管理工具已经可用。对于需要同时维护多个项目、或者未来可能切换 nightly 功能的场景,rustup 的后续维护成本也明显低于系统包方式。

环境加速与常用组件怎么配

Rust 装好后,真正影响日常体验的通常是下载速度、编辑器提示和基础质量工具是否齐全。Ubuntu 上这一部分建议尽早补齐。

下载慢时先配镜像

如果默认源下载较慢,可以通过环境变量切换到国内镜像,例如:

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup

这两项既可以临时设置,也可以写入 ~/.bashrc,用于后续更新工具链。

把 clippy 和 rustfmt 作为基础组件安装

clippy 负责静态检查,rustfmt 负责格式统一,这两项基本可以视为 Rust 项目的默认配置:

Cargo 项目结构、依赖声明与测试检查关系图
Cargo 结构与质量命令闭环把 Cargo 目录结构、Cargo.toml 依赖声明,以及。
rustup component add clippy
rustup component add rustfmt

它们能尽早发现未使用变量、风格不一致等问题,尤其适合多人协作。

编辑器尽量接入官方扩展

如果使用 VS Code,安装官方的“Rust”扩展通常就能获得语法高亮、补全和实时错误提示。对新项目来说,这一步能明显减少低级错误和来回查文档的时间。

Rust 发布优化与 GitHub Actions 持续集成流程图
发布优化与 CI 检查流程把发布构建、mold 链接器、并行优化和 GitHub Actions 检查流程拆开呈现。

项目结构为什么要尽量遵循 Cargo 规范

Rust 生态默认围绕 Cargo 运转,因此项目结构最好跟随 Cargo 的约定,而不是自己发明目录规则。创建项目时可以直接使用:

cargo new my_project --bin   # 创建可执行程序项目(默认)
# 或
cargo new my_lib --lib       # 创建库项目

生成出来的典型结构如下:

my_project/
├── Cargo.toml          # 项目配置文件(名称、版本、依赖、构建选项)
├── src/
│   ├── main.rs         # 主入口文件(可执行程序的起点)
│   └── lib.rs          # 库入口文件(库项目的起点)
└── target/             # 编译输出目录(自动生成,不用手动改)

Cargo.toml 是项目的核心元数据文件,通常至少要明确名称、版本、Edition 和依赖。例如:

[package]
name = "my_project"
version = "0.1.0"
edition = "2021"   # 使用Rust 2021 Edition(最新稳定特性)

[dependencies]
serde = { version = "1.0", features = ["derive"] }   # JSON序列化库
tokio = { version = "1.0", features = ["full"] }     # 异步运行时

代码组织上,建议尽早按职责拆模块,例如把工具函数放到 utils.rs,把配置读取放到 config.rs,再通过 src/lib.rssrc/main.rs 对外暴露。这样做的价值不只是“整洁”,更在于后面补测试、拆库或重构时更容易维护。

依赖管理与代码质量如何一起落地

Cargo 的强项不仅是构建,还包括依赖解析、版本锁定和常用质量命令的统一入口。实际项目里,这几件事最好放在一起看。

依赖尽量通过 Cargo.toml 统一声明

添加依赖时,直接写入 [dependencies],然后执行 cargo build,Cargo 会自动下载、编译并缓存到 ~/.cargo/registry。例如:

  • 依赖声明:serde = "1.0"
  • 构建下载:cargo build
  • 更新锁定文件:cargo update
  • 只更新单个依赖:cargo update serde

serde = "1.0" 这样的语义化版本写法,表示兼容 1.0 系列可用版本,通常能在灵活升级和控制兼容性之间取得平衡。

格式化和静态检查建议变成日常命令

代码风格和潜在错误最好不要等到评审阶段才发现。最常用的两个命令是:

  • cargo fmt:自动格式化代码
  • cargo clippy:检查潜在问题和不推荐写法

如果团队对质量要求更严格,还可以在 CI 中配合 cargo clippy -- -D warnings,把警告直接提升为失败条件。

测试至少覆盖单元测试和集成测试

Rust 的测试支持是工具链内建能力,适合尽早使用。单元测试可以直接写在源码文件里:

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn test_add() {
        assert_eq!(add(2, 2), 4);  // 测试add函数
    }
}

如果要验证模块之间的交互,可以在 tests 目录下增加集成测试文件,例如 integration_test.rs。对于性能敏感逻辑,还可以引入 criterion = "0.4" 做基准测试:

use criterion::{black_box, criterion_group, criterion_main, Criterion};

fn fibonacci(n: u64) -> u64 {
    match n {
        0 => 1,
        1 => 1,
        _ => fibonacci(n-1) + fibonacci(n-2),
    }
}

fn bench_fibonacci(c: &mut Criterion) {
    c.bench_function("fib 20", |b| b.iter(|| fibonacci(black_box(20))));
}

criterion_group!(benches, bench_fibonacci);
criterion_main!(benches);

执行 cargo bench 后,就可以对关键路径做更具体的性能观察,而不是只凭体感判断。

什么时候该做性能优化和持续集成

Rust 本身已经有不错的性能基础,但在 Ubuntu 上做项目时,构建速度、运行效率和回归控制仍然值得单独处理。

先区分开发构建和发布构建

正式构建建议使用 cargo build --release。发布模式默认采用 opt-level=3,适合追求运行性能;如果更在意编译时间,也可以根据项目情况调整优化等级来平衡。

链接速度慢时可以考虑 mold

对于编译频繁的大项目,链接阶段可能成为等待瓶颈。Ubuntu 上可以安装 mold

sudo apt install mold
export RUSTFLAGS="-C link-arg=-fuse-ld=mold"

原文给出的经验是,它相对默认 ld 可快 2-3 倍。是否值得启用,取决于你的构建规模和迭代频率。

性能热点再考虑并行和内存分配

如果程序已经定位到 CPU 或 IO 热点,再考虑更针对性的优化会更有效。例如:

  • 使用 rayon = "1.8",把普通迭代替换为 par_iter(),提升多核利用率
  • 减少不必要的 String 分配,优先使用 &str
  • 文件 IO 使用 BufReader/BufWriter,减少系统调用次数

这些优化更适合建立在测试和基准数据之后,而不是一开始就全面铺开。

用 GitHub Actions 把检查自动化

当项目开始多人协作,或者已经进入稳定迭代阶段,CI/CD 就应该尽早接入。一个基础的 GitHub Actions 工作流可以这样写:

name: Rust CI

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust
        run: rustup update && rustup default stable
      - name: Run tests
        run: cargo test
      - name: Run clippy
        run: cargo clippy -- -D warnings
      - name: Build release
        run: cargo build --release

这类流程的重点不只是“自动跑一遍命令”,而是把测试、静态检查和发布构建变成合并前的固定门槛,尽量把回归问题拦在主分支之外。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多