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