Many questions

Yigal Chripun yigal100 at gmail.com
Mon May 4 23:05:14 PDT 2009


Christopher Wright wrote:
> Fractal wrote:
>>> That's debatable.  The hateful thing about namespaces is that they give
>>> you absolutely ZERO clue as to where any particular thing is coming 
>>> from.
>>>
>>> If I see "tango.io.device.File", I know exactly where the source for
>>> that module is.
>>>
>>>   -- Daniel
>>
>> Yes it is true. But the thing is not "where is it". The thing that i 
>> want to remark is "what long".
>>
>> If you use a namespace, you can write many big classes in separate 
>> files without problem, and also, with the same namespace. (and also 
>> allowing separate a multiplatform class in different files, for each 
>> one).
>>
>> With modules you are limited in a single file. And it will grow 
>> potentially with multiplatform code, and makes hard to find a error or 
>> line...
>> Added to it, the amout of version statements.
>>
>> Also Namespaces can use upper case characters... documentation 
>> indicates that package and module names should be written all in lower 
>> case.
>>
>> A good point for modules is the permisson to access private or 
>> protected members of types declared in the same module or package, 
>> without the "friend" keyword anywhere.
>> In namespaces, it can be done by sharing access to all namespace types.
>>
>> Really module, packages, and namespaces are the same thing. The unique 
>> thing that i want, is the possibility of use many files as one (for 
>> modules)
> 
> Modules are compilation units. This makes them different from namespaces.
> 
> Packages are for the compiler to find source code. Namespaces are for 
> humans to find source code. These have sufficient overlap that they have 
> been unified.
> 
> For modules to do what you want, a module cannot be the unit of 
> compilation. What then will be the unit of compilation? And why is this 
> feature important enough to merit the change?

in my opinion a more flexible design is:
namespaces can map both to packages/dirs (as it is now) _and_ files for 
added flexibility, and compilation units will be files.

I don't think splitting one class/struct/etc to several files is good 
design, there are better ways to acomplish this, like defining platform 
specific behaviors as mixins:
template foo_win32 {}
template foo_linux {}
and in the class mix-in the appropriate mixin.
*but*, I do think that splitting one file that got too big over time or 
uniting a bunch of small files into one should be possible.



More information about the Digitalmars-d mailing list