Seems like there's a good case to be made for a 3rd level of visibility between private and public. Similar to Java's package level. I'd like to see (from least to most public):
private: only visible inside the current namespace/module
crate (possible name): importable anywhere in the current crate/compilation unit
public: visible outside the crate/compilation unit
private: only visible inside the current namespace/module
crate (possible name): importable anywhere in the current crate/compilation unit
public: visible outside the crate/compilation unit