Я новичок в 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.