Many questions

Yigal Chripun yigal100 at gmail.com
Mon May 4 22:50:24 PDT 2009


bearophile wrote:
> Yigal Chripun:
>> the downside to the current system is when you have one class in a file, 
>> the full name of it will be SomeClass.SomeClass instead of just 
>> SomeClass. (because of the redundancy of the module decl. in this case)
> 
> Generally if classes or functions are small, you put more than one of them (related ones) in the same module.

sure. nothing I said contradicts this. you can have however many 
constructs in one file. Either make only one of them as public, or put 
all of them inside a "module" declaration like you do now.

> 
> 
>> Ideally, I'd want at most one public root entity per file.
> 
> That's the Java ideal world.

well, the trade-off to consider is:
on the one hand - if you go for namespaces like solution you get most 
flexible design. i.e one file with a bunch of small public classes (for 
example exceptions) will be exactly the same as many small files with 
one class in each if in both cases you define all those classes to 
belong to one namespace.
on the other hand - this removes the ability to know in which file a 
class is defined.

I think that in such a case it's a reasonable trade off to have:
module exceptions {
   class A {}
   class B {}
   ...
}
where exceptions is the "root" element of the file.

so, exceptions.SomeException can be both a file called exceptions that 
contains a SomeException class and a exception directory with a file 
called SomeException that contains that specific class. (also, you can 
mix both ways, and have only some of the exceptions in separate files).

currently, if I have a file with a bunch of classes, and over time the 
file became too big and I decided to split it to several smaller files, 
such a split will affect the code because package.module.classA will 
become package.module.classA.classA after such a split.

> Bye,
> bearophile

another idea, is that if you have:
package
  |\
  | exceptions
  |    \
  |     classA.d
  |     classB.d
  |
exceptions.d

classA and classB files contain single classes by the same respective 
names, and exceptions.d contains a bunch of smaller classes in one file.
in this case the compiler could "fuse" together the paths so logically 
in the code you'll have package.exceptions.[class_name] where class_name 
is one of classA, classB or any of the classes defined in exceptions.d

does that sound reasonable? this is as close as possible I can think of 
to full namespaces without loosing the ability to find where some code 
is located in the file system.

in this case go to 'package' dir, inside you need to check the 
exceptions.d file. if desired class isn't in this file you know to go 
check the 'exceptions' dir, and so forth.



More information about the Digitalmars-d mailing list