< 返回版块

gensmusic 发表于 2024-07-15 16:59

如何组织大型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 代码库,确保代码库的整洁和高效。

原文链接

Rust实现遗传算法

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

  1. 求二维实函数的最大值
  2. 旅行商问题(TSP)
  3. 背包问题

原文链接

Cargo生态缺失的部分

原文链接

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

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

github地址

--

From 日报小组 BobQ, FBI小白

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页