Matlab에서 새 변수가 기존 변수에 할당되면 '게으른'평가가 있음을 알고 있습니다. 예를 들면 :MATLAB 변수 전달 및 지연 지정
array2
의 요소가 수정되지 않는 한
array1
의 값은
array2
에 복사되지 않습니다
array1 = ones(1,1e8);
array2 = array1;
.
여기부터는 Matlab의 모든 변수가 실제로 값 유형이고 모든 값이 전달된다고 가정합니다 (지연 평가가 사용되지만). 또한 변수가 호출 스택에서 만들어 짐을 의미합니다.
글쎄,이 방법으로 두 번째 프로그래밍 언어를 본 적이 없지만 변수를 처리하는 방식을 판단하지 않습니다. 배열과 같은 큰 데이터 구조의 경우 값 유형으로 처리하고 값을 전달하는 것이 좋은 생각이 아닌 것 같습니다. 게으른 평가는 공간과 시간을 절약하지만, 나에게는 이상하게 보입니다. 메모리 부족 오류를 유발하는 변수의 변경 (초기화 또는 할당 대신)에 대한 표현식이있을 수 있습니다. 내가 아는 한 C 배열 이름은 실제로 포인터이고, Fortran에서는 배열이 참조로 전달됩니다. 대부분의 현대 언어는 참조 유형으로 배열을 후퇴시킵니다.
그럼, 왜 Matlab이 그런 비범 한 방식으로 배열을 구현하는지 알 수 있습니다. Matlab에서는 힙에 아무것도 없거나 만들 수 없다는 것이 사실입니까?
그건 그렇고, 나는 경험 많은 Matlab 사용자들에게 그것에 대해 물었다. 그들은 일단 변수가 만들어지면 변수를 변경하지 않으며 함수 호출을 사용하여 새로운 변수를 만듭니다. 즉, 모든 변경 가능한 데이터는 변경 불가능한 것으로 취급됩니다. 이런 식으로 프로그래밍 할 때 어떤 이득이나 손실이 있습니까?
저는 오랫동안 대답 할 시간이 없지만 Matlab은 항상 인자로 인수를 전달하지는 않습니다. 'x = func (x)'와 같은 것을하면, Matlab은 이것을 참조로 전달할 것이다. 'y = func (x)'와 같은 일을하면,'func()'에서'x'를 변경하지 않으면 참조로 전달 될 것입니다. 명시 적으로이 작업을 수행 할 수 없으므로 함수를 작성할 때주의해야합니다. 변수를 절대로 변경하는 것은 끔찍한 해결책처럼 보입니다. 그러면 변수는 어떻게됩니까? – Bernhard
@Bernhard Just-In-Time 컴파일러가이를 인라인 함수로 처리하기 때문에 @Bernhard Matlab은'x = func (x)'와 같은 함수를 전달하므로 추가 호출 스택이 생성되지 않습니다 (이 함수가 중첩 함수가 아닌 한)). 여기서 변수를 변경한다는 것은 그 값을 변형시키는 것을 의미합니다. 물론 다른 변수에 변수를 다시 할당 할 수 있습니다. –
@Bernhard MATLAB이 변수를 처리하는 방식은 프로그래머가 매우 신중하게 코드를 작성하도록합니다. 나를 위해 배열 (또는 셀)을 값 유형 변수로 만드는 것은 당황스럽고 놀라게합니다. 그 의미를 완전히 이해하지 못하면 프로그래머는 추가 계산 시간과 공간을 불필요하게 초래할 수있는시기를 결코 알 수 없습니다. –