草庐IT

haskellers

全部标签

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

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

c++ - 从 C++ 调用 Haskell 库

我正在Qt(C++)中构建一个应用程序,它使用用Haskell编写的库作为后端。如何将Haskell库的接口(interface)导出到C++?当haskell库中的函数使用像int或float这样的简单类型时,这不是问题,但是当它们使用结构作为参数时呢?在这种情况下,最具扩展性的解决方案是什么? 最佳答案 您需要编写haskell代码来将这些数据结构编码为您可以在Haskell中使用的数据结构。c2hs工具在这方面很有帮助:http://hackage.haskell.org/package/c2hs虽然该工具似乎是为从Haske

c++ - 从 C++ 调用 Haskell 库

我正在Qt(C++)中构建一个应用程序,它使用用Haskell编写的库作为后端。如何将Haskell库的接口(interface)导出到C++?当haskell库中的函数使用像int或float这样的简单类型时,这不是问题,但是当它们使用结构作为参数时呢?在这种情况下,最具扩展性的解决方案是什么? 最佳答案 您需要编写haskell代码来将这些数据结构编码为您可以在Haskell中使用的数据结构。c2hs工具在这方面很有帮助:http://hackage.haskell.org/package/c2hs虽然该工具似乎是为从Haske