本仓库收集了编写清晰、惯用的Rust代码的资源。 你可以在这里找到此列表的可排序/可搜索版本。
_惯用_编码意味着遵循特定语言的惯例。这是在该语言中完成任务最简洁、最方便和最常见的方式,而不是强制它以作者从其他语言熟悉的方式工作。- 改编自Tim Mansfield
欢迎贡献!要添加缺失的资源,请参考贡献文档。
⚙ 项目
-
blessed.rs — Rust生态系统的非官方指南。推荐流行的、维护良好的crate。
-
cheats.rs - 惯用Rust技巧 — 一系列快速技巧,让你的代码更加惯用。
-
clippy — 一堆lint,用于捕捉常见错误并改进你的Rust代码。
-
Rust元素 — 一系列软件工程技巧,用于有效地用Rust表达意图。
-
模式 — Rust中设计模式的目录。
-
Possible Rust — 一个面向中级Rust程序员的博客,探索真实世界的代码和设计模式。
-
Rust选集 — 收集的关于Rust最佳短篇写作。
-
Rust API指南 — 惯用Rust API的广泛建议列表。
-
通过示例学Rust — 一个社区驱动的遵循Rust最佳实践的示例代码集合。
🏋 工作坊
-
用Rust构建你自己的JIRA — 一个测试驱动的工作坊,通过构建你自己的JIRA克隆来学习Rust!
-
全面的Rust — Android团队开发的为期四天的Rust课程,涵盖Rust的所有方面。
-
Ferrous Systems教学材料 — Ferrous Systems为培训制作的免费工作坊材料。
-
Hecto:用Rust构建你自己的文本编辑器 — 这是一系列博客文章,向你展示如何用Rust构建文本编辑器
-
惯用Rust工作坊 — 一个关于惯用Rust代码的讲座/工作坊,专注于现有语法和设计模式的有效使用
-
PingCAP人才计划 — 一系列关于用Rust编写分布式系统的培训课程。
-
过程宏工作坊 — 一系列旨在学习编写Rust过程宏的项目。
-
Rust 101 — 由tweede golf开设的Rust大学课程。
-
Sentry的Rust开发 — 一份文档,包含了开始使用Rust并遵守Sentry编码原则的有用资源。
-
rust-lang/rustlings — 小练习,帮助你习惯阅读和编写Rust代码。
📖 书籍
-
Rust命令行应用程序 — 一个教程,介绍如何用Rust编写CLI应用,学习生态系统的许多方面。
-
命令行Rust — 通过编写常见Unix核心工具的Rust版本来学习该语言。
-
通过Rust探索微控制器的世界! — 一个使用Rust的基于微控制器的嵌入式系统入门课程。
-
高保证Rust — 开发安全和稳健的软件,专注于Rust中嵌入式友好的数据结构。
-
Rust编程:快速、安全的系统开发 — 一本全面的Rust编程指南,详细介绍了Rust的大部分特性。
-
Rust原子和锁 — 帮助各级Rust程序员清晰理解低级并发。
-
Rust Cookbook — 展示如何用Rust完成常见编程任务的良好实践的示例。
-
Rust进阶 — 介绍如何基于最佳原则设计可靠、惯用和人体工程学的Rust程序。
📰 文章
2023
- 在Rust中追求不可变性 — 解释为什么Rust中变量默认是不可变的。
- Rust中的编译时不变量 — 展示如何使用宏在编译时强制执行不变量。
2021
- Rust数字转换:不要照搬书上的做法... — 一篇讨论Rust中数字转换最佳实践的博文。
- Rust中的六边形架构 — 描述如何使用领域驱动设计和测试优先方法构建Rust服务。
- 在Rust中包装错误 — 将'reqwest::Error'和自定义错误类型包装为枚举,以便更容易使用库。
- 追求惯用的Rust — 讨论在Rust中解决流行的编码难题'平衡括号'的不同方法。
- 命名你的生命周期 — 解释如何使用更长、更具声明性的生命周期名称来帮助区分不同的借用。
2020
- 输出参数在Rust中是惯用的吗? — 讨论函数返回值与就地修改参数的利弊。
- 如何为Rust crate编写文档的指南 — 使用rustdoc编写好的文档,包括许多示例。
- 通过开源和实时代码审查学习Rust — 涵盖了'FromStr'等模式,以及在一个crate中同时公开CLI和库。
- 重构从C转译的Rust — 描述如何将自动从C转换为不安全Rust的项目提升为更安全、更惯用的Rust。
- 保留上下文的错误处理 — 解释如何结合使用'thiserror'等crate和'map_err'来为错误添加上下文。
2019
- Rust模式:用枚举代替布尔值 — 讨论如何使用枚举而不是布尔值在Rust中更清晰地表达意图。
- 在Rust中接受字符串参数 — 讨论如何避免字符串处理的微妙问题,以及何时使用'str'与'String'。
- 等待一分钟 — 从原始futures到async/await语法的示例代码,以改进错误处理。
2018
- 在四个不同抽象级别用Rust编程ARM微控制器 — 演示Rust如何帮助从低级嵌入式代码转向高级抽象。
2017
- C绑定中成本、可用性和健全性的平衡,以及Rust-SDL2的发布 — 尽管有借用检查器的限制,仍能编写安全、健全、惯用的库。
- Rust中的距离数学:跨单位的安全性和正确性 — 如何创建一个系统来清晰安全地进行长度运算。
- 重新设计和重构Rust库的经验教训 — 'RefCell'、构建器模式等。
- Result和Option的迭代模式 — 探索如何惯用地过滤和分区Result和Option类型的迭代器。
2016
- Rust中惯用的树形和图形结构 — 介绍安全、动态、基于arena的树形结构,无需使用生命周期。
- Rust中便捷和惯用的转换 — 用实际例子解释'From
'、'Into '、'TryFrom '、'TryInto '、'AsRef '和'AsMut '。 - Rustic位 — 构成rustic代码的小细节。
- Ripgrep代码审查 — 对流行的'ripgrep'工具源代码的分析。
- Rust中漂亮的状态机模式 — 如何以表达性和可理解的方式在Rust中表示状态机。
- 通过良好的文档教授库 — 如何充分利用Rust的文档支持(例如文档测试)。
- Rust中优雅的库API — 许多有用的提示和技巧,用于在Rust中编写库。
- 俄罗斯套娃和干净的Rust代码 — 如何充分利用'Option'和'Result'(特别是'and_then()'和'unwrap_or()')。
- Rust中便捷和惯用的转换 — 用实际例子解释'From
2015
- Rayon: Rust中的数据并行 — 在Rust中编写优雅的并行代码。
- 解决Rust中'cannot move out of'借用错误的策略 — 帮助理解借用检查器和移动语义的实用技巧。
- 在Rust中有效使用迭代器 — 解释'Iter'和'IntoIter'特性以及Rust中循环的实际工作原理。
- 创建一个返回&str或String的Rust函数 — 'Into'和'Cow'(写时复制)如何协同工作以避免字符串类型的内存分配。
- 创建一个接受String或&str的Rust函数 — 如何使您的代码调用既符合人体工程学又快速(零分配)。
- Rust中的错误处理 — 以惯用方式理解和处理Rust中的错误。
- 为开发者友好的库实现Rust特性 — 关于实现良好Rust库的思考。
🎤 演讲
2024
- 糟糕Rust代码的四骑士 — 一个关于Rust代码中常见陷阱的演讲,如过度工程和过早优化。[视频]
2023
- 特性的技巧:实现符合人体工程学的提取器 — Rust Nation UK,2023年2月 [视频]
2022
2020
- 宏让Rust更高效 — RustConf 2020 [视频]
2019
- 让Rust令人愉悦 — RustCon Asia 2019 [视频]
2018
- 惯用的Rust - 编写简洁优雅的Rust代码 — FOSDEM 2018 [视频]
2017
- 惯用的Rust库 — Rustfest Kiev [视频]
💬 论坛
2020
2017
📜 历史
来自Python,我喜欢关于如何编写惯用Python的指导方针。我受到Peter Norvig等人的启发,他写了关于拼写检查器和数独求解器的精彩文章;当然,还有Python之禅。对于Rust来说,没有类似Python之禅的东西,所以我开始收集自己的资源。 这个项目的目标是创建一个经过同行评审的文章/演讲/仓库集合,用于教授惯用的Rust风格。这是一个社区项目,您可以贡献。
🔏 许可
在法律允许的范围内,Matthias Endler已放弃了本作品的所有版权和相关或邻接权。 标志改编自FreePik.com。