统一休息,继续,返回和投掷

时间:2011-09-05 07:58:16

标签: compiler-construction programming-languages compilation

当实现支持所有这些结构的语言时,在我看来,应该可以将break,continue,return和throw视为同一事物的方面,从返回的行(或执行尾部)递归时,在继续的情况下)一个函数进一步向上调用堆栈,不一定是当前函数。

显然,我不会成为第一个想到这一点的人。有没有人知道对这种做事方式的讨论(或开源实现)的任何引用?

1 个答案:

答案 0 :(得分:3)

所有这些都可以在first class continuations之上轻松实现(例如在Scheme中)。

但是我怀疑它可能是最有效的实现,因此到目前为止最好的方法是将它们全部视为不同的实体 - 在编译阶段将break和continue解析为简单的跳转,返回实现取决于调用约定, throw / catch还应该依赖于为目标平台定义的调用约定和ABI。