从碎片化到标准化: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 在工程化方面的短板。

相关推荐
GetcharZp5 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
weixin_446260858 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
doiito8 小时前
【AI 应用】从“外国人味”到地道中文:kokoroi-rs v0.1.2 架构升级深度解析
ai·rust·系统设计
ttwuai9 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
用户8356290780519 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python
用户9931441579849 小时前
微服务框架中获取用户信息
后端
xuanWb9 小时前
手写一个 LLM API 网关:Anthropic 与 OpenAI 协议转换的完整实现
后端
苍何10 小时前
给 Codex 换皮肤这门生意,被我开源了
后端
用户83562907805110 小时前
Python 实现 Excel 命名范围(Named Range)的创建与管理
后端·python