草庐IT

haskell-tagsoup

全部标签

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

haskell - 函数式语言如何表示内存中的代数数据类型?

如果您在Haskell中编写生物信息学算法,您可能会使用代数数据类型来表示核苷酸:dataNucleotide=A|T|C|G我认为,在标准ML或OCaml中你会做类似的事情(我从来没有真正使用过)。Nucleotide类型的值可以清楚地包含在两位中。但是,这样做会导致访问时间比您为每个Nucleotide值使用一个字节的情况要慢,因为您需要使用二元运算符选择出感兴趣的两位。因此,在决定如何表示代数数据类型时,编译器必须在内存效率和计算效率之间做出内在的权衡。此外,由于值可以是可变大小的,因此代数数据类型在内存中的表示变得更加复杂:dataMaybea=Justa|Nothing显然,

haskell - 函数式语言如何表示内存中的代数数据类型?

如果您在Haskell中编写生物信息学算法,您可能会使用代数数据类型来表示核苷酸:dataNucleotide=A|T|C|G我认为,在标准ML或OCaml中你会做类似的事情(我从来没有真正使用过)。Nucleotide类型的值可以清楚地包含在两位中。但是,这样做会导致访问时间比您为每个Nucleotide值使用一个字节的情况要慢,因为您需要使用二元运算符选择出感兴趣的两位。因此,在决定如何表示代数数据类型时,编译器必须在内存效率和计算效率之间做出内在的权衡。此外,由于值可以是可变大小的,因此代数数据类型在内存中的表示变得更加复杂:dataMaybea=Justa|Nothing显然,

multithreading - Haskell/GHC 每线程内存成本

我正在尝试了解Haskell(OSX10.10.5上的GHC7.10.1)中的(绿色)线程到底有多贵。我知道与真正的操作系统线程相比,它的内存使用和CPU都非常便宜。是的,所以我开始用forksn(绿色)线程(使用优秀的async库)编写一个super简单的程序,然后让每个线程休眠m秒。嗯,这很容易:$catPerTheadMem.hsimportControl.Concurrent(threadDelay)importControl.Concurrent.Async(mapConcurrently)importSystem.Environment(getArgs)main=doarg

multithreading - Haskell/GHC 每线程内存成本

我正在尝试了解Haskell(OSX10.10.5上的GHC7.10.1)中的(绿色)线程到底有多贵。我知道与真正的操作系统线程相比,它的内存使用和CPU都非常便宜。是的,所以我开始用forksn(绿色)线程(使用优秀的async库)编写一个super简单的程序,然后让每个线程休眠m秒。嗯,这很容易:$catPerTheadMem.hsimportControl.Concurrent(threadDelay)importControl.Concurrent.Async(mapConcurrently)importSystem.Environment(getArgs)main=doarg

haskell - Haskell程序的-hc配置文件中PINNED是什么意思?

我正在尝试分析我的应用程序。在使用-hcRTS选项分析内存使用情况时,我注意到很多内存标记为PINNED。当使用-hy运行时,内存被标记为ARR_WORDS。该程序使用hmatrix包中的Data.Packed.Matrix模块创建一个2400×2400的double矩阵,并且由于其中的元素应该存储在连续内存中,我没有看到矩阵占用这么多空间的方式。我的问题是:PINNED这个词实际上是什么意思?还有没有办法获得有关为什么以及在何处使用内存的更多信息?有问题的整个源代码是onGitHub,是否有人对此感兴趣。然而,它远非最小的例子。 最佳答案

haskell - Haskell程序的-hc配置文件中PINNED是什么意思?

我正在尝试分析我的应用程序。在使用-hcRTS选项分析内存使用情况时,我注意到很多内存标记为PINNED。当使用-hy运行时,内存被标记为ARR_WORDS。该程序使用hmatrix包中的Data.Packed.Matrix模块创建一个2400×2400的double矩阵,并且由于其中的元素应该存储在连续内存中,我没有看到矩阵占用这么多空间的方式。我的问题是:PINNED这个词实际上是什么意思?还有没有办法获得有关为什么以及在何处使用内存的更多信息?有问题的整个源代码是onGitHub,是否有人对此感兴趣。然而,它远非最小的例子。 最佳答案

c++ - 从 C++ 到 Haskell 类和状态

我必须转换这个C++代码classA{public:intx_A;voidsetX_A(intnewx){x_A=newx;}voidprintX_A(){printf("x_Ais%d",x_A);}};classB:publicA{public:intx_B;voidsetX_B(intnewx){x_B=newx;}voidprintX_B(){printf("x_Bis%d",x_B);}};main(){AobjA;BobjB;objA.setX_A(2);objA.printX_A();objB.printX_A();objB.setX_B(5);objB.printX_B