Articles of ghc

Haskell FFI堆栈大小与C ++共享库

我试图通过一个共享库发送大量的数据,数千兆字节的哈斯克尔。 一切似乎都工作得很好,但我最终得到的错误: 堆栈空间溢出:当前大小为8388608字节。 使用`+ RTS -Ksize'来增加它。 所以基本上,我的问题是:如何增加Haskell堆栈大小? 我努力了: 1)构build共享库时,将相应的-rtsopts标志传递给链接器 – 没有运气,但这是因为我将Haskell用作共享库。 2)用这个链接中描述的RTS标志调用hs_init: Haskell用户指南FFI / GHC …也没有工作。 int argc = 2; char *argv[] = { "+RTS", "-K100M", NULL }; char **pargv = argv; // Initialize Haskell runtime hs_init(&argc, &pargv); 基本上我认为这些参数也被忽略,因为我没有使用Haskell主,这也是我提供的用户指南链接中描述的。 注意:我也尝试了这种方法,在NULL之前向列表中添加一个“-RTS”并增加argc,但没有区别。 3)我怀疑这个问题的真正的解决scheme是在给定的链接中的第8.2.1.1节,并且对hs_init_ghc进行如下特殊的调用: #include "HsFFI.h" #include "Rts.h" RtsConfig conf = defaultRtsConfig; conf.rts_opts_enabled = RtsOptsAll; hs_init_ghc(&argc, &argv, conf); […]

forkIO / killThread与forkProcess的交互

我写了下面的代码,并注意到killThread块和线程仍然继续。 这只会发生,如果我在forkProcess中,如果我删除forkProcess,一切都按预期工作。 码 {-# LANGUAGE TupleSections #-} module Main where import Control.Concurrent import Control.Monad import System.Posix.Process {-# NOINLINE primes #-} primes :: [Integer] primes = 2:[x | x <- [3..], all (not . flip isDivisorOf x) (takeWhile (< truncate (sqrt $ fromInteger x :: Double)) primes)] where x `isDivisorOf` y = y `rem` x == […]

构build在Ubuntu 11.10上的Haskell程序不能在Ubuntu 10.04上运行

我试图为我的程序的用户提供一些Linux二进制文件,除了当前的Windows二进制文件,所以我安装了Ubuntu 11.10(因为11.04上的haskell-platform包仍然是2010版本)。 当我尝试在Ubuntu 10.04上运行生成的二进制文件时,我收到了无法findlibgmp.so.10的消息。 检查/ usr / lib显示10.04附带libgmp.so.3,而11.10附带libgmp.so.10。 因此,GHC会dynamic链接到libgmp,而不是静态链接,我认为这是默认设置。 有什么办法可以告诉GHC在二进制文件中静态包含libgmp吗? 如果没有,有没有其他的解决scheme,不需要用户安装不同版本的libgmp?

GHC:奇怪条件下的分割错误

Toady我从Ubuntu 10.04 LTS更新了我的开发机器到Ubuntu 12.04 LTS(或者ghc 6.12.1到ghc 7.4.1 ),我在我的currenct项目中遇到了一个非常奇怪的行为。 几个小时后,我把它缩小到以下代码: {-# LANGUAGE ForeignFunctionInterface #-} module Main where import Data.Word import Text.Printf import Foreign foreign import ccall "dynamic" code_void :: FunPtr (IO ()) -> (IO ()) main :: IO () main = do entryPtr <- (mallocBytes 2) poke entryPtr (0xc390 :: Word16) — nop (0x90); ret(0xc3) (little […]

Haskell和低级IO操作

在Haskell中如何实现套接字,pipe道和文件IO等低层次的东西? 我猜这些IO方法在Haskell中不是本地的,但Haskell很快包装了一些低级C库,是吗?

是否有可能生产独立的haskell可执行文件

有没有什么办法可以产生独立的haskell可执行文件,在不同的linux机器上运行,假设架构相似? 对不起,我应该更清楚。 其他机器可能没有安装ghc – 有点像Python的pyinstaller是我在找什么?

移动一个编译好的Haskell程序

我想在一个Linux机器上编译一个Haskell程序,然后在另一个Linux机器上运行它。 但是,这似乎并不奏效。 我收到关于缺less库的错误。 据推测,当我安装GHC时,软件包pipe理器也安装了所有的库和它需要的东西。 [我注意到有些恼怒,至less有一个包装系统不能安装GCC,GHC显然不能没有…]但是当然,目标系统没有安装这些依赖关系。 所以,如果我将编译的二进制文件复制到目标系统,它只是无法运行。 有没有办法解决这个问题? 我习惯于使用Windows,如果你编译了一些东西,它只能在所有的Windows系统上运行。 (至less,直到你真的尝试使用非标准的设施,如数据库访问或其他…)我在Haskell编译Hello World,复制到另一个Linux的盒子,它抱怨libgmp.so.10丢失或像这样一些神秘的庞然大物 只是为了使事情变得有趣:我只有FTP访问目标机器,而不是shell访问。 我甚至不完全确定它运行的是什么操作系统。 所以我可以用我想要的方式来更改我的编译机器,但是除了复制文件外,我不能对目标机器做任何事情。

在GHC编译的二进制中使用过多的神秘的系统时间

我正在研究约束基search的自动边界。 因此,我的出发点是“ 发送更多的钱”问题 ,并提供基于非确定性select而不需要更换的解决scheme 。 我已经修改了方法来计算执行的样本数量,以便更好地衡量添加约束条件对search的影响。 import Control.Monad.State import Control.Monad.Trans.List import Control.Monad.Morph import Data.List (foldl') type CS ab = StateT [a] (ListT (State Int)) b select' :: [a] -> [(a, [a])] select' [] = [] select' (x:xs) = (x, xs) : [(y, x:ys) | ~(y, ys) <- select' xs] select :: CS aa select = […]

GHC -fhpc代码覆盖率在Windows 10上

我试图检查我的美味unit testing的代码覆盖率。 我find了一个方法来在hcc的GHC文档用户指南 。 问题是, ghc -fhpc Myfile.hs不会生成.hpc子目录或任何.tix文件,正如文档所声称的那样。 随后,我无法运行hpc report 。 我错过了什么? 这不适用于Windows?

简单的正则expression式replace使用正则expression式compat在Windows上崩溃

在Windows上使用GHC时,以下代码崩溃。 它在Linux上完美运行。 这是否有意义或有一个错误? module Main where import qualified Text.Regex as Re — from regex-compat import Debug.Trace main :: IO () main = do putStr $ cleanWord "jan" putStr $ cleanWord "dec" putStr $ cleanWord "jun" — crashes here cleanWord :: String -> String cleanWord word_ = let word = trace (show word_) word_ in let […]