Personally, I like the idea of using extern to access external crates. I imagine this could be added backwards-compatibly in the future if desired, so not urgent or a big deal. But I’m thinking from a standpoint of “How do we want to be able to make imports look, with respect to clarity and readability?” And IMO being able to do something along the lines of this:
use std::{
collections::HashMap,
io::BufReader,
// Other std imports
};
use extern::{
rand::thread_rng,
regex::Regex,
// Other extern crate imports
}
use crate::{
foo::do_a_thing,
// Other root crate imports
};
use my_submodule::do_another_thing;
// Other relative imports
Would be really nice, from a clarity standpoint. I already essentially organize things in this order (first std, then external crates, then local crate, then relative imports), but being able to make it explicit in a succinct way would be really nice!
Without extern the external crates part ends up like this:
use ::{
rand::thread_rng,
// Other extern crate imports
}
Which isn’t the worst thing in the world, but looks a little weird, isn’t (probably) as clear to newcomers, and breaks the rhythm.
Anyway, maybe this isn’t the right place to post this–it’s certainly not urgent! But just my two cents. Over-all, I really like to new module proposal, though I haven’t personally played around with it yet.