2012-06-17 7 views
7

저는 SICP를 지금 읽고 있습니다. 5.5.6 어휘 주소 지정에서 설명하는 어휘 주소 지정의 필요성을 실제로 이해하지 못합니다.SICP 5 장에서 어휘 주소 지정의 이점은 무엇입니까?

왜냐하면 "우리 언어는 어휘 적으로 범위가 지정 되었기 때문에 모든 표현식의 런타임 환경은 표현식이 나타나는 프로그램의 어휘 구조와 유사한 구조를 갖게 될 것입니다."검색 비용은 같다고 생각합니다. 컴파일 환경에서 검색 할 때 런타임 환경 변수. 왜 컴파일 환경을 구현해야합니까? 나는 컴파일 환경이 프로그램의 어휘 구조와 같은 구조를 가질 것이라고 생각한다. 이것은 런타임 환경과 같지 않은가?

답변

10

어휘 주소 지정은 변수 조회 속도를 높이는 데 유용합니다. 어휘 주소 지정이 없으면 현재 환경의 프레임이나 둘러싼 환경의 프레임 등을 탐색하면서 변수를 찾으려면 런타임 - 모두 변수가 바인딩 된 위치를 알 수 없기 때문에 모두를 참조해야합니다.

우리 컴파일러는 지금까지 구현 한대로 평가 시스템의 look-up-variable-value 연산을 사용하는 코드를 생성합니다. 이렇게하면 현재 바인딩 된 각 변수와 런타임 환경을 통해 프레임 단위로 작업하는 변수를 비교하여 변수를 검색합니다. 이 검색은 프레임이 깊이 중첩되어 있거나 변수가 많은 경우 비용이 많이 듭니다. 반대로

는 어휘 주소 조회를위한 절차를 알고 정확히에서 변수가 상당히 가변를 찾는 데 걸리는 시간 감소, 시간 컴파일 찾을 여기서

lexical-address-lookup 인수로 걸립니다 환경 및 어휘 주소로 구성되며 두 개의 숫자로 구성됩니다. 프레임 번호는 전달할 프레임 수를 지정하고 변위 수는 해당 프레임에서 전달할 변수 수를 지정합니다. Lexical-address-lookup은 현재 환경과 관련된 해당 어휘 주소에 저장된 변수 값을 생성합니다. 우리 컴퓨터에 lexical-address-lookup 작업을 추가하면 컴파일러에서 lookup-variable-value 대신이 작업을 사용하여 변수를 참조하는 코드를 생성 할 수 있습니다.

+1

대단히 감사합니다. 생각 해봐. 컴파일 타임에 획득 할 수있는 어휘 주소 정보를 사용하여 런타임 검색 비용을 절약하십시오. – user1461328

+0

@ user1461328 당신을 환영합니다! 왼쪽에있는 체크 표시를 클릭하여 올바른 것으로 생각되는 질문에 대한 대답을 수락하는 것을 잊지 마십시오. –

+0

예, 동의했습니다. – user1461328