Seblog

Block, Scope, first-class 본문

Study

Block, Scope, first-class

Sebien 2011. 5. 10. 16:50
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.





#. Programming Language 정리


블락은 이름을 선언하는 공간이다 여기서 이름이라 함은 변수 또는 상수를 뜻한다 이러한 블락은 in-line block과 function block으로 나누어 진다 block은 변수의 영향범위인 scope와 밀접한 관련이 있는데 block 내에서 선언된 변수를 지역변수 밖에서 선언된 변수를 비지역변수라고 하며 최 외각의 block에서 선언된 변수를 전역변수라 한다
Block은 서로 교차하여 존재할 수 없어서 내포(nested)되거나 병렬(parallel)로 존재한다

변수를 찾는 규칙에는 dynamic scope와 static scope가 있다 static scope은 프로그램 실행전에 저장공간에 저장된 변수의 레퍼런스를 찾는 것이고 dynamic scoping은 그때그때 block내 의 이름에 따라 이름에 값을 할당하는 것이다

Block은 activation record를 생성하는데 activation record는 block의 여러 정보를 담고 있다

Parameter passing에서 가장 중요한 두가지는 evaluation time과 storage 이다 evaluation time은 eager evaluatuon과 lazy evaluation이 있는데 eager는 passing하기전에 미리 parameter의 값을 평가하는 것이고 lazy는 parameter의 평가를 최대한 늦춰서 parameter가 사용될 때 비로소 평가하는 것이다

Storage는 parameter가 어디에 저장되는지를 결정한다 일반적으로 register에 저장되면 성능이 좋다

이러한 parameterm passing은 parameter 호출 방식과 밀접한 관련이 있는데 call by value 이냐 call by reference 이냐에 주의를 기울여야 한다

함수를 parameter로 넘겨주거나 return 값으로 받을때 이 함수를 first class function 혹은 first class object라고 한다 이때 이미 정의되어 있는 함수를 parameter로 받을때 이 함수가 static scoping 을 사용하려면 어떤식으로 이 함수가 정의되었을 당시의 참조환경에 접근하는가가 문제가 된다 즉 정의된 함수가 전역변수 내지는 비지역변수를 사용하는 경우 어떤식으로 그 변수를 참조할 수 있는지 모호해진다 이 문제를 downward funarg problem이라 부르며 이를 해결하기 위하여 closure라는 구조체를 이용해 함수의 몸체 코드와 정의 당시 참조환경을 참조할 수 있도록 링크를 걸어준다.

반대로 함수를 return 값으로 받을경우 return 값으로 받는 함수가  이미 사용이 끝나서 반환될 저장공간에 있게 되는 경우 이 return값은 참조환경과 함수의 코드가 모호해진다 이를 upward funarg problem이라 부르며 이 문제 역시 closure를 이용하여 해결 가능하다 즉 closure를 이용해 함수가 정의된 activation record를 가리키면 garbage collector가 메모리를 반환하지 못하므로 이 return되는 함수가 더이상 참조되지 않을때까지 참조할 수 있다

즉 first class object로 함수를 사용할경우 upward 와 downward funag problem이 생길 수 있는데 이 문제는 closure를 이용해 해결 가능하다

'Study' 카테고리의 다른 글

[펌] 좋은 프로그래머가 되는 24가지 방법  (0) 2012.04.24
Dijkstra Algorithm을 이용한 지하철 최단경로 구하기  (0) 2011.07.09
ML make counter program  (0) 2011.05.03
Upward Downward Funarg problem  (0) 2011.05.03
문제 유형  (0) 2011.05.02
Comments