草庐IT

haskellers

全部标签

haskell - 为什么这里的早期术语不被垃圾收集?

如果我定义KolakoskiSequence作为kolakoski::()->[Int]kolakoski()=1:2:helper()wherehelper()=2:concat(zipWithreplicate(helper())(cycle[1,2]))并找到第500,000,000项kolakoski()!!500000000我发现当使用ghc-O编译时,这会很快消耗大量内存。但是在关闭优化的情况下,它几乎没有使用任何东西。哪个优化导致了这个问题,我该如何关闭它? 最佳答案 让我们比较实际数字。如果在没有优化的情况下运行,您

haskell - 为什么这里的早期术语不被垃圾收集?

如果我定义KolakoskiSequence作为kolakoski::()->[Int]kolakoski()=1:2:helper()wherehelper()=2:concat(zipWithreplicate(helper())(cycle[1,2]))并找到第500,000,000项kolakoski()!!500000000我发现当使用ghc-O编译时,这会很快消耗大量内存。但是在关闭优化的情况下,它几乎没有使用任何东西。哪个优化导致了这个问题,我该如何关闭它? 最佳答案 让我们比较实际数字。如果在没有优化的情况下运行,您

haskell - 存在量化类型的内存占用和相关优化技术

考虑以下利用存在的数据模型:dataNodea=Nodea(MapTypeRepAnyNode)dataAnyNode=foralla.Showa=>AnyNodea标准类型的内存占用规则havebeenexplainedpreviously.现在,存在类型的规则是什么,例如AnyNode?是否有任何优化技术,例如使用unsafeCoerce的一些变通方法可以逃避存在性声明?我问这个是因为类似于Node的类型将被放置在高度内存密集型库的成本中心,所以内存占用就是全部,这就是为什么最肮脏的黑客受到欢迎的原因。 最佳答案 ghc-dat

haskell - 存在量化类型的内存占用和相关优化技术

考虑以下利用存在的数据模型:dataNodea=Nodea(MapTypeRepAnyNode)dataAnyNode=foralla.Showa=>AnyNodea标准类型的内存占用规则havebeenexplainedpreviously.现在,存在类型的规则是什么,例如AnyNode?是否有任何优化技术,例如使用unsafeCoerce的一些变通方法可以逃避存在性声明?我问这个是因为类似于Node的类型将被放置在高度内存密集型库的成本中心,所以内存占用就是全部,这就是为什么最肮脏的黑客受到欢迎的原因。 最佳答案 ghc-dat

memory - 加速 Haskell 并发

MVar,TVar,IORef,...我无法加速thunk问题(我认为)。(我原来的问题是线程代码,我做了n次“forkIO”调用“addMany”;但我认为我的问题出在“shW”函数上)让下一个代码:{-#LANGUAGEBangPatterns#-}importControl.ConcurrentimportControl.MonadimportSystem.Environment(getArgs)importData.IntimportData.IORef--"i"times,add"n"foreachIORef(in"a")addMany::[IORefInt64]->Int6

memory - 加速 Haskell 并发

MVar,TVar,IORef,...我无法加速thunk问题(我认为)。(我原来的问题是线程代码,我做了n次“forkIO”调用“addMany”;但我认为我的问题出在“shW”函数上)让下一个代码:{-#LANGUAGEBangPatterns#-}importControl.ConcurrentimportControl.MonadimportSystem.Environment(getArgs)importData.IntimportData.IORef--"i"times,add"n"foreachIORef(in"a")addMany::[IORefInt64]->Int6

arrays - 如何在 Haskell 中打印列表的内存地址

我正在研究一些编程语言如何为结构化数据分配内存(在本例中我正在研究数组)。我正在创建数组,如图所示here在第3节。importData.Array.IOarr而我要做的是打印每个元素的内存地址,如下所示:ArrayStart:|--ShowswherethearrayitselfisArray1:|--MemoryaddressofthefirstelementArray2:|我的问题是我不知道如何在Haskell中获取元素的内存地址值。有没有类似于Python的id(object)或Ruby的object.object_id的函数? 最佳答案

arrays - 如何在 Haskell 中打印列表的内存地址

我正在研究一些编程语言如何为结构化数据分配内存(在本例中我正在研究数组)。我正在创建数组,如图所示here在第3节。importData.Array.IOarr而我要做的是打印每个元素的内存地址,如下所示:ArrayStart:|--ShowswherethearrayitselfisArray1:|--MemoryaddressofthefirstelementArray2:|我的问题是我不知道如何在Haskell中获取元素的内存地址值。有没有类似于Python的id(object)或Ruby的object.object_id的函数? 最佳答案

multithreading - 我可以限制 Haskell 中每个函数/monad/线程的内存使用吗?

我正在从事一个旨在作为服务工作的研究编译器项目。其中一项要求是某些用户在处理其调用时可能具有有限的内存使用量(例如,“来自IPa.b.c.d的调用可能使用多达30mb的堆内存”)。我的原型(prototype)实现,用C语言编写,简单地使用了一个内存池,而不是直接使用malloc'ing(由于有效的类型,实际上很难做到正确)。不过,手动内存管理。在Haskell中是否有任何方法可以通过限制函数、monad或轻量级线程上的堆使用来实现这一点?(我会接受可能允许我这样做的其他功能语言的建议。) 最佳答案 在最新版本的GHC中,可以使用G

multithreading - 我可以限制 Haskell 中每个函数/monad/线程的内存使用吗?

我正在从事一个旨在作为服务工作的研究编译器项目。其中一项要求是某些用户在处理其调用时可能具有有限的内存使用量(例如,“来自IPa.b.c.d的调用可能使用多达30mb的堆内存”)。我的原型(prototype)实现,用C语言编写,简单地使用了一个内存池,而不是直接使用malloc'ing(由于有效的类型,实际上很难做到正确)。不过,手动内存管理。在Haskell中是否有任何方法可以通过限制函数、monad或轻量级线程上的堆使用来实现这一点?(我会接受可能允许我这样做的其他功能语言的建议。) 最佳答案 在最新版本的GHC中,可以使用G