digitalmars.D.bugs - [Issue 453] New: When importing modules compiler can not distinguish between directory and file
- d-bugmail puremagic.com (28/28) Oct 24 2006 http://d.puremagic.com/issues/show_bug.cgi?id=453
- Chris Nicholson-Sauls (7/44) Oct 24 2006 This has come up many times before, and unless Walter has had a severe c...
- Aarti_pl (12/62) Oct 25 2006 I am not trying to enforce anything - maybe it's really not good to
- d-bugmail puremagic.com (12/12) Oct 25 2006 http://d.puremagic.com/issues/show_bug.cgi?id=453
- d-bugmail puremagic.com (11/18) Oct 25 2006 http://d.puremagic.com/issues/show_bug.cgi?id=453
- Walter Bright (13/14) Oct 25 2006 Consider the following:
- Bradley Smith (23/45) Oct 25 2006 I see your point. From my point of view, this is simply another case of
- Walter Bright (10/10) Oct 25 2006 Consider this:
http://d.puremagic.com/issues/show_bug.cgi?id=453 Summary: When importing modules compiler can not distinguish between directory and file Product: D Version: 0.169 Platform: Other OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: aarti interia.pl ... It cause problems when there is same name of file as a name of directory. E.g. Directory: doost/program_options/a.d doost/program_options/b.d doost/program_options/c.d doost/program_options.d Program: import doost.program_options; Above cause error, although it is easy to see that I mean file not a directory (AFAIK last part of import is always file). It's quite a basic problem, so I thing it should be corrected in the first place. It causes unnecessary problems when porting code from C++ and disallows creating program directory structure in the way designer wants. --
Oct 24 2006
d-bugmail puremagic.com wrote:http://d.puremagic.com/issues/show_bug.cgi?id=453 Summary: When importing modules compiler can not distinguish between directory and file Product: D Version: 0.169 Platform: Other OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: aarti interia.pl .... It cause problems when there is same name of file as a name of directory. E.g. Directory: doost/program_options/a.d doost/program_options/b.d doost/program_options/c.d doost/program_options.d Program: import doost.program_options; Above cause error, although it is easy to see that I mean file not a directory (AFAIK last part of import is always file). It's quite a basic problem, so I thing it should be corrected in the first place. It causes unnecessary problems when porting code from C++ and disallows creating program directory structure in the way designer wants.This has come up many times before, and unless Walter has had a severe change of heart (and some genius insights) it won't be changing. Allowing modules and packages to share a name introduces all manner of namespacing conflicts and ambiguities... effectively, imports break down entirely (particularly if any more naming conflicts occur deeper into the namespacing). -- Chris Nicholson-Sauls
Oct 24 2006
Chris Nicholson-Sauls napisaĆ(a):d-bugmail puremagic.com wrote:I am not trying to enforce anything - maybe it's really not good to include such a feature to compiler - I don't try to solve this problem. But if current status quo must be kept, it should be clearly stated in documentation with short explanation (rationale), as it is quite restrictive. I am writing from the "still newbie" position (only one year looking at D newsgroup), so I am sure that this issue will continuously come back later, when new people will give a try to D Language. Regards Marcin Kuszczak Aarti_plhttp://d.puremagic.com/issues/show_bug.cgi?id=453 Summary: When importing modules compiler can not distinguish between directory and file Product: D Version: 0.169 Platform: Other OS/Version: All Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: aarti interia.pl .... It cause problems when there is same name of file as a name of directory. E.g. Directory: doost/program_options/a.d doost/program_options/b.d doost/program_options/c.d doost/program_options.d Program: import doost.program_options; Above cause error, although it is easy to see that I mean file not a directory (AFAIK last part of import is always file). It's quite a basic problem, so I thing it should be corrected in the first place. It causes unnecessary problems when porting code from C++ and disallows creating program directory structure in the way designer wants.This has come up many times before, and unless Walter has had a severe change of heart (and some genius insights) it won't be changing. Allowing modules and packages to share a name introduces all manner of namespacing conflicts and ambiguities... effectively, imports break down entirely (particularly if any more naming conflicts occur deeper into the namespacing). -- Chris Nicholson-Sauls
Oct 25 2006
http://d.puremagic.com/issues/show_bug.cgi?id=453 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |WONTFIX Cannot fix because if name were both a module and a directory name, import name; import name.foo; the two uses of name could not be distinguished. --
Oct 25 2006
http://d.puremagic.com/issues/show_bug.cgi?id=453Cannot fix because if name were both a module and a directory name, import name; import name.foo; the two uses of name could not be distinguished.Why is that? The documentation states the following: The Identifier preceding the rightmost are the packages that the module is in. The packages correspond to directory names in the source file path. Therefore, I would interpret the first import statement as importing the module name, and the second import statement as importing the module foo in the package name. Can't packages be distinguished from modules? --
Oct 25 2006
d-bugmail puremagic.com wrote:Can't packages be distinguished from modules?Consider the following: int F; class F { } That doesn't work either. Cannot have two identical names in the same scope mean different things. Now consider: import name; // name.d import name.foo; // name\foo.d and in the code: name.foo.bar; is that foo.bar inside name.d, or bar inside name\foo.d? It's not going to work.
Oct 25 2006
Walter Bright wrote:d-bugmail puremagic.com wrote:I see your point. From my point of view, this is simply another case of symbols conflicting, similar to symbols with the same name imported from different modules. When that happens, the compiler reports the problem, and I have to resolve it. Couldn't the compiler look for name.foo.bar in both name.d and name\foo.d, and report an ambiguity if one exists? For example: dmd main.d name.d name\foo.d main.d(6): Error: name.foo.bar has multiple definitions: foo.bar in name.d(4), and bar in name\foo.d(2) ----- name.d ----- struct F { int bar = 1; } F foo; ----- name\foo.d ----- int bar = 2; ----- main.d ----- import name; import name.foo; void main() { printf(name.foo.bar); }Can't packages be distinguished from modules?Consider the following: int F; class F { } That doesn't work either. Cannot have two identical names in the same scope mean different things. Now consider: import name; // name.d import name.foo; // name\foo.d and in the code: name.foo.bar; is that foo.bar inside name.d, or bar inside name\foo.d? It's not going to work.
Oct 25 2006
Consider this: int Foo; class Foo { const int bar = 3; const int min = 4; } and the code: Foo + 3; // use the int Foo Foo.max + 3; // use the int Foo Foo.bar + 3; // use the class Foo Foo.min + 3; // error, ambiguous D can be made to work that way. I don't think it's a good idea, however. It'll be a major source of confusion, and bizarre special cases.
Oct 25 2006