I think this is a bad design of the language.
Global variables are bad things.
C# doesn't have them.
In this sense I like C# which prohibits any fields or methods in namespaces.
And few words considering public imports in D.
Excerpt from the C# 4.0 language specification
(http://www.microsoft.com/downloads/details.aspx?FamilyID=dfbf523c-f98c-4804-afbd-459e846b268e&displaylang=en#filelist)
says:
A using-namespace-directive imports the types contained in the given namespace,
but specifically does not import nested namespaces. In the example
namespace N1.N2
{
class A {}
}
namespace N3
{
using N1;
class B: N2.A {} // Error, N2 unknown
}
the using-namespace-directive imports the types contained in N1, but not the
namespaces nested in N1. Thus, the reference to N2.A in the declaration of B
results in a compile-time error because no members named N2 are in scope.
In D I can achieve similar(?) behavior by using 'import'('private
import' by default). But I also can evade by using explicit 'public
import'. This leads to bugs.
Globals lead to bugs.
--
Alex Makhotin,
the founder of BITPROX,
http://bitprox.com