Agree. People with programming background won't expect x and x + 0 (x * 1, x ^ 1, etc) to be the same thing. (They are equal, but definitely not the same copy). Even in MATLAB or Python/Numpy, when you modify y = x + 0, the values in x are not affected.
- Dahua On Monday, January 27, 2014 1:28:39 PM UTC-6, David Piepgrass wrote: > > Even stranger, the values of x are not modified by the following function >> function f3(x::Array) >> w = x + 0. >> for i in 1:length(w) >> w[i] = w[i] + 10.0 >> end >> return w >> end >> > > You think it is strange that changing w does not change x? Most seasoned > programmers would be *shocked* if changes to w affected x in this code. > The behavior you are seeing in Julia is very standard behavior; virtually > any language will behave the same way (any language that supports arraywise > operations, anyway, which is a small fraction of all programming > languages). All seasoned programmers see that there is a big difference > between "x" and "x + 0". > > Would you agree that "w = x + 1" should produce a new array? Then w and x > should be independent, right? If you run "w = x + 1", you wouldn't expect x > to change right? And then if you change w, you still wouldn't expect x to > change, right? Now imagine that the code is "w = x + i". If i is 0, it may > seem appropriate to "optimize" this code into just "w = x". > > So imagine we do this "optimization". And imagine a program in which i > > 0, 99.9% of the time. In that case, w and x are independent 99.9% of the > time and changes to w do not affect x. Knowing this, the author may > *believe* that w and x are completely independent. But then one day, > someone runs the program with i=0, so w and x are now the same array. Since > the author was expecting w and x to be independent, he uses them as if they > were independent, but when i=0, changing one array also changes the other, > so the program will malfunction. > > To avoid surprises like that, it makes sense to treat x + 0 the same as x > + i for any i != 0. >