Pathological import symbol shadowing
Walter Bright
newshound2 at digitalmars.com
Sat Nov 21 02:25:59 UTC 2020
On 11/17/2020 5:28 PM, Timon Gehr wrote:
> On 18.11.20 02:11, Walter Bright wrote:
>> On 11/15/2020 6:24 AM, Timon Gehr wrote:
> There is no collision with proper overload resolution. The error is spurious.
Reasonable people can disagree over what "proper" overload resolution is.
> What kinds of special cases have been added, by the way?
I don't remember the details, it was several years ago. And the fact that I
don't recall the details suggests it is more complex than necessary. I was
aiming for something better than C++ where perhaps 1 in 10,000 C++ programmers
can actually explain why one symbol is preferred over another, the other 9,999
just try random things until they get what they want.
That I've failed at that is disappointing. But I also know that endlessly
tweaking it to find the "proper" solution means endlessly breaking existing code
in mysterious ways.
> I think that's not true in this case. (As I know you are aware, hijacking
> protection is designed precisely to avoid breaking code in mysterious ways!)
And it's been mostly successful at that. But even if it isn't, suddenly breaking
existing code doesn't please users.
>> Please elaborate on what is invalid about it? Don't make me guess!
>
> It's a prototypical example of symbol hijacking. std.file.write hides
> std.stdio.write. Therefore, the code above overwrites the contents of the file
> "important_data.txt" with the string " read sucessfully!\n". The code should
> result in an ambiguity error as there are matches in two distinct overload sets.
That isn't hijacking, it's scoping. Hijacking is when an overload is added to
one module that is accidentally a better match than unrelated overloads in
another module, when both are in the same scope.
More information about the Digitalmars-d
mailing list