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