Short list with things to finish for D2
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed Nov 18 23:36:42 PST 2009
Travis Boucher wrote:
> Rainer Deyke wrote:
>> Andrei Alexandrescu wrote:
>>> I am thinking that representing operators by their exact token
>>> representation is a principled approach because it allows for
>>> unambiguous mapping, testing with if and static if, and also allows
>>> saving source code by using only one string mixin. It would take more
>>> than just a statement that it's hackish to convince me it's hackish. I
>>> currently don't see the hackishness of the approach, and I consider it a
>>> vast improvement over the current state of affairs.
>>
>> Isn't opBinary just a reduced-functionality version of opUnknownMethod
>> (or whatever that is/was going to be called)?
>>
>> T opBinary(string op)(T rhs) {
>> static if (op == "+") return data + rhs.data;
>> else static if (op == "-") return data - rhs.data;
>> ...
>> else static assert(0, "Operator "~op~" not implemented");
>> }
>>
>> T opUnknownMethod(string op)(T rhs) {
>> static if (op == "opAdd") return data + rhs.data;
>> else static if (op == "opSub") return data - rhs.data;
>> ...
>> else static assert(0, "Method "~op~" not implemented");
>> }
>>
>> I'd much rather have opUnknownMethod than opBinary. If if I have
>> opUnknownMethod, then opBinary becomes redundant.
>>
>>
>
> Passing op as the symbol allows for mixin("this.data"~op~"that.data;");
Also it does not require remembering the correspondence between symbols
and their names.
> What I was hoping for was a catch-all for unknown non-operation methods,
> which could allow for dispatching to functions that are not even known
> at runtime (ie. trigger a lookup in a shared object, or pass along to a
> scripting language engine).
>
I agree. This is something very interesting.
Andrei
More information about the Digitalmars-d
mailing list