Paso variable de MATLAB y asignación diferida

Sé que en Matlab, hay una evaluación 'perezosa' cuando se asigna una nueva variable a una existente. Como:

array1 = ones(1,1e8);
array2 = array1;

El valor dearray1 no será copiado aarray2 a menos que el elemento dearray2 es modificado.

A partir de esto supuse que todas las variables en Matlab son en realidad de tipo valor y todas pasan por valores (aunque se usa una evaluación diferida). Esto también implica que las variables se crean en la pila de llamadas.

Bueno, no estoy juzgando la forma en que trata las variables, aunque nunca he visto un segundo lenguaje de programación que lo haga de esta manera. Quiero decir, para estructuras de datos posiblemente grandes como matrices, tratarlo como tipo de valor y pasarlo por valores no parece ser una buena idea. Aunque la evaluación perezosa ahorra espacio y tiempo, me parece extraño. Puede tener una expresión para mutar (en lugar de inicialización o asignación) de una variable que conduce a un error de falta de memoria. Hasta donde yo sé, en C los nombres de matrices son en realidad punteros, y en Fortran, las matrices se pasan por referencia. La mayoría de los idiomas modernos retienen las matrices como tipo de referencia.

Entonces, ¿alguien puede decirme por qué Matlab usa una forma no tan común para implementar las matrices? ¿Es cierto que en Matlab no se puede crear nada en el montón?

Por cierto, he preguntado a algunos usuarios experimentados de Matlab al respecto. Simplemente dicen que nunca cambian la variable una vez que se crea, y usan la función call para crear nuevas variables. Eso significa que todos los datos mutables se tratan como inmutables. ¿Hay alguna ganancia o pérdida para programar de esta manera?

Respuestas a la pregunta(1)

Su respuesta a la pregunta