Module naming conventions

Christopher Wright dhasenan at gmail.com
Mon Nov 19 06:16:12 PST 2007


Don Clugston wrote:
> Walter Bright wrote:
>> Bill Baxter wrote:
>>> Is this list complete?
>>>
>>> Convention LC: All package module names are lower case all the time.
>>> Example:   import foo.bar.baz;
>>> Pros:
>>> *) Long established convention (~10 years) used by Phobos
>>>
>>> *) Differentiates module names from class names.
>>>    Like class "Stream" in module "std.stream
>>>
>>> *) Related: prevents redundancy in fully qualified names
>>> (std.stream.Stream, not std.Stream.Stream)
>>>
>>> *) Easy-to-remember rule ("just use lowercase") prevents naming errors
>>> slipping through the cracks on case-agnostic Windows.
>>
>> This is not a big issue, but an irritation: sometimes, I see code 
>> developed on windows that names a file like: "Foo.h", but then 
>> #include's it with "foo.h". It all works fine until one tries to port 
>> the code to Linux. Worse, sometimes you'll see the reverse problem, 
>> where there's a Foo.c and a foo.c on Linux and you have to port it to 
>> windows.
>> Having all file/module/package names in lower case is just a 
>> no-brainer way to avoid this issue.
>>
>> I'll also confess I just don't like filenames with caps, underscores, 
>> or special characters in them, nor do I like long filenames. I have 
>> some image programs that insist on writing out .JPG files, and if I 
>> forget to rename them to .jpg before ftp'ing them to the web server, 
>> they don't work. Using all lower case, simple filenames, minimizes 
>> problems moving the files between systems.
>>
>> I'm surprised nobody has asked why D doesn't simply enforce module 
>> names to be in all lower case <g>. 
> 
> You could prohibit the use of module names differing only in case.
> 
> So that if one module has
> import foo.bar;
> and another has
> import foo.Bar;
> an error should be generated, even if the file(s) would be found on that 
> OS.
> The correct capitalisation should be obtained from the module statement.
> (And even on Windows, you _could_ still check to see if the file case 
> matches the module statement).

Taking the opposite approach -- explicitly ignoring capitalization, even 
if the filesystem in case sensitive -- will eliminate discussions of 
this nature, on the other hand, will strongly encourage people using 
case-sensitive filesystems to not have modules whose names differ only 
in case, and will probably take less code than your recommendation.

I don't see either one happening in the near future, though.



More information about the Digitalmars-d mailing list