gpt4 book ai didi

haskell - 在这种情况下,UNPACK 编译指示做什么?

转载 作者:行者123 更新时间:2023-12-03 11:41:42 27 4
gpt4 key购买 nike

我很难理解 UNPACK在 haskell 工作。
例如,考虑以下数据声明:

data P a b = P !a !b
data T = T {-# UNPACK #-} !(P Int Int)

数据类型如何 T被拆包?是否相当于
data T' = T' !Int !Int

或将 Int s 进一步解包:
data T'' = T'' Int# Int#

?关于什么
data U = U {-# UNPACK #-} !(P Int (P Int Int))

?

最佳答案

GHC documentation描述 UNPACK编译指示如下:

The UNPACK indicates to the compiler that it should unpack the contents of a constructor field into the constructor itself, removing a level of indirection.



How will datatype T be unpacked?


data T = T (P Int Int)对应于

non-unpacked data

因此, data T = T {-# UNPACK #-} !(P Int Int)对应于

pair unpacked

用简单的英语, UNPACK已解压构造函数 P 的内容进入构造函数领域 T ,删除一级间接和一个构造函数头( P)。
data T = T {-# UNPACK #-} !(P Int Int)不像 data T'' = T'' Int# Int# 那样“紧凑” :

completely unpacked

What about

data U = U {-# UNPACK #-} !(P Int (P Int Int))

?



同样, data U = U (P Int (P Int Int))对应于

pair of pairs

data U = U {-# UNPACK #-} !(P Int (P Int Int))对应于

unpacked pair of pairs

用简单的英语, UNPACK已解压构造函数 P 的内容进入构造函数领域 U ,删除一级间接和一个构造函数头( P)。

资源
  • GHC manual (section 7.22)
  • Johann Tibell's ZuriHac 2015 slides
  • 关于haskell - 在这种情况下,UNPACK 编译指示做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33931991/

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