Am 07.01.2012 19:59, schrieb bearophile:
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)).
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
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
Most people here seem to not care of the Ada language, but if you take a look
at Ada code you see how often it doesn't use heap allocations.
Bye,
bearophile
The Ada standard also allows for some form of optional automatic memory
management, even if only some of the compilers offer it.
http://en.wikibooks.org/wiki/Ada_Programming/Types/access