I think I figured out how to articulate the biggest thing that’s bugging me about the
Right now, the path syntax used in
use precisely matches the path syntax used to name a module without using
use. That makes it obvious that
use of anything other than a top-level module is primarily a way of shortening names. For instance, you can write
use std::foo; and
use std::foo::bar; and
bar. That seems extremely intuitive and compelling.
If we introduce a new syntax like
from std use foo;, or
use extern::std::foo;, or similar, then suddenly, the two syntaxes don’t match, breaking that compelling intuitive model.
I don’t have a fundamental objection to the idea of putting external crates and internal modules in different namespaces somehow. I do have a vehement objection to introducing inconsistency between
use (or equivalent) and direct usage of a full path. Let’s preserve that parallel and intuition.
Does that seem reasonable?