Какая разница между использованием и внешним?

Я новичок в Rust. Я думаю, что use используется для импорта идентификаторов в текущую область, а extern используется для объявления внешнего модуля. Но это понимание (может быть, неправильное) не имеет для меня никакого смысла. Может ли кто-нибудь объяснить, почему у Rust есть эти две концепции и каковы подходящие случаи для их использования?

Ответ 1

extern crate foo указывает, что вы хотите связать с внешней библиотекой, и вводит имя ящика верхнего уровня в область видимости (use foo). Начиная с Rust 2018, в большинстве случаев вам больше не нужно будет использовать extern crate , потому что Cargo информирует компилятор о наличии ящиков. (Есть одно или два исключения)

use bar - это сокращение для ссылки на полностью определенные символы.

Теоретически язык не нуждается в use - вы всегда можете просто полностью квалифицировать имена, но ввод std::str::String.new(...) будет очень утомительным! Вместо этого вы можете просто набрать use std::str::String один раз, и тогда String будет ссылаться на это. (оператор use для String является частью прелюдии, поэтому вы обычно этого не видите)

Ответ 2

Принятый ответ был правильным на момент написания. Это однако больше не правильно. extern crate практически не нужен с Rust 2018.

Теперь вам нужно только добавить внешние зависимости в ваш Cargo.toml.

use работает так же, как и раньше.

Подробнее читайте в официальной документации.

Изменение: принятый ответ был отредактирован, чтобы правильно отразить изменения в Rust 2018.