www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Re: Cannot import module that has name of a package

Frits van Bommel Wrote:

 Hennrich Blöbaum wrote:
 Look at this:

 This gives error:
 test/foo.d: module test.foo module and package have the same name
 Is there any reason why this is blocked?

> <test/foo.d> > module test.foo; class bar { static void baz() { // ... Some function implementation ... } } > <test/foo/bar.d> > module test.foo.bar; void baz() { // ... Some completely different function implementation ... } > <main.d> > import test.foo; > import test.foo.bar; void main() { test.foo.bar.baz(); // which function does this call? }

Well, in D as well as other languages, such a file structure/example does not get past compilation and results in a symbol collision. From earlier experiments I know you could compile both modules individually and use a combined header file to attempt to link the object files which would give you a symbol collision error. As reports if you have no collision, it works. So why can't D rather report such collisions at compile time or linking instead? The current way in my point limits the way you can structure your D projects and is something which other languages do better. I think it could greatly enhance maintainability for D file hierarchies (and move it away from the currently really C-like module layouts).
Mar 23 2007