Безопасное выполнение ненадежного кода на Haskell - PullRequest
27 голосов
/ 12 мая 2011

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

Должно иметь:

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

Возможности Я бы хотел бы увидеть:

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

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

РЕДАКТИРОВАТЬ: У меня есть два ответа, оба отлично. Спасибо! Грустная часть в том, что, похоже, нет готовой библиотеки, просто похожая программа. Это полезный ресурс, хотя. В любом случае, я думаю, что подожду выпуска 7.2.1 и попытаюсь использовать SafeHaskell в моей собственной программе.

Ответы [ 2 ]

31 голосов
/ 12 мая 2011

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

  • контролируемое пространство имен
  • Время ожидания по ОС
  • Модули собственного кода
  • Кэширование
  • Параллельные интерактивные верхние уровни
  • Возвращает пользовательское сообщение об ошибке.

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

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


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

26 голосов
/ 12 мая 2011

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

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

...