Purity

Bruno Medeiros brunodomedeiros+spam at com.gmail
Fri Jan 28 03:55:07 PST 2011


On 27/01/2011 21:05, Simen kjaeraas wrote:
> Bruno Medeiros <brunodomedeiros+spam at com.gmail> wrote:
>
>> string[] func(string arg) pure {
>> string elem2 = "blah".idup;
>> return [ arg, elem2 ];
>> }
>>
>> The compiler *cannot* know (well, looking at the signature only of
>> course) how to properly deepdup the result from the first return
>> value, so as to give the exact same result as if func was called again.
>
> Could you please elucidate, as I am unsure of your reasoning for saying
> the compiler cannot know how to deepdup the result.
>


string str = "blah";
string[] var1 = func(str);
string[] var2 = func(str);

How can the compiler optimize the second call to func, the one that is 
assigned to var2, such that he deepdups var1 instead of calling func 
again? Which code would be generated?

The compiler can't do that because of all the transitive data of var1, 
the compiler doesn't know which of it was newly allocated by func, and 
which of it was reused from func's parameters or some other global inputs.

-- 
Bruno Medeiros - Software Engineer


More information about the Digitalmars-d mailing list