Rust一些最佳实践
内容提要
使用expect而不是unwrap,使用标准特征,保持快速构建时间,使用flatten()和match/if let,使用matches!()宏,将重复的代码做成宏,使用宏处理未指定数量的参数,泛型和Trait对象的优缺点,使用工具如cargo expand、cargo fmt、cargo clippy、dbg!、cargo check,避免使用unwraps、if-let、let-else、不必要的克隆,使用工具如clippy、fmt,倾向于非pub成员和非pub函数和模块,研究生命周期,使用值来消耗前一个实例,只要是只读参数就使用ref,检查是否真的需要单元格/rc/Arc,学习async,不信任实验性来源的crate,学会写宏,但不滥用,使用工具如map、and_then、collect,实现/删除标准特性。
关键要点
-
切勿使用 unwrap,而应使用 expect。
-
利用 From、TryFrom 等标准特征。
-
经常运行 'cargo c',保持快速的构建时间,先编写可工作的代码,再测试和重构。
-
使用 'flatten()' 处理内部选项/结果,随后使用 match/if let。
-
对于单个匹配,使用 'matches!()' 宏。
-
将重复的代码做成宏。
-
需要未指定数量的参数时,使用宏。
-
泛型使编译时间变慢,Trait 对象使编译时间更快但运行时间变慢。
-
使用 cargo expand 查看宏扩展。
-
将项目拆分为多个库和一个二进制文件以加快编译时间。
-
使用工具如 cargo fmt、cargo clippy、dbg!、cargo check。
-
教导如何处理错误,避免使用 unwraps、if-let、let-else 和不必要的克隆。
-
倾向于使用非pub成员和函数,保持抽象性。
-
研究生命周期,避免不必要的克隆。
-
使用值来消耗前一个实例,只要是只读参数就使用 ref。
-
检查是否真的需要单元格/rc/Arc。
-
学习 async,以节省手动管理状态机的时间。
-
不信任实验性来源的 crate,避免从未维护的库中迁移代码。
-
学会写宏,但不要滥用。
-
使用工具如 map、and_then、collect,保持内部隐私,实施标准特性。