Нужно ли перекомпилировать GHC для использования HMPFR?

На странице привязок 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, чтобы исправить эту несовместимость?


person davidsd    schedule 05.04.2014    source источник


Ответы (1)


Согласно примечаниям к выпуску GHC 7.10.1 библиотеки, основанные на GMP, больше не требуют специальных хаков.

Пакет integer-gmp был полностью переписан с нуля. Основное изменение в этой перезаписи заключается в том, что программы, скомпилированные GHC, которые ссылаются на GMP, больше не «цепляют» процедуры распределения GMP для создания Integer в необработанной куче Haskell. Вместо этого integer-gmp теперь выделяет всю память в коде Haskell и общается с GMP через обычный импорт FFI, как и другой код C.

Практическим побочным эффектом этого является то, что библиотеки C, которые связываются с GMP (например, MPFR или FLINT), больше не нуждаются в осторожных (или невозможных) хаках для использования внутри программы, скомпилированной GHC через FFI; GMP обрабатывается так же, как и любая другая библиотека C, без каких-либо специальных приспособлений.

Другими словами, IIUC, раньше считалось, что GHC Integers будут создаваться путем вызова соответствующих функций GMP, которые были специально проинструктированы о выделении памяти через GHC. Это было проблемой, потому что любая другая библиотека, создающая целое число GMP, непреднамеренно собирала свои целые числа сборщиком мусора. С новыми изменениями GHC сам выделяет память для больших целых чисел в Haskell, поэтому больше нет никаких особых взаимодействий с GMP, которые влияют на других пользователей GMP.

person Kirill    schedule 15.10.2015