繁体   English   中英

Haskell实现没有堆栈?

[英]Haskell implemented without a stack?

来自无堆栈语言如何工作?

Haskell (as commonly implemented) does not have a call stack; 
evaluation is based on graph reduction.

真? 这很有意思,因为虽然我自己从未体验过它,但我已经读过,如果你不使用折叠函数的严格版本然后强制评估无限折叠,你会得到堆栈溢出。 当然,这表明存在堆栈。 任何人都可以澄清吗?

我绝对不是这方面的专家,但我认为你引用的答案并不完全准确。 Haskell没有大多数命令式语言的直接堆栈类型,您可以通过程序跟踪调用路径。 由于它的懒惰,评估是基于图形缩减,您可以在这里阅读,但调用仍然最终放在堆栈中。 根据这个页面,GHC的执行引擎中的“堆栈”与词汇调用栈几乎没有相似之处。 所以,是的,有一个堆栈,但它与您在命令式语言中找到的堆栈非常不同,并且它是使用图形缩减创建的。

Haskell不是“无堆栈”或类似的东西。 从Haskell源生成的代码仍然具有某种符号,执行显示一些堆栈跟踪,但它们与源代码的关系非常松散。 以下是有关简化调试/跟踪/分析的尝试的一些信息:

http://www.haskell.org/wikiupload/9/9f/HIW2011-Talk-Marlow.pdf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM