The Great Module Adventure Continues

I like this idea a lot, and I'm not sure it's been discussed much. More often I've seen the suggestion to make std::foo work elsewhere by adding use std to the prelude, but since we're already deprecating extern crate this seems just as doable.

It works in C++, Java, and C# because they use the shadowing style we've rejected, allowing unprefixed full paths in expressions; on the other hand Swift, Go, Javascript, Python, Ruby, and PHP seem to have no way to access the contents of a module without importing it first. Arguably C++ fits in the second category too because #includes are such a different beast from using.

I'm not sure if there even is a widely-used language where you have to prefix absolute import paths- even languages that allow relative paths still either make absolute the default (Python) or fall back on it (PHP). The common case is just overwhelmingly for pulling in dependencies, so in that sense I feel like use ::std would be a far bigger papercut than "can't copy a use path into an expression," especially given how many languages don't support that anyway.

This is interesting. You copy and paste a path from a use into an expression, or from an expression in another module? I'm not sure how you'd wind up doing the former, and I'm not sure how any of this would help the latter- could you clarify? self also feels like something this won't really help, regardless of variant- it's just fundamentally {not ,}needed in {expressions,use}, given our lack of module-level shadowing, no?