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

Безопасное выполнение ненадежного кода Haskell

Я ищу способ безопасного запуска произвольного кода Haskell (или отказаться от запуска небезопасного кода).

Должно быть:

  • список функций/функций
  • время ожидания при выполнении
  • ограничение использования памяти

Возможности, которые я хотел бы видеть:

  • способность убивать поток
  • компиляция модулей в собственный код
  • кэширование скомпилированного кода
  • одновременное выполнение нескольких интерпретаторов
  • сложный тип данных для ошибок компилятора (insted из простого сообщения в String)

С такой функциональностью можно было бы реализовать плагин для браузера, способный запускать произвольный код Haskell, что я имею в виду.

EDIT: У меня есть два ответа, оба отличные. Благодарю! Печальная часть состоит в том, что, похоже, нет готовой библиотеки, просто подобная программа. Это полезный ресурс. В любом случае, я думаю, что буду ждать выхода 7.2.1 и попытаться использовать SafeHaskell в своей собственной программе.

4b9b3361

Ответ 1

Мы делали это примерно 8 лет в lambdabot, который поддерживает:

  • контролируемое пространство имен
  • Тайм-ауты, связанные с OS
  • встроенные модули кода
  • кэширование
  • параллельные интерактивные верхние уровни
  • возвращается сообщение об ошибке.

Эта серия правил документирована, см.:

Подход к безопасности, принятый в lambdabot, вдохновил на расширение языка Safe Haskell.


Для подходов к динамическому расширению скомпилированных приложений Haskell в Haskell см. две статьи:

Ответ 2

GHC 7.2.1, скорее всего, будет иметь новый объект под названием SafeHaskell, который охватывает некоторые из того, что вы хотите. SafeHaskell обеспечивает безопасность типов (такие вещи, как unsafePerformIO, объявлены вне закона) и устанавливает механизм доверия, чтобы можно было доверять библиотеке с безопасным API, но реализованной с использованием небезопасных функций. Он разработан точно для запуска ненадежного кода.

Для других практических аспектов (тайм-аутов и т.д.), lambdabot, как говорит Дон, будет отличным местом для просмотра.