[phobos] std.path cleanup

Lars Tandle Kyllingstad lars at kyllingen.net
Thu Apr 22 00:41:16 PDT 2010


I have a few suggestions for improvements to std.path, and if people 
agree, I'll be happy to implement them:


1. Cross-platform path handling:

Since most of std.path only deals with strings, and therefore doesn't 
perform any OS-specific operations, there is really no reason to 
completely hide the Windows path handling stuff from POSIX users and 
vice versa.

I therefore propose to put the Windows stuff in a WindowsPath namespace 
and the POSIX stuff in a PosixPath namespace, implemented as structs 
with only static members.

The module-level functions stay -- after all, a POSIX user will want to 
deal with POSIX paths most of the time -- but now as aliases of either 
PosixPath or WindowsPath member functions, depending on which OS the 
library is compiled for.


2. Consistent naming:

   sep       -> dirSeparator
   pathsep   -> pathSeparator
   isabs()   -> isAbsolute()
   rel2abs() -> toAbsolute()
   getExt()  -> extension()


3. Add some useful stuff, like the toCanonical() function I have in my 
personal library (it's like rel2abs, except it also resolves ../ and ./).


4. Change the type of sep, altsep, etc. to immutable string.  (Or is 
there a good reason why they're all _static_ arrays?)


5. Get rid of the legacy stuff (specifically, the getBaseName and 
getDirName aliases).  Now's a good a time as any.


6. Fix bugs.  Some are in Bugzilla, and there are a couple which I've 
found quite recently but haven't gotten around to reporting yet:

   * join("", "foo") returns "/foo", should be "foo".

   * On POSIX, getExt("/tmp/.foo") returns "foo", should be ""
     (it's the name of a hidden file, not an extension).



Whatcha think?

-Lars


More information about the phobos mailing list