-
Rust的编译器是你的朋友。
-
给你的代码编写Document ,写出富有表现力的名字、可读性高的文档;最好可以在注释里测试你的代码片段。
-
了解这些著名的关系对:
-
如果可以的话使用early returns。
-
尽可能少的去调用
clone
,当你真的需要使用clone
时,可以试试Rc::clone(&value)
[rc docs] -
Rust的一个特点是安全可变性,但是只有当你写出的不可变变量和纯函数使你的代码不可读,太慢或者容易出错的时候,才使用它。
-
“提前优化是一切灾祸的根源。”——特别是在Rust这种运行速度很快的语言当中。不要做额外的事除非你的基准测试已经准备好要去测试你的代码。个人的一些案列:
- 当我在用Rust写代理服务器的时候,有两个因素使得代理服务器的速度减慢了好几倍,一个是忘记删除存在于热路径(hot path)中的
println
调用,而另一个则是由于DNS服务器变慢。我建议缩小范围并优先解决更高级别的问题。 - Seed的VDOM补丁算法在第一次尝试时是足够快的,然而由于DOM的调用大大降低了它的速度。我建议在你尝试去优化你的Rust代码之前,先去查看一下它的IO和外部依赖。
- 当我在用Rust写代理服务器的时候,有两个因素使得代理服务器的速度减慢了好几倍,一个是忘记删除存在于热路径(hot path)中的
-
仅编写跨平台代码,并且仅使用Rust工具链。
-
不要害怕去写异步代码。
-
了解诸如此类受欢迎的库:
-
Clippy 和 rustfmt 同样也是你的朋友。cargo-make 是你非官方的朋友。
- 你可以使用
cargo make verify
命令在几乎所有的Seed/my projects。它将会使用Clippy
格式化代码,并且测试它。可以在Rust quickstart看到任务定义
- 你可以使用
-
编写测试和基准(参见 Criterion.rs)。
-
用下面的函数参数类型进行实验,并了解这些用处。(提示:在Seed的repo里这些参数类型都有不同的用处,可以参考学习。)
-
偶尔需要做一下:
- 运行
rustup update
去更新你的编译器和工具链 - 每次更新编译器版本之后(或者更新依赖之后),删除你项目下占用你磁盘空间的
target
文件夹,他们是老版本编译器的产物。
- 运行
-
了解这些内存相关的函数:
-
只有在特殊情况下,或者当你觉得极致性能对于你的领域来说十分有必要的情况下(比如你写操作系统,或者写超快速低级别的库的时候),才去使用unsafe。在Seed项目下只有安全的代码(包括Seed的核心部分)。
-
只有在为了给你的用户改进你提供的API的时候,才去使用像Any这种魔法。它通常只会让你的代码更糟糕。
-
学会使用通道(channel),标准库的文档以及一些相关crate的文档:
-
只有你真的觉得有必要的时候才去使用宏,并且要给你的宏写上合适的注释。IDE对宏的支持很糟糕,比如自动补全通常不能工作。
- 有一些例外的宏比如
println
,vec
,include_str
,所有的标准库的宏 - 是的,在Seed里面有很多的宏,但是这些宏的大部分被用来替代HTML并且他们十分短。还有我们修复了他们当中的很多bug,因此该规则仍然适用。我们在权衡了很多东西之后才决定去使用宏。
- 然而宏在很多地方十分有用:
- 缺少抽象概念的时候,比如
drop_zone
里面的stop_and_prevent
宏。 - 宏对于可读性很有帮助,比如
i18n
里面的create_t
宏。 - 很难或不可能通过正确的Rust类型编码所有内容的时候,比如Seed里面像是
div!
之类的元素宏。 - 它可以帮助你减少样板代码,比如Seed的
log!
宏,它格式化输入的参数然后在后台调用了JavaScript的console.log
。
- 缺少抽象概念的时候,比如
- 有一些例外的宏比如
译者:虽然就Seed和yew而言我更喜欢yew,但是不妨碍这篇文章写的好啊,同时在本篇文章的后半段还有部分作者对rust的表白话语,看的我差点也想翻译了,手动狗头。。。 翻译的不是很流畅,可能会出现不少错误,欢迎大家指正。
评论区
写评论棒欸
太好了
感谢分享!