Should we add `a * b` for vectors?
Timon Gehr
timon.gehr at gmx.ch
Mon Oct 9 15:41:02 UTC 2017
On 06.10.2017 03:01, Walter Bright wrote:
> On 10/5/2017 4:26 AM, Timon Gehr wrote:
>>> I know that some of the UFCS code was written without regard to
>>> hijacking.
>>> ...
>>
>> I think it is by design. Lookup first tries to find members of the
>> type, and only if they don't exist applies UFCS lookup. Therefore, if
>> members are added to the type or made visible, this may hijack
>> existing UFCS usages.
>
> It may have been done that way to avoid breaking existing code.
>
I think so. It can break new code though. ;)
>> The way to fix it is to do UFCS lookup always and then error out if
>> both UFCS and member lookup match, but there is probably quite some
>> code relying on the fact that you can provide a custom implementation
>> of a general UFCS function by just adding a member. Also, with the
>> hijacking error if you actually meant the member function the only way
>> out I see is to use __traits(getMember, ...) for disambiguation.
>>
>> (BTW: Local imports allow hijacking too. Maybe this one could be fixed?)
>
> I thought that was taken care of when the whole import lookup mechanism
> was redone a year or two ago.
> ...
https://issues.dlang.org/show_bug.cgi?id=17589
I think the best fix is what I quickly outline at the end of the issue.
It is originally a proposal of deadalnix:
https://issues.dlang.org/show_bug.cgi?id=10378#c9
> ...
>
>>> D's name lookup rules were quite simple, and deliberately set up that
>>> way. Unfortunately, most people thought they were unintuitive. It
>>> turns out that simple algorithms are not intuitive, and we now have a
>>> fairly complex lookup system. Martin and I implemented it, and
>>> probably neither of us completely understands it. I find it
>>> regrettable that things have gotten to that state.
>>> ...
>>
>> It might make sense to sit down at some point and see what goals the
>> complex rules try to achieve and then come up with simpler rules that
>> achieve the same (or better) goals.
>
> There wasn't a lack of discussion about the import lookup rules :-)
> ...
The only related issue of which I was aware was visibility of private
symbols. (I.e. private symbols should not cause conflicts with public
symbols in other modules.)
> ... >>> Doing this kind of wrapper doesn't work for operator overloading,
>>> which brings us back to ADL is for operator overloading.
>>
>> Why does it not work for operator overloading?
>
> 3+s
typeof(s) could overload opBinaryRight, no?
More information about the Digitalmars-d
mailing list