On 07/11/2014 10:39 PM, Dicebot wrote:
Key difference is that type of string literal is immutable(char)[] so it
is perfectly legal to keep it in binary text segment. Type of array
literal is just T[] (int[] here) and you can possibly mutate their
elements. Because of this each assignment of array literal needs to
allocate a new copy contrary to immutable strings which can all
reference same memory chunk.

He is allocating an immutable(int)[] here. There is no reason why it should allocate unless providing different addresses for different runs of the code is considered a feature, as the literal has a compile-time known value. It's just that the frontend does not actually elide the allocation, and this would be a valid extension to ask for.

In any case, the allocation can be manually elided as follows:

void main(string[] args)@nogc{
    auto s1 = "hello";
    static immutable _a1 = [1, 2];
    auto a1 = _a1;
}

(Not actually tested, because I am having trouble downloading the beta for some reason.)

Reply via email to