Lints
在软件开发中,“lint”是一种用于帮助改进源代码的工具。Rust 编译器包含许多 lint,当它编译代码时,也会运行这些 lint。这些 lint 可能会产生警告、错误或没有任何输出,具体取决于您的配置方式。
这是一个简单的例子
$ cat main.rs
fn main() {
let x = 5;
}
$ rustc main.rs
warning: unused variable: `x`
--> main.rs:2:9
|
2 | let x = 5;
| ^
|
= note: `#[warn(unused_variables)]` on by default
= note: to avoid this warning, consider using `_x` instead
这是 unused_variables
lint,它告诉您在代码中引入了一个未使用的变量。这并非错误,因此它不是错误,但它可能是一个 bug,因此您会收到警告。
未来不兼容的 lint
有时需要更改编译器以修复可能导致现有代码停止编译的问题。“未来不兼容”的 lint 会在这些情况下发出,以便 Rust 用户能够顺利过渡到新行为。最初,编译器将继续接受有问题的代码并发出警告。警告中包含对问题的描述、将来将变为错误的通知,以及指向跟踪问题的链接,该链接提供详细信息并提供反馈机会。这为用户提供了一些时间来修复代码以适应更改。一段时间后,警告可能会变成错误。
以下是未来不兼容 lint 的示例
warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133)
--> lint_example.rs:11:13
|
11 | let y = &x.data.0;
| ^^^^^^^^^
|
= note: `#[warn(safe_packed_borrows)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #46043 <https://github.com/rust-lang/rust/issues/46043>
= note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior
有关未来不兼容更改的过程和策略的更多信息,请参阅RFC 1589。