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