title: Why does Rust promote use statements with explicit imports?
body: <p>I see a lot of Rust code where the <code>use</code> statements look like this:</p>
  
  <pre><code>use std::io::net::ip::{SocketAddr, Ipv4Addr};
  </code></pre>
  
  <p>The way I get it, this restricts the <code>use</code> statement to only import <code>SocketAddr</code> and <code>Ipv4Addr</code>.</p>
  
  <p>Looking from the perspective of languages such as Java or C# this feels odd as with such languages an import statement always imports all public types.</p>
  
  <p>I figured one can have the same in Rust using this statement.</p>
  
  <pre><code>use std::io::net::ip::*;
  </code></pre>
  
  <p>The only reason I could see for the explicit naming would be to avoid conflicts where two different imports would contain public APIs with the same names. However, this could be worked around with aliasing so I wonder if there's another advantage of the more strict "import only what is needed" approach?</p>