Actually Matlab's pass by value is one of its best properties (as a language). This is how functions work in math and is much easier to reason about.
I really dislike Julia's pass by reference semantics. Even if it enables better performance.
Actually Matlab's pass by value is one of its best properties (as a language). This is how functions work in math and is much easier to reason about.
I really dislike Julia's pass by reference semantics. Even if it enables better performance.
A = plus_diag(A, x); % Using [1] below
Adds a vector x onto the diagonal elements of a huge matrix A. In old versions of Matlab, 2*huge memory would temporarily be allocated. Now the memory usage doesn't increase: A is altered in place. This optimization happens automatically when Matlab notices it can be done. The code has to be in a function though, not run from the command-line or a script.[1] http://homepages.inf.ed.ac.uk/imurray2/code/imurray-matlab/p...
It is not a characteristic of the function `plus_diag`. The function itself is completely pure.
It would be nice to take advantage of the same idea in mex code where possible. For example an API function that indicates if it is safe to over-write an input array and return it as the corresponding output or not. I don't think Mathworks currently provide documented and future-safe means to do so however. (If one controls all the code, updating things in-place is possible in practice if careful, using the A(1)=A(1); trick I gave in a parent post. Such code is just not guaranteed to be future-proof.)
[1] http://blogs.mathworks.com/loren/2007/03/22/in-place-operati...