草庐IT

linux - Haskell 和低级 IO 操作

如何在Haskell中实现套接字、管道和文件IO等底层功能?我猜这些IO方法不是Haskell原生的,但Haskell很快包装了一些低级C库,对吗? 最佳答案 套接字、管道和文件在内核中实现;要从用户空间程序中使用它们,您需要callintothekernel.如果你把内核看作一个库,那么是的,I/O必然是由一个低级的C/汇编程序库实现的。在实践中,GHC等Haskell实现将使用C库的系统调用包装器。参见例如GHCRTScommentary,它描述了构成任何使用GHC编译的Haskell程序核心的C位。如有疑问,请咨询source

linux - Haskell 32 到 64 位交叉编译

我只有一台运行Linux的x86_32机器。在这台机器上,我编写了一个小的Haskell程序。现在我需要提供一个x86_64Linux二进制文件。实现该目标的最简单/最轻松的方法是什么? 最佳答案 借用或租用(例如EC2)一台x86_64机器足够长的时间来编译你的程序。后者的成本约为0.01美元。如果这不可能,那么假设您有一个针对x86_64的C交叉编译器,您可以尝试按照https://ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling中的说明进行操作.然而,据我所知以前没有人

linux - 移动已编译的 Haskell 程序

我想在一台Linux机器上编译一个Haskell程序,然后在另一台Linux机器上运行它。但是,这似乎根本不起作用。我收到有关缺少库的错误。大概当我安装GHC时,包管理器也会安装它需要的所有库和东西。[我有些恼火地注意到至少有一个打包系统无法安装GCC,没有GHC显然无法运行...]但是当然,目标系统没有安装这些依赖项。因此,如果我将编译后的二进制文件复制到目标系统,它就无法运行。有什么办法可以解决这个问题吗?我习惯于使用Windows,如果你编译一些东西,它就可以在所有Windows系统上工作。(至少,直到你真正尝试使用非标准设施,如数据库访问或其他东西......)我在Haskel

linux - 为 Haskell 开发选择 Linux 发行版

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion哪个Linux版本最适合haskell开发?我想安装ghc并在其中编译Leksah。我现在正在使用CentOS,但它的存储库不够丰富和新鲜。

java - Haskell 中的 Android 应用程序

您好,我知道有类似的问题。但也许这方面有任何更新或新库。我在寻找什么:编写android的最佳实践Haskell中的应用程序。我知道在c#(monodroid)/java有数百万样本。你知道写关于android+Haskell的博主、文章吗我看到了这些有用的链接:HaskellinterpreteronAndroid?RunningaHaskellprogramontheAndroidOShttp://news.ycombinator.com/item?id=1251408我知道我可以使用针对ndkgcc的GHCJHC将Haskell转换为C并使用NativeActivity怎么样?h

使用 -O2 编译 Haskell 会显着增加内存使用量

这个简单的程序在没有使用ghc标志的情况下编译时在恒定的内存空间中运行:importData.Listfx=x*xga=foldl'(+)(fa)[1..(1073741824-1)]main=doputStrLn$show$foldl'(+)0$mapg[0,1]使用ghc-O2编译时,内存使用量超过了系统资源(8GB)。将主要更改为:main=doputStrLn$show$foldl'(+)0[g0,g1]缓解了问题,因此它似乎与map有关。谁能解释一下这种行为以及如何解决它?GHC版本是:GlasgowHaskell编译器,版本7.4.1,由GHC版本7.4.1引导的阶段2

haskell中构造函数的内存使用情况

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:MemoryfootprintofHaskelldatatypes在解决组合问题时,我经常将解决方案表示为位串,例如。1010100010110111000110...你懂的。我想当我使用[Int]作为位串时,无论实际数字有多大,Int总是花费相同数量的内存(因为Int它是有界的,与Integer相比,因为计算机只记住位表示,而String会占用更多空间据我所知。当时我的想法是使用数据类型dataBits=Empty|ZeroBits|OneBitsderiving(Eq,Ord,Show)但是与Int相比,

Haskell http-conduit web-scraping daemon 崩溃并出现内存不足错误

我在Haskell中编写了一个守护程序,它每5分钟从网页中抓取一次信息。该守护程序最初运行了大约50分钟,但随后因内存不足(请求1048576字节)而意外死亡。每次我运行它时,它都会在相同的时间后死亡。将其设置为仅休眠30秒,它反而在8分钟后死亡。我意识到抓取网站的代码非常低效(从sleep时的大约30M到解析9M的html时的250M),所以我重写了它,现在它在解析时只使用了大约15M的额外内存。以为问题已解决,我连夜运行守护程序,当我醒来时,它实际上使用的内存比那天晚上少。我以为我已经完成了,但在它启动大约20小时后,它又因同样的错误而崩溃。我开始研究ghc分析,但我无法让它发挥作

performance - Haskell 的局部属性是什么?

现代CPU已经过优化,因此访问和修改内存中的同一位置(时间局部性)以及内存中的连续位置(空间局部性)是非常快速的操作。现在,由于Haskell是一种纯粹不可变的语言,你自然不能覆盖现有的内存块,这可能会使像foldl这样的东西比带有a的for循环慢得多连续访问的结果变量将在C中。Haskell是否在内部采取任何措施来减轻这种性能损失?总的来说,它关于局部性的属性是什么? 最佳答案 一般规则是,对于“普通”Haskell编程,您几乎无法(如果有的话)控制内存布局和内存位置。但是,确实存在许多允许此类控制的更高级功能,以及在这些功能之上

haskell - 检查haskell中的内存使用情况

我正在创建一个实现某种缓存的程序。我需要使用尽可能多的内存,为此我需要做两件事:检查系统中仍有多少可用内存(仅限RAM,而非SWAP)检查我的应用已经使用了多少内存。我需要一个独立于平台的解决方案(Linux、Windows等)。使用这两条信息,我将减小或放大缓存的大小。如何在Haskell中获取这些信息?有没有可以提供这些信息的软件包? 最佳答案 我无法立即看到如何以便携方式执行此操作。但是,GHC确实有“弱指针”。(请参阅System.Mem.Weak。)如果您创建项目并通过弱指针(仅)卡在它们上,那么垃圾收集器将自动开始删除项