Proposal for std.path replacement

Jonathan M Davis jmdavisProg at gmx.com
Thu Mar 3 18:33:31 PST 2011


On Thursday 03 March 2011 18:04:11 Bekenn wrote:
> On 3/3/11 3:30 PM, Graham St Jack wrote:
> > My first instinct would be to use non-templated functions that take const
> > char[].
> 
> Please don't ever restrict encodings like that.  As much as possible,
> libraries should seek to be encoding agnostic (though I'm all for
> const-qualifying parameters).  This is one area where I feel the
> standard library severely lacks at present.

It's not a bad thing for functions to be templatized on string type. However, I 
would point out that it's fairly common practice to just use string everywhere 
except where you need a string to be a random-access range - in which case you 
used dstring - or where you need to pass a string to a Windows system function, 
in which case you convert it to a wstring or wchar[]. The need to use wstring 
when using Phobos is practically non-existent. Now, if you're frequently calling 
Windows system functions directly, then wstring and wchar[] would be used far 
more frequently, but don't expect Phobos to be using wstring much.

It's likely that more of Phobos will become string-type-agnostic and templatize 
on string type, but there may be functions which aren't simply due to the 
increased complexity or because no one gets around to it with everything else 
that needs doing. The normal string type to use is string, so that's generally 
what is designed for.

> As a Windows developer, I prefer to use wchar strings by default and use
> only the W versions of the Windows API functions, because the A versions
> severely limit functionality.  Only the W versions have full support for
> Unicode; the A versions are entirely dependent on the current (8-bit)
> code page.  This means no support for UNC paths or paths longer than 260
> characters, and also means that international characters commonly end up
> completely garbled.  Good practice in Windows is to consider the A
> versions deprecated and avoid them like the plague.
> 
> References:
> 	http://msdn.microsoft.com/en-us/library/dd317752%28v=VS.85%29.aspx
> 	http://blogs.msdn.com/b/michkap/archive/2006/10/24/867880.aspx
> 	http://blogs.msdn.com/b/michkap/archive/2006/08/22/707665.aspx
> 	http://blogs.msdn.com/b/michkap/archive/2007/05/07/2464778.aspx
> 
> When I first started looking at D, I compiled the win32 example on the D
> web page.  I noticed it used MessageBoxA, so I changed that to
> MessageBoxW.  That generated an error, because nobody had bothered to
> add a MessageBoxW declaration.  That was the very last time I used
> std.c.windows.

If there are key functions like that that you expect to be druntime (in this 
case, it would be core.sys.windows.windows - I believe that std.c is deprecated, 
or at least it's not intended to be used anymore; OS-specific functions like that 
go in core), then open up enhancement requests for them, or they're unlikely to 
be added. I don't believe that anyone is going through the entirety of the 
Windows API (or the Posix API for that matter) and adding all those functions to 
druntime. They generally get added as required by Phobos or other stuff in 
druntime or because someone requests it. Not to mention, you can always use 
github to make the appropriate changes to druntime and create pull request. That 
would likely speed up such improvements.

- Jonathan M Davis


More information about the Digitalmars-d mailing list