2009-02-06 5 views
3

저는 배우 기반 언어에 대한 통역사에서 사용하기 위해 CPS와 같은 것을 고려 중입니다.연속 전달 스타일 대 적극적으로 트리밍 된 호출 스택?

인수 변형 배열의 전달 함수, 및 그 어레이에 리턴 연속, 그래서 간단한 함수

def add (x,y) => x + y 

때문에 읽기/평가/루프에서 호출 될

print(add(7, 5)) 
는 항목에 _ 빈 슬롯이

[&add, x, y, &print, _, &repl, ...] 

될 곳 함수 반환 값이 쓰여집니다. 실행의 다음 단계에서

는 인수

[repl, ...] 

등 다음

[&print, 12, &repl, ...] 

된다. C에서의 구현은 기본적으로 args 배열의 끝을 벗어나 더 많은 공간을 할당하는 것을 확인하면서

for (;;) 
    args = (args[0].function_pointer)(args); 

입니다.

인수는 연속적이며 '연속'은 객체로서 인수의 부분 집합입니다.

첫 번째 클래스 연속을 구현하려면 인수 배열을 복제해야합니다. 당신은 또한 무료로 폐쇄를받지 못합니다. 가장 중요한 목표는 간단한 기계 코드 생성과 관련이 있으며 실행을 일시 중지하고 다시 시작할 수있게하는 것입니다.

이 구성표는 CPS에 대한 생각에서 영감을 얻었지만 CPS는 아니지만 적극적으로 트리밍 된 C 스택의 모습과 매우 유사합니다. 라이브 변수 및 각 함수의 복귀 지점입니다.

이 스타일의 이름, 특히 인수 배열이 있습니까? 그것은 일종의 trampolines + stack입니다.하지만 '스택'이라고 부르는 데 사용 된 것은 실행의 미래가 아니라 역사입니다.

답변

2

이것은 거의 Forth입니다. 1 등석 스택을 갖는 것은 연속성을 유지하는 것과 거의 같습니다.