当实现支持所有这些结构的语言时,在我看来,应该可以将break,continue,return和throw视为同一事物的方面,从返回的行(或执行尾部)递归时,在继续的情况下)一个函数进一步向上调用堆栈,不一定是当前函数。
显然,我不会成为第一个想到这一点的人。有没有人知道对这种做事方式的讨论(或开源实现)的任何引用?
答案 0 :(得分:3)
所有这些都可以在first class continuations之上轻松实现(例如在Scheme中)。
但是我怀疑它可能是最有效的实现,因此到目前为止最好的方法是将它们全部视为不同的实体 - 在编译阶段将break和continue解析为简单的跳转,返回实现取决于调用约定, throw / catch还应该依赖于为目标平台定义的调用约定和ABI。