On 7 January 2012 20:59, bearophile <bearophileHUGS@lycos.com> wrote:
Manu:

> The tendency to encourage use of dynamic arrays will be a major problem.

I don't know how much big that problem will be, D dynamic arrays are quite handy, but I agree that static arrays need to be encouraged more in D (and currently most algorithms of Phobos don't work with static arrays (you need to slice them first)).

A slice doesn't produce a GC allocation does it?
I thought a slice was just a pointer-length pair. Should live on the stack/in regs?

...so slicing static arrays shouldn't be a problem right?
 
Currently even this code with a stack-allocated fixed size array causes a heap allocation (DMD):

void main() {
   int[2] a = [1, 2];
}

ASM, optimized build:

__Dmain comdat
   push EAX
   push EAX
   mov EAX,offset FLAT:_D12TypeInfo_xAi6__initZ
   push EBX
   push 8
   push 2
   push EAX
   call near ptr __d_arrayliteralTX ; heap allocation
   add ESP,8
   mov EBX,EAX
   mov dword ptr [EAX],1
   mov ECX,EBX
   push EBX
   lea EDX,0Ch[ESP]
   mov dword ptr 4[EBX],2
   push EDX
   call near ptr _memcpy
   add ESP,0Ch
   xor EAX,EAX
   pop EBX
   add ESP,8
   ret

What the hell is it allocating?
Surely that's not necessary... that's gotta be fixable?
 
I have suggested to add a safer version of VLAs to avoid some heap-allocated dynamic arrays:
http://d.puremagic.com/issues/show_bug.cgi?id=5348

+1!!
I'm surprised this already isn't supported!