Proposal for std.path replacement
Lars T. Kyllingstad
public at kyllingen.NOSPAMnet
Thu Apr 7 01:32:44 PDT 2011
On Wed, 06 Apr 2011 15:51:15 +0100, Bruno Medeiros wrote:
> On 03/03/2011 16:29, 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
>
> I hope I'm not too late for the party, especially because I do have a
> bit of criticism for this one...
Not at all. Reviews of, and further work on, std.path has been put on
hold until I have handed in my PhD thesis (which, if all goes well,
should be very soon). I haven't got time to participate in any extensive
discussions on the NG right now. So there will be ample opportunity to
comment on the design yet. :)
> Looking at the DDoc page, this module seem to have very
> platform-dependent behavior. I find this detrimental, even unsavory. I
> think it's best that programs work with internal data structures that
> are as platform-independent as possible, and only convert to
> platform-dependent data or API at the very last possible moment, when so
> required (ie, when interfacing with the actual OS, or with the user).
>
> So, with that in mind, there is a toCanonical function that converts to
> a OS specific format, but there's no function to convert to an
> OS/platform independent format?... :S
>
> Also, what does dirName( "d:file") return on POSIX? Is it the same as on
> Windows? I hope so, and that such behavior is explicitly part of the API
> and not just accidental. (I don't a linux machine nearby to try it out
> myself) Because, what if I want to refer to Windows paths from a POSIX
> application? (I'm sure there are scenarios where that makes sense)
>
> Or what if I just want my application to behave in a pedantically
> platform-identical way, like having it to accept backlashes as path
> separators not just on Windows but on POSIX as well? (This makes much
> more sense than is immediately obvious... in many cases it can be argued
> to be the Right Thing)
>
>
> I'm sorry if I seem a bit agitated :P , it's just that due to some more
> or less recent traumatizing events (a long story relating to Windows 7)
> I have become a Crusader for cross-platformness.
>
>
> The other suggestion I have (mentioned by others as well) is to
> generalize the driver letter to a device symbol/string/identifier. But
> this only makes sense if this device segment works in a
> platform-independent way. This generalization might make the path module
> useful in a few new contexts. Note, I'm not saying it should handle
> URIs, in fact I want to explicitly say it should not handle URIs, as
> URIs have additional semantics (query and fragment parts, the percent
> encoding, etc.) which should not be of concern here.
>
> BTW, I admit I take some inspiration from this API:
> http://help.eclipse.org/helios/index.jsp?topic=/
org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/
IPath.html
> Note that here there is only *one* platform dependent function, the
> aptly named toOSString() ...
Thanks for the feedback, I will read it more thoroughly when I take up
work on std.path again. Just a general comment, though: Having the
exact same functionality on Windows and POSIX just doesn't work, if
nothing else simply because "c:\dir\file" is a valid base name on POSIX.
That is, both ':' and '\' are valid filename characters. The ONLY
invalid filename characters on POSIX are '/' and '\0'.
Yes, weird file names like that may be uncommon, but the library should
be able to handle them nonetheless.
-Lars
More information about the Digitalmars-d
mailing list