Article: Writing Julia style multiple dispatch code in D

data pulverizer via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Wed Aug 30 14:30:29 PDT 2017


On Wednesday, 30 August 2017 at 20:40:38 UTC, Jean-Louis Leroy 
wrote:
>
> After mulling over this example, I don't see how this proves 
> that Julia does *not* support run time polymorphism. On the 
> contrary. If you translate this to D you get the same result by 
> the way:
>
> import std.stdio;
>
> class Animal {}
> class Cat : Animal {}
>
> void main()
> {
>   Animal[] array;
>   array ~= new Cat();
>   writeln(typeid(array[0])); // typeid.Cat
> }

writeln(typeof(array[0]).stringof); // this is an Animal

The return type of any item in the array would be of type Animal. 
You would have to do a type cast to really get type Cat.

In Julia there is no real notion that any item in Array{Animal, 
1} is an Animal. Their types are never masked by Animal, which 
only really serves as a way of dispatching types to the array, 
unlike in D where the actual type is Animal. However if your 
multi-methods is dispatching methods using typeid (which I am 
guessing is the case) this distinction no longer matters.

It may be better to say that typeof() in Julia is a run-time type 
and there is no notion of typeof() as in D.

In the light of this I think your package just became more 
interesting to me.


More information about the Digitalmars-d-announce mailing list