懒加载与thunking?

时间:2014-11-09 13:51:33

标签: oop functional-programming lazy-loading lazy-evaluation

最近我听到了他们两个人的定义,对我来说他们听起来完全相同。与懒惰加载一样是一个thunk吗?如果不是这两个定义之间有什么区别?

1 个答案:

答案 0 :(得分:3)

使用以下定义:

延迟加载

  

延迟加载是计算机编程中常用的设计模式,用于将对象的初始化推迟到需要它的位置。

<强>咚

  

thunk是一个未评估的表达式,通常表示为堆上的对象,带有绑定变量和代码指针(闭包)。延迟评估通过更多评估形式替换thunk(简单类型的纯值,但是否则是评估的外部结构,以及可能未评估的内部内容,即弱头正常形式)。这种替代是破坏性的,即评估的副作用。

您可能会说“延迟加载”是一种在面向对象语言中推迟评估的方法,直到第一次需要对象为止。当需要该值时,将评估整个对象。

thunk类似,因为它是推迟评估函数式编程语言中任何表达式的方法。当需要时,thunk被替换为其评估内容,其可能是另一个thunk。在像Haskell这样的语言中,所有的值都是(在概念上)由thunks表示,使得每个评估步骤都可能是懒惰的。

它们是实现相同最终目标的大致相似的机制:非严格评估。