165得票12回答
什么是“thunk”?

我在编程中(特别是在C++领域)见过它的使用,但我不知道它是什么。可能它是一个设计模式,但我可能错了。能否给出一个好的thunk的例子?

51得票3回答
GHC的thunks有多原子化?

GHC如何处理被多个线程访问的thunk(无论是显式线程还是内部评估spark的线程)?是否可能发生多个线程评估相同的thunk,从而重复工作?或者,如果thunk被同步,那么如何做到不影响性能?

46得票5回答
Haskell中的所有内容,甚至是简单的值,都存储在thunks中吗?

以下值/表达式/函数在Haskell堆中的thunks长什么样子?val = 5 -- is `val` a pointer to a box containing 5? add x y = x + y result = add 2 val ...

42得票1回答
当涉及到GHCi let绑定时,理解thunk的不同行为

我一直在尝试使用 Simon Marlow 关于 Haskell 并行和并发编程的书中的一些示例,并偶然发现了一个有趣的行为,但我并不完全理解。这实际上是我尝试理解 GHC 一些内部工作的过程。 假设我在 REPL 中执行以下操作:λ» let x = 1 + 2 :: Int λ» let...

32得票2回答
Thunk使用多少内存?

假设我有大量(数百万/数十亿)这些简单的Foo数据结构:data Foo = Foo { a :: {-# UNPACK #-}!Int , b :: Int } 考虑到这些对象数量如此之多,必须思考它们占用了多少内存。 在64位机器上,每个Int是8字节,因此a只占...

31得票4回答
Thunk、Futures和Promises有什么区别?

关于它们有维基百科文章:(http://en.wikipedia.org/wiki/Futures_and_promises, http://en.wikipedia.org/wiki/Thunk_(delayed_computation))。但是作为编程语言概念,future、promise...

18得票4回答
测试一个值是否已经被求值为弱头部正常形式

在Haskell中,是否可以测试一个值是否已经被求值为弱头正常形式?如果函数已经存在,我会期望它的签名像这样: evaluated :: a -> IO Bool 有几个地方有类似的功能。 一个 先前的答案 向我介绍了 :sprint ghci 命令,它将仅打印已经强制转换为弱...

16得票1回答
如果Thunk引发异常,那么异常是否作为Thunk的结果保留?

我创建了一个小程序,它创建了一个长时间运行的thunk,并最终失败并抛出异常。然后,多个线程尝试对其进行评估。import Control.Monad import Control.Concurrent import Control.Concurrent.MVar main = do ...

14得票1回答
多态值的sprint?

我想知道为什么在这种情况下:sprint报告xs=_:Prelude> xs = map (+1) [1..10] Prelude> length xs 10 Prelude> :sprint xs xs = _ 但在这种情况下不适用:Prelude> xs = map...

11得票2回答
简单来说,thunk和高阶函数有什么区别?

我理解它们都是返回函数的函数。 到目前为止,我使用thunk将其用于返回函数而非仅限于操作对象,以便能够在Redux中处理异步请求。 闭包是高阶函数(HOF)的一种实现方式,用于创建新的作用域以保存私有变量……对吧?其他例子包括map、reduce和filter。 除此之外,还有什么明确...