dynamic classes and duck typing
Bill Baxter
wbaxter at gmail.com
Tue Dec 1 15:32:14 PST 2009
On Tue, Dec 1, 2009 at 3:01 PM, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
>> How about this: given only a catch-all opDispatch which implements
>> dynamic dispatch, the compiler cannot statically determine if
>> operators are really implemented or not.
>
> Why does it have to?
> proposed implementation:
>
> compiler sees 'a + b'
> compiler rewrites 'a.opBinary!"+"(b)'
> does it compile? If yes, then a implements the operator.
>
> With opDispatch:
>
> compiler sees 'a + b'
> compiler rewrites 'a.opDispatch!"+"(b)'
> does it compile? If yes, then a implements the operator.
>
> I don't see the problem.
>
>> Since the list of operators
>> is always finite, it makes sense to have them in a separate
>> "namespace" of sorts. That way if you implement a catch-all
>> opBinary, you're only saying that you implement all /operators/ not
>> all possible methods. And vice versa, you can specify that you only
>> implement some operators, but still have dynamic dispatch that
>> forwards all named methods.
>
> opDispatch(string s, T)(T arg) if(isOperator(s))
>
> opDispatch(string s, T...)(T arg) if(isSymbol(s))
Good counterpoints to my argument. So I give up on that line.
Here's another, how do you implement the opBinary_r operators with opDispatch?
--bb
More information about the Digitalmars-d
mailing list