phobo's std.file is completely broke!

Nick Sabalausky (Abscissa) SeeWebsiteToContactMe at semitwist.com
Wed Sep 19 08:37:17 UTC 2018


On 09/19/2018 02:55 AM, Vladimir Panteleev wrote:
> On Wednesday, 19 September 2018 at 06:34:33 UTC, Nick Sabalausky 
> (Abscissa) wrote:
>> - Does it actually, necessarily perform those additional OS calls?
> 
> We need to expand relative paths to absolute ones, for which we need to 
> fetch the current directory.
> 

So in other words, NO, it does NOT necessarily perform additional OS 
calls. It ONLY performs an additional call if the given path is relative 
*AND* if we've decided to not simply reject too-long relative paths 
outright (which I'd be fine with as a compromise. At least it would be 
well-defined and enforced with a meaningful message.)

>> - Is it really?
> 
> Is what really what? If you mean the memory allocation, we do need a 
> buffer to store the current directory. We also need to canonicalize away 
> things like \..\, though we may be able to get away with it without 
> allocating.

So, in many cases, it's NOT really "a good deal of extra logic that 
performs additional OS calls and generates additional GC garbage".

>> - If it actually does, are those additional, necessarily OS calls 
>> prohibitively expensive?
> 
> They are certainly going to be less expensive that actual filesystem 
> operations that hit the physical disk,

Sounds like QED to me. Especially if the alternative is silently 
incorrect behaviour on an entirely realistic subset of cases. (Realistic 
enough that both the thread's OP and the bug report's OP each ran into 
purely by accident.)

>but it will still be an unwanted 
> overhead in 99.9% of cases.
> 

That's an extremely exaggerated figure, and we've already established 
that the overhead is minor and often able to be elided. Weighted against 
the cost of incorrect behaviour on a subset of non-rejected inputs, I'd 
say that's a very clear "Yes, please!"

The extreme minority of currently-hypothetical cases which require 
minimal overhead for individual file I/O operations are free to 
low-level optimize themselves as-needed. Correct behaviour should never 
be sacrificed for minor performance tweaks when the minor performance 
tweak can still be obtained through other means if absolutely necessary.

> In any case, the overhead is only one issue.
> 

What's the other issue(s)?


More information about the Digitalmars-d mailing list