从碎片化到标准化:cargo-bp 如何重构 Rust 开发逻辑

从碎片化到标准化:cargo-bp 如何重构 Rust 开发逻辑

Rust 社区一直有极小标准库这一设计哲学,这导致生态碎片化严重。在这一设计哲学下,所有业务能力、工程能力全部交给社区 crate 实现,看似灵活的设计,实则给开发者埋下了巨大的隐性成本。而 cargo-bp 就是 Rust 社区为了解决这一痛点所进行的一次尝试。

cargo-bp 是什么?

cargo-bp 的 bp 是 Battery Pack,电池组的含义。它的核心思路很简单:把 Rust 项目中大家都会重复配置的东西,打包成可复用电池组。例如:CLI 项目电池组、CI/CD 电池组、错误处理电池组、日志电池组、Web 电池组等等。

开发者不再需要进行繁琐的配置,由一个个电池组来提供最佳实践,开发者只需要:

shell 复制代码
# 添加 cli 电池组
cargo bp add cli

众所周知,Rust 社区已经有大量的 crates 成为了非官方的事实标准库,如 tracing、serde 等等,电池组的作用在于让这些隐性标准库显性化。

安装

cargo-bp 支持两种主流的安装方式:

shell 复制代码
cargo install cargo-bp
# or
cargo binstall cargo-bp

安装完成后,可配置 shell 自动补全,提升操作效率:

shell 复制代码
# zsh 环境
source <(cargo bp completions zsh)
# bash 环境
source <(cargo bp completions bash)
# fish 环境
source <(cargo bp completions fish)

使用示例

首先,我们可以通过下面的命令获取到当前有哪些电池组:

shell 复制代码
cargo bp list

电池组大致有两种使用方式,第一种是通过电池组内置的项目模板来进行初始化项目:

shell 复制代码
cargo bp new cli --name cli-demo

上面这条命令的含义是使用 cli 电池组进行初始化项目,项目名称为 cli-demo。

初始化项目后,如下所示:

plaintext 复制代码
.
├── build.rs
├── Cargo.toml
├── src
│   └── main.rs
└── tests
    ├── cli.rs
    └── snapshots
        └── cli__help.txt

除了项目模板初始化的代码外,最主要的是看 battery-pack.toml 这个文件,它包含了与电池组所有的相关信息。

第二种使用电池组的方式是在已有项目中添加电池组:

shell 复制代码
cargo new cli-demo
cd cli-demo
cargo bp add cli

它会为你添加上电池组的相关依赖。除此之外,如果需要更新依赖,可以通过更新电池组的方式进行:

shell 复制代码
cargo bp sync

如果需要移除电池组,可以通过 remove 命令进行:

shell 复制代码
cargo bp remove cli

维护自己的电池组

除了官方提供的电池组外,我们还可以维护自己的电池组,这里我们依旧通过 cargo-bp 来初始化电池组模板:

shell 复制代码
cargo bp new battery-pack --name my-battery-pack

这里我不打算细说,推荐你直接看官方文档了解。

结语

cargo-bp 仍处于项目早期阶段,这篇文章主要目的是帮助读者了解下 Rust 社区的一些前沿动态。虽然项目的迭代,电池组这一概念会将会给 Rust 社区带来巨大的变化,填补官方极小标准库带来的问题,逐渐形成形成标准库+电池组双生态体系。

从生态发展逻辑来看,cargo-bp 绝非昙花一现的工具,而是 Rust 生态进化的必然产物。它没有颠覆 Rust 极小标准库这一设计哲学,而是以轻量化、无侵入地的方式补齐了 Rust 在工程化方面的短板。

相关推荐
2501_933923252 分钟前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
leikooo7 分钟前
ARTS 1011: 双堆动态对顶求中位数、IPC 注入与空密码串联接管账户与程序从不做决策
后端
合尘猫13 分钟前
AI 项目上线就停:一次事件循环阻塞的完整排查过程
人工智能·后端·python
Re_zero30 分钟前
一次 SSE 断流排查:PrintWriter 吞掉了我的 IOException
java·后端
1m5555555539 分钟前
RAG 工程实战(四):明明召回了正确知识,为什么最终 Top-K 还是漏了?
后端
我是人✓1 小时前
Java核心语法:作用域、循环与大数值处理
java·开发语言·后端
newerp1 小时前
GC Pacer 调优算法:GOGC、GOMEMLIMIT 与容器 OOM 防御
后端·程序员·go
邱杰4701 小时前
数智人事系统(二):一条命令起齐四个中间件
后端
newerp1 小时前
逃逸分析、栈分配与 sync.Pool 对象池
后端·程序员·go