我希望学习 Rust 时知道的三件事
在 Screenleap,我们在生产中运行 Rust,但我觉得我仍然只触及了该语言的表面。希望你能像我一样喜欢学习 Rust。
学习时间比大多数语言都要长
作为专业程序员,我们期望每隔几年学习一门新语言,而且通常不会花很长时间。学习 Rust 对我来说是不同的,原因有以下三个:
-
Rust 是一门大语言。官方书有500多页,要跳过不少。
-
它引入了新概念:Ownership, Lifetimes, Traits。这些不是我使用过的任何其他语言的。
-
它使其他语言隐藏的东西变得明确。在其他语言中,您可以愉快地传递值并从任何地方更改它们。该语言在内部做了很多事情以使其为您服务。 Rust 让你可以控制这些事情。如果您有 C++ 背景,这部分对您来说会更容易。
好消息是这里有学习 Rust 的优秀资源,以及一个非常有帮助的社区。offical Rust Book 是理想的起点。 Rust By Example 也给了我很多帮助。
标准库很小,您将需要依赖项
学习一门语言也意味着学习它的标准库,所以一开始我会尽量避免依赖。这在 Rust 中是不可能的。
大多数项目都使用几个半官方的crates,您可以认为它们是标准库。示例包括: log, chrono, rand, clap, reqwest and serde.
一旦我接受标准库不包含电池,我发现很容易识别我需要的库。 Rust Cookbook是一个值得一看的好地方,crates.io 上下载次数最多的crate也可以。
很多行为都属于Trait
在 Rust 中,很多方法并不在对象本身上,而是通过Trait添加的。在这种情况下,将Trait视为混合(mix-in),一种向现有对象添加行为(方法)的方法。
这可能会导致很难找到您需要的方法。例如,File 对象没有明显的读取或写入方法。您必须查看“Trait Implements”下的内容,展开“Read”trait,最后展开“Showhidden undocumented items”。
当您导入trait时,方法将出现在您的对象上。如果您有 File
结构,则在导入附加这些方法的特征 ( use std::io::Read
) 之前,您无法从中读取任何内容。有时您会看到无法调用的类型上的代码调用方法(甚至是内置的类型,如 f64
)。那是因为他们正在导入一种你没有的trait。