gpt4 book ai didi

haskell - Haskell 中的所有内容都存储在 thunk 中吗,甚至是简单的值?

转载 作者:行者123 更新时间:2023-12-03 07:08:06 24 4
gpt4 key购买 nike

以下值/表达式/函数的 thunk 在 Haskell 堆中是什么样子的?

val = 5                -- is `val` a pointer to a box containing 5?
add x y = x + y
result = add 2 val
main = print $ result

考虑到 Haskell 的惰性计算模式,如果能够了解这些在 Haskell 中的表示方式,那就太好了。

最佳答案

官方答复

这不关你的事。编译器的严格实现细节。

简短回答

是的。

更长的答案

对于 Haskell 程序本身来说,答案总是肯定的,但是如果编译器发现它可以摆脱它,出于性能原因,它可以并且将会做不同的事情。

例如,对于“add x y = x + y”,编译器可能会生成与 x 和 y 的 thunk 配合使用的代码,并最终构造一个 thunk。但请考虑以下几点:

foo :: Int -> Int -> Int
foo x y = x * x + y * y

这里,优化编译器将生成代码,首先将 x 和 y 从它们的盒子中取出,然后执行所有算术运算,然后将结果存储在一个盒子中。

高级答案

本文描述了 GHC 如何从一种实现 thunk 的方式切换到另一种实际上更简单、更快的方式: http://research.microsoft.com/en-us/um/people/simonpj/papers/eval-apply/

关于haskell - Haskell 中的所有内容都存储在 thunk 中吗,甚至是简单的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com