Proposal for std.path replacement
Lars T. Kyllingstad
public at kyllingen.NOSPAMnet
Fri Mar 4 00:33:58 PST 2011
On Thu, 03 Mar 2011 10:39:38 -0800, Jonathan M Davis wrote:
> On Thursday, March 03, 2011 08:29:00 Lars T. Kyllingstad wrote:
>> As mentioned in the "std.path.getName(): Screwy by design?" thread, I
>> started working on a rewrite of std.path a long time ago, but I got
>> sidetracked by other things. The recent discussion got me working on
>> it again, and it turned out there wasn't that much left to be done.
>>
>> So here it is, please comment:
>>
>> http://kyllingen.net/code/ltk/doc/path.html
>> https://github.com/kyllingstad/ltk/blob/master/ltk/path.d
>>
>> Features:
>>
>> - Most functions work with all string types, i.e. all permutations of
>> mutable/const/immutable(char/wchar/dchar)[]. Notable exceptions are
>> toAbsolute() and toCanonical, because they rely on std.file.getcwd()
>> which returns an immutable(char)[].
>>
>> - Correct behaviour in corner cases that aren't covered by the current
>> std.path. See the other thread for some examples, or take a look at
>> the unittests for a more complete picture.
>>
>> - Saner naming scheme. (Still not set in stone, of course.)
>
> Some comments on names:
>
> 1. They should properly camelcased. fcmp, fnccharmtach, and fnmatch are
> probably okay, but basename should definitely be baseName.
We probably couldn't disagree more. :) I think fncharmatch is a horrible
name. On the other hand, basename() is named after the 'basename' UNIX
utility, and doesn't mean anything on its own. At least, I've never
heard of such a thing as the "base name" of a file, but please prove me
wrong.
> 2. Please shorten the Separator in the names to Sep (i.e. dirSep,
> pathSep, and isDirSep). They're just as clear that way and less
> annoyingly long. Similarly, I'd rename currentDirSymbol to currDirSymbol
> - or maybe even have currDirSym and parentDirSym.
>
> 3. I'd prefer dirName to directory. It's shorter, closer to what was
> there before, and a better name IMHO. directory makes me wonder if it's
> checking whether the name is a directory or not (which is what
> std.file.isDir does).
>
> 4. It might be better to short extension/Extension to ext/Ext, but that
> works better with functions like stripExtension (stripExt), then it
> would extension (ext) by itself, and if we wanted complete consistency,
> then changing Extension to Ext would mean changing extension to ext,
> which wouldn't really be desirable. I'd still be very tempted to rename
> the xExtension functions to xExt though. Extension is unnecessarily
> long.
I have a preference for the longer names, but not a very strong one. I'm
not going to oppose the changes if others agree with you.
> 5. setExtension might be better as replaceExtension, since set tends to
> imply that you're doing the change to the passed in string rather than
> just returning a new string with the changes.
Good point.
> 6. I'd strongly suggest making most of the functions properties (though
> that would require changing the examples). Functions which are nouns
> (such as drive or extension) really should be properties, otherwise they
> shouldn't have names which are nouns. basename/baseName is a funny one
> though since it's a noun and really should be a property, but it does
> have a version which takes an extra parameter, so I'm not sure what to
> do with that one. Unfortunately, for some reason, at the moment you
> can't overload property function with a non-property function (I keep
> meaning to open an enhancement request on that).
Also a good point. Not only that, most functions should be pure @safe
nothrow, but I've completely forgotten to add these annotations!
> As far as examples go, assuming that you made it so that .bashrc is a
> file with a base name of .bashrc and no extension rather than a file
> with no base name and an extension of bashrc (I haven't looked at the
> implementation at all yet, so I don't know what you did with that), then
> you really should put it (or an example like it) in the examples.
It's in the examples for extension() and stripExtension().
> At a first glance, it looks good overall, but I really think that the
> noun functions should become properties or have their names changed and
> that some of the names really should be shortened. We want properly
> descriptive names, but it doesn't take that much for a longer name to
> get irritating.
>
> - Jonathan M Davis
Thanks for the feedback!
-Lars
More information about the Digitalmars-d
mailing list