gpt4 book ai didi

performance - Haskell 不会垃圾收集列表的头部吗?

转载 作者:行者123 更新时间:2023-12-04 17:18:46 26 4
gpt4 key购买 nike

考虑以下程序:

module Main where

import Control.Monad.List

main = runListT $ do
x <- ListT $ return $ [0..1000000000]
lift $ print x

理想情况下,我们希望列表在我们使用它时被垃圾收集,以便该程序只使用常量内存。但是当我编译并运行它时
ghc Main.hs -O2 -o Main
我看到它继续使用越来越多的内存。我如何说服 Haskell GC 列表中消耗的元素?

最佳答案

ListTtransformers不会在恒定空间中流式传输或运行。 ListTpipes做!

import Control.Monad (mzero)
import Pipes

main = runListT (do
x <- Select (each [0..1000000000])
lift (print x)
mzero )

我也刚上传 pipes-4.1.4今天,放松了 runListT不需要 mzero最后,那么它只会是:
-- Requires `pipes-4.1.4`
import Pipes

main = runListT (do
x <- Select (each [0..1000000000])
lift (print x) )

关于performance - Haskell 不会垃圾收集列表的头部吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27095812/

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