dynamic classes and duck typing

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Nov 27 15:46:20 PST 2009


Walter Bright wrote:
> One thing Java and Python, Ruby, etc., still hold over D is dynamic 
> classes, i.e. classes that are only known at runtime, not compile time. 
> In D, this:
> 
>    s.foo(3);
> 
> could be emulated with:
> 
>    s.dynamicMethod("foo", 3);
> 
> Unfortunately, that makes it impossible to use s with generic code 
> (besides looking unappealing). But with a small feature, we can make 
> this work:
> 
>    struct S
>    {
>         ...
>     T opDynamic(s : string)(args...);
>    }
> 
> and then s.foo(3), if foo is not a compile time member of s, is 
> rewritten as:
> 
>    s.opDynamic!("foo")(3);
> 
> and opDynamic defers all the nuts-and-bolts of making this work out of 
> the language and into the library.
> 
> In particular, opDynamic's parameter and return types should all be 
> instances of std.variant.
> 
> (This has come up in various forms in this n.g. before, but I don't have 
> any references handy.)

One of these is the thread "Fully dynamic d by opDotExp overloading".

Andrei



More information about the Digitalmars-d mailing list