Fully dynamic d by opDotExp overloading
Steven Schveighoffer
schveiguy at yahoo.com
Fri Apr 17 12:26:13 PDT 2009
On Fri, 17 Apr 2009 15:08:12 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> Nick Sabalausky wrote:
>> "Steven Schveighoffer" <schveiguy at yahoo.com> wrote in message
>> news:op.usjnzajzeav7ka at steves.networkengines.com...
>>> On Fri, 17 Apr 2009 14:32:07 -0400, Nick Sabalausky <a at a.a> wrote:
>>>
>>> My main concern that I've read so far is how if a class has a dynamic
>>> method dispatcher that's callable like a method, you can't rely on the
>>> compiler to help you typecheck (or spellcheck) the *non-dynamic*
>>> methods, because it will just default to sending incorrectly typed
>>> data or misspelled methods to the dynamic dispatcher.
>> That is a *very* good point, that hadn't even occured to me.
>>
>>> I think dynamic methods have a very limited use, and probably aren't
>>> worth polluting the D language for a few rare cases.
>>>
>> Agreed.
>>
>>> When you know the API ahead of time, you're almost always better off
>>> to have statically typed objects. When you don't know it ahead of
>>> time, well, I prefer the uglyness of seeing the quoted strings to
>>> having the compiler just start trusting everything I do ;)
>>>
>> Agreed.
>
> I think there's merit in binding via strings. It makes for very flexible
> code that is future-proof, dynamic-linking-friendly, and hot-swappable
> without recompiling (e.g. you don't need to recompile because you now
> implement an interface etc.) Reflection is very useful as well.
>
> If anything, this agreed-fest shows that the rift between static typing
> and dynamic typing is alive and well. I've seen many discussions in
> which people were mystified how anyone gets anything done in a
> statically-typed OO language. (In fairness, static typing and OO have at
> best a tense marriage.)
>
> But anyway, my point is that it's good to be open-minded. If this
> conversation does nothing but leave us firmly with our heels in
> static-land, then we haven't gained anything. If we weren't used to
> static types we wouldn't be here. I think D can and should allow string
> lookup for its methods. It's a low-complexity proposition that adds a
> very interesting tool to D's arsenal. I suggested Walter since a long
> time ago to support opDot!(string). He implemented the useless version
> (sigh) which was arguably much simpler and offered a cheap way to
> experiment. So I'm very happy it's back on the table, and with an
> implementation to boot. Congratulations David.
I guess I don't mind the dynamic lookup of methods, but I really don't
like the proposal to make it look exactly like a statically typed call.
To "hide" the fact that you are doing a dynamic lookup makes me worry
about losing the invariants that I come to enjoy with statically typed
methods, that is, if I see x.method(a, b, c), it means that the compiler
has checked that I called that method correctly with the correctly typed
information.
I use C#'s runtime introspection all the time, and it makes for some
really awesome code (things I wish D could do), but I still have to do
things like
Type[] argTypes = ...;
object[] args = ...;
x.GetType().GetMethod("myMethod", argTypes).Invoke(x, args);
To have that simply cut down to:
x.myMethod(a, b, c);
is a nifty experiment, but now I lost all ability to know how the compiler
is interpreting that. I bet D can do a much better job at runtime type
information than C# due to the template system being so powerful, but I
still want to know that I'm dynamically doing something versus statically.
Something like:
void foo(object x)
{
x.invoke("myMethod", a, b, c);
}
where invoke is some method that uses the classinfo of x to look up the
method would be freaking awesome ;)
-Steve
More information about the Digitalmars-d
mailing list