Быстрая проверка неприятной посторонней функции в Haskell(GHC)
Я хотел бы использовать библиотеку Quickcheck на Haskell для проверки кода на Си. Кажется, самый простой способ сделать foreign import
и напишите свойство поверх результирующей функции haskell. Проблема заключается в том, что если код C вызывает segfault или может испортить память, мои тесты либо вылетают без вывода, либо делают что-то совершенно непредсказуемое.
Второй альтернативой является создание простых исполняемых оболочек над C-битами и выполнение их вне процесса тестирования через System.Process
, Само собой разумеется, что для этого требуется много строительных лесов и сериализационных значений, но, с другой стороны, он может обрабатывать ошибки сегмента.
Есть ли способ сделать foreign import
Стратегия так же безопасна, как запуск внешнего процесса?
1 ответ
Вы можете реализовать обертку в вашем текущем процессе, но затем использовать System.Posix.Process.forkProcess
безопасно работать в своем собственном процессе, осуществляя необходимые коммуникации с помощью Haskell.