超硬货,大型 Rust 项目经验分享

本文作者分享了在大型 Rust 项目中,如何通过扁平化的项目结构来提高代码管理和维护效率。作者认为扁平结构优于嵌套结构,列举了扁平化的优势,如减少不一致性、简化目录层级和利于长期维护。同时,文章还提供了关于工作空间设置、文件组织和自动化工具的实用技巧。
摘要由CSDN通过智能技术生成

本篇文章中,我将分享我组织大型 Rust 项目的经验。但这绝不是权威的,只是我通过尝试和错误中发现的一些小技巧。

Cargo,作为 Rust 的构建系统,遵循约定大于配置的原则。它不仅为小型项目提供了一套良好的默认配置集,尤其为公共 crates.io 库量身定做。虽然这些默认值并不完美,但它们已经足够用了。这对整个生态系统的一致性也是值得欢迎的。

然而当涉及到大型的、多 crate 的项目时,Cargo 就不那么统一了,它被组织成一个 Cargo 工作空间。而工作空间是灵活的 —— Cargo 对工作空间的布局并没有一个偏好统一。因此,人们会尝试不同的东西,取得不同程度的效果。

回到标题,我认为对于代码行数在一万到一百万之间的项目,扁平化结构是最为合理的。此处 rust-analyzer[1] (多达 200k 行)是一个比较好的例子,它的项目组织如下:

rust-analyzer/
  Cargo.toml
  Cargo.lock
  crates/
    rust-analyzer/
    hir/
    hir_def/
    hir_ty/
    ...  

在 repo 的根部,Cargo.toml 定义了一个虚拟清单:

Cargo.toml:

[workspace]
members = ["crates/*"]

其他的东西(包括 rust-analyzer "main" crate)都嵌套在 crates/ 下的某一个层级中。每个目录的名称都等于 crate 的名称。

crates/hir_def/Cargo.toml:

[package]
name = "hi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值