Steven Schveighoffer wrote:
On Fri, 17 Apr 2009 15:08:12 -0400, Andrei Alexandrescu <seewebsiteforem...@erdani.org> wrote: 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.

Yah, but that feeling of losing control often marks a paradigm shift (I hate that term, but incidentally it's exactly what I mean here; I guess there is a legit use for it after all). Some people were completely pissed that ++i does not necessarily mean one machine operation, but instead an arbitrary function call. Then STL came and knocked everybody's socks off.

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.

I don't think you need to worry. Such a style would belong to a handful of types, e.g. Any. It's not a big deal that what you're doing with a value depends on its type.

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 ;)

But that doesn't quite unify things.


Andrei

Reply via email to