【Rust日报】如何组织大型Rust代码库

如何组织大型Rust代码库

随着 Rust 项目规模的扩大,保持代码库的整洁和高效变得愈加重要。以下是一些管理大型 Rust 代码库的简单规则,旨在减少复杂性和技术债务,让任何开发者都能快速上手(仅供参考)。

提供开发容器

提供至少一个包含所有依赖项的 Dockerfile,以确保开发环境的一致性和不可变性。理想情况下,还应该提供一个 devcontainer 以便开发者能够快速开始工作。

使用工作区(workspaces)

将项目拆分为多个 crate 以减少编译时间并保持代码清晰。Rust 提供了 Cargo Workspaces 来管理共享同一个 Cargo.lock 文件和 target 目录的多个包。典型工作区结构如下:

my_project
│── cmd/
│   ├── executable-1/
│   ├── executable-2/
│── crates/
│   ├── package_1/
│   ├── package_2/
│   ├── package_3/
│── Cargo.toml
│── Cargo.lock
│── target/

cmd 文件夹包含项目的各个可执行文件,crates 文件夹包含所有库和其他非可执行文件。

在工作区级别声明依赖

随着项目的增长,保持所有包的依赖同步变得困难。应在工作区的 Cargo.toml 文件中声明依赖,并在各个包中使用 { workspace = true } 来引用这些依赖。

[workspace.dependencies]
something = { version = "=1.0.0", features = ["a", "b", "c"] }

[dependencies]
something = { workspace = true }

这有助于跟踪所有第三方包及其版本。

不使用 Cargo 的默认文件夹结构默认的 Cargo 文件夹结构在包数量增加后会变得难以管理。建议将代码直接放在 crate 的根目录中,与 Cargo.toml 文件并列:

my_package/
│── my_package.rs
│── Cargo.toml
│── README.md

唯一的例外是包含 build.rs 文件的情况,此时保留 Cargo 的标准布局更好。

不在 mod.rs 和 lib.rs 文件中编写代码避免在 mod.rs 和 lib.rs 文件中编写代码,这些文件应仅用于调整不同类型和函数的可见性。使用描述性的文件名(如 client.rs、email.rs、payments.rs)来编写代码。

提供 Makefile

在工作区的根目录提供一个 Makefile,用于记录构建、测试和维护项目的重要任务,使任何贡献者都能参与维护。

通过遵循这些规则,可以更有效地管理大型 Rust 代码库,确保代码库的整洁和高效。

原文链接 https://kerkour.com/rust-how-to-organize-large-workspaces

Rust实现遗传算法

本文将介绍遗传算法,并实现一个用于训练遗传算法的Rust库。我们将用该库解决以下问题:

  1. 求二维实函数的最大值

  2. 旅行商问题(TSP)

  3. 背包问题

原文链接 https://vaktibabat.github.io/posts/Genetic_Algo_Rust/

Cargo生态缺失的部分

原文链接 https://weihanglo.tw/posts/2024/the-missing-parts-in-cargo/

micropb: 运行在嵌入式环境的 protobuf库

micropb 一个目标为嵌入式和 no_std 环境的 protobuf库, 除此之外, 他提供高度可配置的生成代码模式.

github地址 https://github.com/YuhanLiin/micropb

--

From 日报小组 BobQ, FBI小白

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值