【问题标题】:How does Haskell runtime represent lazy values?Haskell 运行时如何表示惰性值?
【发布时间】:2021-01-06 06:17:36
【问题描述】:

我什至不知道如何表达这个问题。 A 假设有一个指向非评估表达式的指针。如果它被请求(通过一些强制它的严格函数),那么指针值将被评估的值替换。正确的?我错了吗?

所以我假设每个指针都有一个标志,说明它是否已被评估。

如果评估是未定义的,比如空列表的头部怎么办? “指针”中存储了什么?

【问题讨论】:

    标签: pointers haskell lazy-evaluation internal-representation


    【解决方案1】:

    我假设有一个指向非评估表达式的指针。如果它被请求(通过一些强制它的严格函数),那么指针值将被评估的值替换。正确的?我错了吗?

    这就是它的要点。

    所以我假设每个指针都有一个标志,说明它是否已被评估。

    每个指针都指向某个结构,您可以在其中找到此类信息。

    如果评估是未定义的,比如空列表的头部怎么办? “指针”中存储了什么?

    指针指向一个表达式,其求值会引发异常。

    详细信息在 GHC wiki 的以下页面中;特别参见“对象类型”:https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/rts/storage/heap-objects

    数据构造函数、函数闭包、thunk(“未计算的表达式”)是主要的。

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 2019-12-18
      • 2017-04-18
      • 2023-04-05
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2014-11-13
      相关资源
      最近更新 更多