Compiler construction 统一休息、继续、返回和投掷

Compiler construction 统一休息、继续、返回和投掷,compiler-construction,programming-languages,compilation,Compiler Construction,Programming Languages,Compilation,在实现支持所有这些构造的语言时,我认为应该可以将break、continue、return和throw视为同一事物的一个方面,即从调用堆栈更高的函数返回(或在continue的情况下对函数执行尾部递归),不一定是当前函数 显然,我不是第一个想到这个的人。有人知道这种方法的讨论(或开源实现)中有任何引用吗?所有这些都可以很容易地在上面实现(比如在Scheme中) 但我怀疑它是否是最有效的实现,因此到目前为止最好的方法是将它们都视为不同的实体-中断和继续在编译阶段作为简单的跳转来解决,返回实现依赖于

在实现支持所有这些构造的语言时,我认为应该可以将break、continue、return和throw视为同一事物的一个方面,即从调用堆栈更高的函数返回(或在continue的情况下对函数执行尾部递归),不一定是当前函数


显然,我不是第一个想到这个的人。有人知道这种方法的讨论(或开源实现)中有任何引用吗?

所有这些都可以很容易地在上面实现(比如在Scheme中)


但我怀疑它是否是最有效的实现,因此到目前为止最好的方法是将它们都视为不同的实体-中断和继续在编译阶段作为简单的跳转来解决,返回实现依赖于调用约定,throw/catch还应依赖于为目标平台定义的调用约定和ABI。

您是在讨论以相同的方式在后台实现它们,还是用单一语言构造明显地替换它们?实现。尽管我最终可能需要将continuations作为一个可见的构造来提供,因此这将是实现其他东西的更多理由。我同意,通过一个改进:
return
throw
都可以用一次性continuations(也称为escape continuations)来实现,这可能比完整的延续更简单、更便宜。