In order or preference, out of the ones I'm familiar with:
- Java. Very simple. Diff friendly. Import names match the filesystem.
- Rust. Also good - you can do it diff friendly though nobody does. Slightly confusing distinction between module hierarchy and filesystem.
- Python. Pretty bad. Conflates third party packages with local files, almost nobody actually understands relative imports, even more confusing distinction between module hierarchy and filesystem. Module imports can have side effects. Unnecessarily different syntax between
import...andfrom .... import.... - C/C++. Obviously this is the worst.