gpt4 book ai didi

使用 GADT 的性能影响

转载 作者:行者123 更新时间:2023-12-03 23:41:50 25 4
gpt4 key购买 nike

answering a question with a suggestion to use GADTs ,评论中出现了一些关于性能的问题。问题涉及类型类 PlotValue :

class PlotValue a where
value :: a -> Double

我的回答建议使用 GADT Input :
data Input where
Input :: (PlotValue a, PlotValue b) => Maybe a -> Maybe b -> Input

但我想,细节无关紧要。

我想知道性能的两个方面:

时间 :
模式匹配是否会产生任何运行时成本,例如
case x of
Input (Just a) (Just b) -> value a * value b
_ -> 0.0

超出匹配两个 Maybe 的正常成本值(value)观?

空间 : Input 类型的值有多少存储开销携带?我的猜测是它带有两个 PlotValue每个 Input 类型的值的字典(每个“指针”?),这意味着 [Input]在内存使用方面会比使用 (Just Double, Just Double) 效率低得多。或者,更好的是, (# #Double, #Double #) - 如果您存储 value 的结果在普通或未打包的元组中。

所以,虽然我喜欢 GADT 给我的表现力,但我从来没有过多地考虑过性能方面。谁能告诉我更多关于这一点(以及我可能不知道的任何其他隐藏成本)?

最佳答案

我认为你已经确定了间接费用。对于每个存在限定的变量,您需要相应的(指向)字典。这需要空间,更糟糕的是,方法调用会很慢。您的示例中的 (*) 将是一个间接函数调用,而对于 Double,它将是一个原始操作。

关于使用 GADT 的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5426513/

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