Подтвердить что ты не робот

Quickchecking неприятная иностранная функция в Haskell (GHC)

Я бы хотел использовать библиотеку quickcheck Haskell, чтобы проверить код C. Самый простой способ - сделать foreign import и написать свойство поверх получаемой функции haskell. Проблема в том, что если код C вызывает segfault или может привести к повреждению памяти, мои тесты либо сбой без вывода, либо что-то совершенно непредсказуемое.

Второй вариант - сделать простые исполняемые обертки над C-битами и выполнить их вне процесса тестирования через System.Process. Излишне говорить, что для этого требуется много лесов и сериализации значений, но, с другой стороны, он может обрабатывать segfaults.

Есть ли способ сделать стратегию foreign import безопасной как запуск внешнего процесса?

4b9b3361

Ответ 1

Вы можете реализовать оболочку в текущем процессе, но затем используйте System.Posix.Process.forkProcess для безопасного выполнения в собственном процессе, реализуя необходимую связь с помощью Haskell.