2010-05-25 1 views
3

필자는 인터프리터 개발에 비교적 익숙하지 않아 바퀴를 다시 만들기 전에 몇 가지 기본 개념을 알고 싶었 기 때문에이 질문을 던지고 있습니다.인터프리터는 범위를 어떻게 전환합니까?

배열에 저장되어있는 모든 변수의 값을 생각하면 현재 범위가됩니다. 배열을 스왑하고 원래 배열을 어떤 종류의 스택에 넣으면 함수가 입력됩니다. 함수를 떠날 때 "범위 스택"의 맨 위 요소가 팝되어 다시 사용됩니다.

  • 이것은 기본적으로 맞습니까?
  • 많은 양의 데이터 이동을 의미하는 어레이를 스와핑하지 않고 속도가 느려지거나 최신 인터프리터에서 사용되지 않습니까?
+0

많은 양의 데이터 이동이 필요하지 않습니다. 스택에는 배열 전체에 대한 참조 (포인터) 만 포함될 수 있습니다. –

답변

2

왜 배열을 바꿉니 까? 스택의 맨 위 배열을 살펴보십시오. 또한 대부분의 언어에서 배열을 복사 할 때 배열을 복사 할 필요가 없으며 참조 또는 포인터를 바꿀 수 있습니다.

이것은 통역사가 할 수도있는 일이기도합니다. 대안으로는 부모 프레임에 대한 참조를 명시 적으로 보유하고있는 현재 범위에 대한 특수 데이터 구조가 있습니다.

0

파이썬은 C 스택을 사용하여 범위를 추적합니다. 새로운 스코프가 입력 될 때마다 스코프의 데이터가 항상 스택의 로컬 변수에 저장되도록 새로운 함수 호출이 이루어집니다.

일부 다른 인터프리터의 경우 모든 것이 제안과 같은 스택에 보관됩니다. 그러나 인터프리터는 스택 맨 위에서 현재 위치에서 작동합니다. 단 하나의 사본이 있기 때문에 앞뒤로 사물을 복사 할 필요가 없습니다.