On 01/29/2014 02:55 AM, Cooler wrote:
Consider 3 functions taking array as an argument:
void fun1(in int[] x){...}
void fun2(ref int[] x){...}
void fun3( int[] x){...}
auto a = new int[10];
fun1(a); // Guaranteed that "a" will not be changed
fun2(a); // Guaranteed that we will see any change to "a", made in fun2()
fun3(a); // Changes to "a" in fun3() may be or may be not visible to the
caller
In case of fun3() we have ambiguous behaviour, depending on the body of
the function.
Am I right?
Is that intentional?
Yes, that is how slices work in D. The following article explains the
"non-determinism" that you mention:
http://dlang.org/d-array-article.html
Ali