Why I chose D over Ada and Eiffel

John Colvin john.loughran.colvin at gmail.com
Fri Aug 23 03:05:48 PDT 2013


On Friday, 23 August 2013 at 05:28:22 UTC, Tyler Jameson Little 
wrote:
> I assume this is something that can be done at runtime:
>
>     int[] a = [1, 2, 3];
>     int[] b = [2, 2, 2];
>     auto c = a[] * b[]; // dynamically allocates on the stack; 
> computes w/SIMD
>     writeln(c); // prints [2, 4, 6]

This would be pretty trivial to implement but the question is 
whether it's a good idea:

Heap allocation is out of the question as it's much too slow to 
be hidden behind what are supposed to be fast vector operations.

Explicit runtime stack allocation could work, but it's not 
something we do much of in D. I know Maxime 
(https://github.com/maximecb/Higgs) uses alloca a bit, but if I 
remember correctly it wasn't all smooth going.

What definitely should work, but currently doesn't, is this:
      int[3] a = [1, 2, 3];
      int[3] b = [2, 2, 2];
      auto c = a[] * b[]; // statically allocated on stack.

as it can be totally taken care of statically by the type system. 
Actually I think it's just a straight up compiler bug, because 
this *does* work:
      int[3] a = [1, 2, 3];
      int[3] b = [2, 2, 2];
      int[3] c = a[] * b[]; // statically allocated on stack.


It looks like it's rejecting the array op before it's worked out 
what to resolve auto to.


More information about the Digitalmars-d mailing list