是否仍然需要重新编译GHC才能使用HMPFR?

时间:2014-04-05 04:04:44

标签: haskell ghc gmp mpfr

在Haskell MPFR绑定HMPFR的页面上,他们解释了为了使用库,必须重新编译带有修改的ghc - 使用不同的整数库或重命名与gmp相关联的一串符号:

https://code.google.com/p/hmpfr/

https://code.google.com/p/hmpfr/wiki/GHCWithRenamedGMP

由于在hmpfr页面上没有规范的地方提问,我希望有人能在这里回答。这个问题的现状是什么?上述修改用GHC 7.6.1测试。它们是否仍然需要GHC 7.8,它们是否需要在7.10? GHC的官方版本是否会被修改以修复这种不兼容性?

1 个答案:

答案 0 :(得分:2)

根据the release notes of GHC 7.10.1,依赖GMP的图书馆不再需要特殊的黑客攻击。

  

整数gmp包已经完全从头开始重写。这次重写的主要变化是GHC编译的程序链接到GMP不再“钩”' GMP分配例程,在原始Haskell堆上创建一个Integer。相反,整数gmp现在在Haskell代码中分配所有内存,并通过正常的FFI导入与GMP对话,就像其他C代码一样。

     

这样做的实际副作用是,与GMP结合的C库(例如MPFR或FLINT)不再需要通过FFI在GHC编译的程序中使用小心(或不可能)的hack; GMP与任何其他C库一样对待,没有特殊的住宿。

换句话说,IIUC,曾经是GHC Integer将通过调用专门指示通过GHC分配内存的适当GMP函数来创建。这是一个问题,因为创建GMP整数的任何其他库都会无意中使GC收集其整数。对于Haskell中的大整数的新变化GHC allocates the memory itself,因此不再有任何与GMP的特殊交互影响GMP的其他用户。