It is nice that you raise this issue. I think most of the others working 
with Julia has experience from C or Python which also have the same 
semantics. I'll make an attempt to sum up how things work in this case.

1. 
`a += b` is just fancy syntax for `a = a + b`. 

If you look at code_lowered(), you can see that it actually expands to `tmp 
= a+b; a = tmp`

2. 
The meaning of `=` is dependent on what is on the left hand side:
* If LHS is just a variable, it means assignment `a = b` (mutable types 
gives a reference)
* If LHS is a square bracket (indexing) expression, `a[4] = b` translates 
to `setindex!(a,4,b)` (mutate the object)
* Julia also allows a function to be expressed with `=` when LHS is a 
parenthesized expression, `a() = b` translates to `function a(); return b; 
end`

3.
All operators (+,-,*,/) are just infix syntax for a function with the same 
name. `a + b` is parsed as `+(a, b)`. When Julia evaluates a function, 
there is no way for the function to know how the result will be assigned. 

Lots of functions that operate on arrays have separate mutating and 
non-mutating functions, where the copy functions has the shortest and 
easiest name. (eg sort vs sort!). You can use this for matrix 
multiplication `A_mul_B!()`, but I do not know the status for the other 
functions.

Regards
Ivar

kl. 07:17:32 UTC+1 lørdag 25. januar 2014 skrev Eric Ford følgende:
>
> So in the statements `w = x` and `w = x + 10`, the equals sign is doing 
>> the same thing, it's just that in the latter case the + method is creating 
>> a new array.
>>
>
> FWIW- I tried searching in the documentation to find some mention of + (or 
> other operators) creating a new array.  I couldn't find any documentation 
> of this behavior.
>
>
>

Reply via email to