BCS:

> IIRC DMD doesn't always do the constant folding (Decent has a post processed 
> view that shows this in some cases) For instance, IIRC it only does left 
> most so this:
> char[] foo = "foo";
> char[] bar = foo ~ "bar" ~ "baz"
> doesn't get folded. And even if DMD were to start doing that one, there is 
> no requirement that another compiler also do it.

If there are guarantees that "abc" "def" are folded at compile time, then the 
same guarantees can be specified for "abc" ~ "def". I can't see a problem.

I have also compiled this code with DMD:

void main() {
    string foo = "foo";
    string bar = foo ~ "bar" ~ "baz";
}

Resulting asm, no optimizations:

L0:             push    EBP
                mov     EBP,ESP
                mov     EDX,FLAT:_DATA[0Ch]
                mov     EAX,FLAT:_DATA[08h]
                push    dword ptr FLAT:_DATA[01Ch]
                push    dword ptr FLAT:_DATA[018h]
                push    dword ptr FLAT:_DATA[02Ch]
                push    dword ptr FLAT:_DATA[028h]
                push    EDX
                push    EAX
                push    3
                mov     ECX,offset FLAT:_D11TypeInfo_Aa6__initZ
                push    ECX
                call    near ptr __d_arraycatnT
                xor     EAX,EAX
                add     ESP,020h
                pop     EBP
                ret


Resulting asm, with optimizations:

L0:             sub     ESP,0Ch
                mov     EAX,offset FLAT:_D11TypeInfo_Aa6__initZ
                push    dword ptr FLAT:_DATA[01Ch]
                push    dword ptr FLAT:_DATA[018h]
                push    dword ptr FLAT:_DATA[02Ch]
                push    dword ptr FLAT:_DATA[028h]
                push    dword ptr FLAT:_DATA[0Ch]
                push    dword ptr FLAT:_DATA[08h]
                push    3
                push    EAX
                call    near ptr __d_arraycatnT
                add     ESP,020h
                add     ESP,0Ch
                xor     EAX,EAX
                ret

I can see just one arraycatn, so the two string literals are folded at compile 
time, I think.

Bye,
bearophile

Reply via email to