All languages have namespaces. It's clear you don't understand the concept. A namespace is an abstract container to provide context and ensure uniqueness between items with the same name. User is a namespace. Since you have a global namespace, you have to prefix the name to make another type of User. So yes, naming conventions (which are namespaces that are not enforced by the compiler) are due to the absence of namespaces as a construct. Sheesh.