Rust一些最佳实践


1、切勿使用 unwrap,而应使用expect。

2、利用 From、TryFrom 等标准特征。

3、经常运行“cargo c”,它将保持快速的构建时间。不要在第一次尝试时编写最好的代码,首先编写可工作的 sphagetti 代码,然后测试,然后重构

4、如果您有两个彼此内部的选项/结果,请先使用“flatten()”,然后使用 match/if let

5、对于单个匹配,请使用“matches!()”宏!
这个我不是 100% 确定,但它应该可以工作:要匹配结果/选项值,您不必解开包装,您可以直接匹配,如下所示:
match x { Ok(true) => (), Ok(false) => (), Err(e)=> () } 

6、您是否重复了太多代码?把它做成宏!

7、需要未指定数量的参数吗?使用宏。

8、泛型使编译时间变慢,运行时间变快。VS Trait 对象使编译时间更快,运行时间更慢(尽管你必须广泛使用它才能注意到这一点)

9、如果您想查看宏扩展为什么,请使用cargo 扩展

10、将您的项目拆分为多个库和一个二进制文件。库可以并行编译,加快编译时间(对于小项目来说并不重要)

11、使用:cargo fmt, cargo clippy, dbg!, cargo check (religiously), 

12、教人们如何按照人体工程学处理错误,对unwraps、if-let、let-else、不必要的克隆以及避免它们的使用。

13、

  • 工具工具: clippy, fmt....
  • 倾向于非pub成员。
  • 倾向于使用非pub的函数和mods,保持你的抽象性。
  • 研究生命期:避免克隆所有的东西来让编译器高兴。
  • 使用值来消耗/杀死前一个实例
  • 只要是只读参数就使用ref
  • 检查你是否真的需要一个单元格/rc/Arc
  • 尽快学习async,这将节省你编写手动管理状态机和启动并忘记线程的时间。
  • 不信任来自实验性来源的crate,所以你不必从未维护的库中迁移你的代码。货物很容易,依赖性仍然是地狱。
  • 学会写宏,但不要滥用它们。
  • 要有习惯性:使用你的工具:

  1. map, and_then, collect...
  2. 建设者builder模式
  3. 前缀prefix模式
  4. 为你输入一个漂亮的新方法,并保持其内部的隐私。
  5. 实现/删除标准特性: Default, from, display, Debug
  6. <S:AsRef<str>>

  • Serde,但只在需要时使用
  • 对于非特定的可恢复错误,无论如何都要使用
  • 查看这个列表并根据你的需要进行调整。

14、Rust API 指南不仅为 API 生产者提供了重要信息,也为 API 消费者提供了重要信息。
一个小例子是 `as`/`to`/`into` 约定:第一个是最便宜的,但不提供所有权,第二个提供所有权而不消耗主题,因此可能涉及克隆,最后一个消耗主题生产其他东西,所以它并不便宜,但可能比“to”便宜。当您在 API 中看到多个这样的前缀时,您会立即知道哪一个是您想要的。

15、effective-rust是惊人的!