查看 Rust Crates 的 Features

背景

在 Rust 学习过程中,我发现很多库的示例中会制定 features flag,我理解 features 是用来指定使用库的部分功能。例如 Tokio 的文档说明:

Tokio has a lot of functionality (TCP, UDP, Unix sockets, timers, sync utilities, multiple scheduler types, etc). Not all applications need all functionality. When attempting to optimize compile time or the end application footprint, the application can decide to opt into only the features it uses.

原文链接

查看可选的 Features

但是作为一个使用者我应该怎么知道一个库有哪些 features 可以选择,这些 features 分别代表什么含义呢?

在 Tokio 的 docs.rs 文档 上,我发现了最上方导航栏中的 Feature flags 栏,点击即可查看到可选的 features 的选项以及这些选项提供哪些功能的信息。

声明可选的 Features

那下一个疑问就是作为 crate 作者应该怎样声明支持的 features 呢?查看 The Cargo Book 中的解释,是在库的 Cargo.toml 中通过 [features] 段落指定的。

另外也建议 crate 的作者在文档中解释 features 的用法:

You are encouraged to document which features are available in your package. This can be done by adding doc comments at the top of lib.rs.