I think [cratename] is confusing if it’s going to be used inline, and not only in use statements. Originally I wanted the qualifier on the use itself:
use extern cratename
or
use extern cratename::something
I don’t think the possibility of code using impl [std]::fmt::Write for Smth is great for the readability, especially if it’s mixed with arrays etc.
As much as I dislike Go, I think that having every external symbol prefixed by it’s module name/import name was an interesting idea. So in Rust it would mean that only modules (and not symbols itself) can be imported with use (with a possibility of rename to avoid collisions), and then used with a prefix they were imported with, so always:
use extern std::thread;
fn ... {
thread::sprawn()
}
and use std:;thread::spawn is impossible.
I’m not sure if’s best idea for Rust, but it sure helps with certain things.