1

이러한 모든 구문을 지원하는 언어를 구현할 때 break, continue, return 및 throw를 같은 것으로 간주 할 수 있어야합니다. (또는 계속되는 경우에 꼬리 재귀를 수행하는) 함수가 반드시 호출 스택 위로 올라간다. 반드시 현재 함수는 아니다.break, continue, return 및 throw을 통합 함.

분명히 나는 ​​이것을 생각한 최초의 사람이 될 수 없습니다. 누구든지 이러한 방식의 토론 (또는 오픈 소스 구현)에 대한 참조를 알고 있습니까?

+0

당신은 후드에서 같은 방식으로 * 구현하는 것에 대해 이야기하고 있습니까? 아니면 단일 언어 구문으로 시각적으로 대체 할 것입니까? – delnan

+0

구현 중. 어쨌든 볼 수있는 구조로 지속성을 제공해야 할 필요가있을지라도, 다른 측면을 구현하는 데 더 많은 이유가 있습니다. – rwallace

답변

3

이러한 모든 사항은 first class continuations (예 : 구성표) 위에 쉽게 구현할 수 있습니다.

하지만 지금까지는 가장 효율적인 구현이 될 수 있을지 의심 스럽지만 지금까지는 모든 것을 다른 엔티티로 취급하는 것이 가장 좋습니다. 단절 점프와 계속 실행은 컴파일 단계에서 간단한 점프로 해결되고 반환 구현은 호출 규칙에 달려 있습니다. , 던지기/붙잡음은 또한 표적 플래트 홈을 위해 정의 된 부르는 관례 및 ABI에 의지해야한다.

+1

하나의 세분화로 나는 동의한다 :'return'과'throw'는 one-shot continuations * (aka * escape continuations *)의 관점에서 구현 될 수있다. 이것은 전체 연속보다 상당히 간단하고 저렴할 수있다. –