Questions tagged «continuations»

2
在许多行业使用的编译器中,为什么单静态分配优先于连续传递样式?
根据Wikipedia页面上的静态单分配(SSA)页面,大型和知名项目(例如LLVM,GCC,MSVC,Mono,Dalvik,SpiderMonkey和V8 )使用SSA,而项目使用连续传递样式(CPS)在比较中有点不足。 我的想法是,主要实现功能语言的编译器和解释器更喜欢CPS-特别是,Haskell和Scheme由于对突变的限制或需要一流的连续支持而似乎对CPS风格有强烈的倾向(我想(Smalltalk也可能需要)。我遇到的使用CPS的主要文献似乎是那些主要在Scheme上工作或在某些方面与Scheme相关的文献。 除了采用的势头之外,SSA还用于工业中有什么特殊原因吗?SSA和CPS有密切关系;这意味着很容易用另一种方式陈述,但是对于CPS来说,信息表示可能不太紧凑或效率较低。

1
“ CPS”方法严重损害了SML / NJ的性能;所需的推理
在对学习F# 的评论中:使用其他编程语言的哪些书籍可以翻译为F#以学习功能概念?Makarius说: 请注意,“ CPS”方法对SML / NJ中的性能造成了很大的损害。它的物理评估模型违反了硬件中内置的太多假设。如果您采用Isabelle / HOL之类的SML大型符号应用程序,则带有CPS的SML / NJ大约会问世。比传统堆栈的Poly / ML慢100倍。 有人可以解释原因吗?(最好有一些示例)这里是否存在阻抗不匹配?

1
当用作调用堆栈时,无垃圾的意大利面条堆栈会形成DAG吗?
我正在研究用于编程语言的实现技术,并且最近遇到了意粉堆栈,该堆栈被认为非常适合连续传递样式模型(假定它们在例如 Scheme和SML / NJ中使用)。为了简单起见,我们仅考虑此问题的单线程进程。 但是,我对Wikipedia上的图表有些困惑 (也可以在其他地方找到)。特别是,我不明白这种情况如何发生。我只能想象,变灰的分支是无法访问的,应该进行垃圾回收。另一方面,由于我对如何使用意大利面条堆栈实现CPS的含糊理解,我无法想象如何在该结构中实现循环。我必须得出一个结论,它实际上是一个有向无环图,而不是一个“父指针树”,其非垃圾源与线程一样多,宿(与)(潜在)“退出点”一样多。 但是我对这种实现的理解很模糊,所以我想我可能缺少了一些东西。我希望有人可以在“意大利面条调用堆栈”上给我启发,我的意思是指Scheme和/或SML / NJ中用于实现基于CPS的过程的数据结构。 给定以下意大利面条调用堆栈: [exit point] <-- ... <-- [frame A] <-- [frame B (active)] ^ `---- [frame C] 据我了解,来自B的任何流控制要么通过跳到父级(A变为活动状态,现在不可访问的B现在是垃圾)来取消堆栈,要么用子图代替活动帧,仅使用B持有的引用或引用来连接到新的框架。执行无法流向框架C,这必须表示框架C是垃圾。 与以前的情况不同,我认为可能会出现以下无垃圾情况: [exit point] <-- ... <-- [frame W] <-- [frame X] <-- [frame Z (active)] ^ | `---- [frame Y] <---´ 例如,我可以想象Z帧属于某个决策函数,该决策函数要么继续到X帧,要么继续到Y帧(两者都会返回到W)。这意味着意大利面条调用栈不是“父指针树 ”。 但是,我无法想象可以构造循环的任何情况。以以下情况为例: …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.