Conflict between std.file write() and std.stdio write()

Craig Dillabaugh craig.dillabaugh at gmail.com
Thu Oct 3 13:57:22 PDT 2013


On Thursday, 3 October 2013 at 19:49:07 UTC, Jonathan M Davis 
wrote:
> On Thursday, October 03, 2013 20:57:20 Craig Dillabaugh wrote:
>> On Thursday, 3 October 2013 at 18:12:01 UTC, Jonathan M Davis

clip

>> > 
>> > - Jonathan M Davis
>> 
>> Fair enough. As you point out the fix is pretty simple.
>> 
>> However, I can't seem to remember in C++ or any other language
>> (not that I know all that many other languages) coming across a
>> function in the standard library that conflicted with another
>> function in the standard library in this way. I am likely to 
>> get
>> corrected on that claim though :o)
>
> I'm sure that it could be found somewhere, but C++ avoids it 
> for two reasons:
>
> 1. As good as the STL is, it's pathetically small.
> 2. It only uses one namespace, so it _has_ to avoid conflicts, 
> even if that
> means using uglier names.
>
> Java or C# might have some conflicts (I'm not sure - they 
> certainly have much
> richer standard libraries than C++ does), but they almost 
> always avoid it,
> because they're don't even allow free functions, so you only 
> end up having to
> worry about class names conflicting. Their module systems are 
> also different
> from D's (particularly C#'s), which changes things a bit.
>
> Other languages like python tend to force you to give the full 
> path anyway,
> which avoids conflicts.
>
> The reason that D runs into them is because the default is to 
> pull everything
> into the current module when you import it. If we'd taken the 
> approach of
> making you give the full import path by default or forcing you 
> to explicitly
> import each symbol, then it wouldn't be a problem (though that 
> would obviously
> cause other problems).
>
> And we'll definitely pick different names where appropriate, 
> but if the best
> names for two different functions in two different modules 
> happen to be the same
> name, then we're going to use it. And in same cases, we very 
> purposely picked
> the same name, because the functions did the same type of thing 
> (e.g. the
> functions in std.ascii and std.uni which do the same thing but 
> for ASCII and
> Unicode respectively).
>
> - Jonathan M Davis

That is an excellent explanation.  Thank you.

Do you think it would be worth noting the conflict in the 
documentation for readText()/write()?

I should have mentioned in my original post that I likely could 
have figured out the workaround for this, and I posted here more 
because I was surprised that std.stdio and std.file would have a 
conflict!  It seems like something folks new to D might run into 
with some frequency, and be thinking "whats up with that!".

If others think it is a good idea, maybe I will head over to 
gitHub and try to add something.

Craig


More information about the Digitalmars-d-learn mailing list