< 返回版块

Cupnfish 发表于 2020-11-30 11:39

原文

  1. Rust的编译器是你的朋友。

  2. 给你的代码编写Document ,写出富有表现力的名字、可读性高的文档;最好可以在注释里测试你的代码片段。

  3. 了解在哪里使用 Result,在哪里使用panic

  4. 尊重命名约定(naming conventions)

  5. 了解这些著名的关系对:

  6. 如果可以的话使用early returns

  7. 不要每件事情都用一个编程范型,学习在哪里使用循环,在哪里使用迭代器

  8. 尽可能的使用引用,比如在使用String的地方可以用&str代替;在使用Vec的地方可以用&[T]来代替。

  9. 尽可能少的去调用clone,当你真的需要使用clone时,可以试试Rc::clone(&value) [rc docs]

  10. Rust的一个特点是安全可变性,但是只有当你写出的不可变变量纯函数使你的代码不可读,太慢或者容易出错的时候,才使用它。

  11. “提前优化是一切灾祸的根源。”——特别是在Rust这种运行速度很快的语言当中。不要做额外的事除非你的基准测试已经准备好要去测试你的代码。个人的一些案列:

    • 当我在用Rust写代理服务器的时候,有两个因素使得代理服务器的速度减慢了好几倍,一个是忘记删除存在于热路径(hot path)中的println调用,而另一个则是由于DNS服务器变慢。我建议缩小范围并优先解决更高级别的问题。
    • Seed的VDOM补丁算法在第一次尝试时是足够快的,然而由于DOM的调用大大降低了它的速度。我建议在你尝试去优化你的Rust代码之前,先去查看一下它的IO和外部依赖。
  12. 仅编写跨平台代码,并且仅使用Rust工具链。

  13. 不要害怕去写异步代码。

  14. 了解诸如此类受欢迎的库:

  15. Clippyrustfmt 同样也是你的朋友。cargo-make 是你非官方的朋友。

    • 你可以使用cargo make verify命令在几乎所有的Seed/my projects。它将会使用Clippy格式化代码,并且测试它。可以在Rust quickstart看到任务定义
  16. 编写测试和基准(参见 Criterion.rs)。

  17. 用下面的函数参数类型进行实验,并了解这些用处。(提示:在Seed的repo里这些参数类型都有不同的用处,可以参考学习。)

    • fn(text: impl AsRef<str>) - AsRef
    • fn(text: impl ToString) - ToString
    • fn(text: impl Into<Cow<'static, str>>) - Cow
    • fn<'a>(text: impl Into<Cow<'a, str>>)
  18. 偶尔需要做一下:

    • 运行rustup update去更新你的编译器和工具链
    • 每次更新编译器版本之后(或者更新依赖之后),删除你项目下占用你磁盘空间的target文件夹,他们是老版本编译器的产物。
  19. 了解这些内存相关的函数:

  20. 只有在特殊情况下,或者当你觉得极致性能对于你的领域来说十分有必要的情况下(比如你写操作系统,或者写超快速低级别的库的时候),才去使用unsafe。在Seed项目下只有安全的代码(包括Seed的核心部分)。

  21. 只有在为了给你的用户改进你提供的API的时候,才去使用像Any这种魔法。它通常只会让你的代码更糟糕。

  22. 学会使用通道(channel),标准库的文档以及一些相关crate的文档:

  23. 只有你真的觉得有必要的时候才去使用,并且要给你的宏写上合适的注释。IDE对宏的支持很糟糕,比如自动补全通常不能工作。

    • 有一些例外的宏比如 printlnvecinclude_str,所有的标准库的宏
    • 是的,在Seed里面有很多的宏,但是这些宏的大部分被用来替代HTML并且他们十分短。还有我们修复了他们当中的很多bug,因此该规则仍然适用。我们在权衡了很多东西之后才决定去使用宏。
    • 然而宏在很多地方十分有用:
      • 缺少抽象概念的时候,比如drop_zone里面的stop_and_prevent宏。
      • 宏对于可读性很有帮助,比如i18n里面的create_t宏。
      • 很难或不可能通过正确的Rust类型编码所有内容的时候,比如Seed里面像是div!之类的元素宏。
      • 它可以帮助你减少样板代码,比如Seed的log!宏,它格式化输入的参数然后在后台调用了JavaScript的console.log

译者:虽然就Seed和yew而言我更喜欢yew,但是不妨碍这篇文章写的好啊,同时在本篇文章的后半段还有部分作者对rust的表白话语,看的我差点也想翻译了,手动狗头。。。 翻译的不是很流畅,可能会出现不少错误,欢迎大家指正。

评论区

写评论
MATRIXKOO 2020-12-03 13:19

棒欸

chenwei767 2020-12-03 10:36

太好了

Ryan Li 2020-11-30 15:38

感谢分享!

1 共 3 条评论, 1 页