동적언어에서 서브프로그램을 구현하는 방법으로는 Deep Access와 Shallow Access가 존재한다.
각각의 방법에 대해서 살펴보도록 하자.
* Deep Access
- 매번 호출 마다 Dynamic Link를 이용해 구현(Static chain과 비슷한 형태)
ex) Deep Access Linking ( x , y ) = x번 Activation Record를 찾아간후 y번째를 참조해주세요.
- Deep Access의 Activation Record의 모습은 Static에서 구현된 Activation Record에서 Static Link가 사라진
모습이다.
Static Language의 static chain과 같이 쫒아가는 횟수가 변수마다 다르므로 Time Critical프로그램에
좋지 않으며, 더 느리다.
>> 이러한 단점을 해결하기 위해서 Shallow Access가 등장한다.
* Shallow Access
- 단 한번에 변수를 참조하기 위해서 모든 지역 변수들을 중앙 메모리 공간에 저장하고 유지시킨다.
- 컴파일시에 필요한 만큼의 공간을 확보한 뒤에 실행시 stack 형식으로 쌓아올려, 변수명의 stack에서
top에 있는 값을 참조한다.
각각의 방법에 대해서 살펴보도록 하자.
* Deep Access
- 매번 호출 마다 Dynamic Link를 이용해 구현(Static chain과 비슷한 형태)
ex) Deep Access Linking ( x , y ) = x번 Activation Record를 찾아간후 y번째를 참조해주세요.
- Deep Access의 Activation Record의 모습은 Static에서 구현된 Activation Record에서 Static Link가 사라진
모습이다.
- 특징 : 각 변수를 참조하기 위해서는 Dynamic Link를 일일이 찾아가야한다.
Static Language의 static chain과 같이 쫒아가는 횟수가 변수마다 다르므로 Time Critical프로그램에
좋지 않으며, 더 느리다.
>> 이러한 단점을 해결하기 위해서 Shallow Access가 등장한다.
* Shallow Access
- 단 한번에 변수를 참조하기 위해서 모든 지역 변수들을 중앙 메모리 공간에 저장하고 유지시킨다.
- 컴파일시에 필요한 만큼의 공간을 확보한 뒤에 실행시 stack 형식으로 쌓아올려, 변수명의 stack에서
top에 있는 값을 참조한다.