To handle name clashes among packages I wonder if we could have a namespace setting between exported and not-exported which is exported but you have to use :: (two dots) to access its objects. The difference between mandatory two dot and three dots in this case is that the exported objects are intended to be accessed whereas the three dot ones are not and it may be important to retain that distinction even though you have to explicitly preface both. If the package uses this intermediate form of exporting then it could be guaranteed that there are no name clashes. Perhaps it should be possible to specify this on an object by object basis within the package. This could be useful for larger projects made up of many packages. Of course one can already just have the convention that one uses two dots to access package objects but this would enforce it for certain packages and allow those package to avoid the annoying name clash warnings when loaded.