On 01/02/2011 14:15, Simen kjaeraas wrote:
Bruno Medeiros <brunodomedeiros+spam@com.gmail> wrote:

But for immutable data (like the contents of the elements of a
string[]),
that doesn't matter, does it?


Maybe it won't matter for the *contents of the elements* of the string
array, but the whole result value has to be /the same/ as if the
optimization was not applied. Otherwise the optimization is invalid,
even if for most uses of the result value it would not make a
difference for the program.

I admit to still not understanding this.

The data can't be changed, so the contents do not matter. The array structs
(prt/length) would not be the same as those fed to the function in any
case,
so I really cannot see how those would matter.

If others do understand, please elucidate.


Here is a synthetic example:

  string[] func(string arg) pure {
    string elem2 = "blah".idup;
    return [ arg, elem2 ];
  }

  string str = "blah";
  string[] result1 = func(str);
  string[] result2 = func(str);

  if(result2[0] is str) {
    // then
  } else {
    // else
  }


In this code sample if the optimization is applied on the second call to func, it would cause different code with be executed: the else clause instead of the then clause. Obviously this is not acceptable for an optimization, even if such code would be rare in practice.


--
Bruno Medeiros - Software Engineer

Reply via email to