Qual é a diferença entre `use` e `extern crate` em Rust?
Olá! Comecei a estudar Rust recentemente e fiquei confuso com os imports. Em alguns exemplos vejo `extern crate`, e em outros, `use`. Por exemplo, escrevo um programa simples que usa a crate `rand` para gerar números aleatórios:
```rust
// Opção 1
extern crate rand;
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
let n: u32 = rng.gen_range(1..101);
println!("Número aleatório: {}", n);
}
```
Mas também vi código onde `extern crate` não é usado, e já escrevem direto `use`:
```rust
// Opção 2
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
let n: u32 = rng.gen_range(1..101);
println!("Número aleatório: {}", n);
}
```
Ambas as opções funcionam, mas não entendo qual é a diferença. Quando preciso escrever `extern crate`, e quando apenas `use` é suficiente? Será que `extern crate` é uma construção obsoleta? Ou é necessária para algum caso especial? Explique, por favor, com exemplos. Desde já, obrigado!