В программе Haskell, скомпилированной с GHC, можно ли программно защищать от чрезмерного использования памяти? То есть, уведомить ли он программу, когда использование памяти достигает указанного предела, предпочтительно указывая на оскорбительную нить.
Например, предположим, что я хочу написать сервер, содержащий интерпретатор языка сценариев, к которому могут подключаться пользователи. Это Turing-complete, поэтому программы теоретически могут использовать неограниченную память или время. Предположим, что каждый клиент обрабатывается отдельным потоком. Если клиент пишет бесконечный цикл, который очень быстро потребляет память, я хочу убедиться, что поток потребляет не более, чем, скажем, 1 МБ памяти, перед тем как получить предупреждение с исключением. Я не хочу, чтобы другие пользователи были затронуты, когда это произойдет.
Возможно, это возможно с помощью отдельных процессов и ulimit
, но:
-
Я бы предпочел сохранить его в одной программе, чтобы избежать сложности межпроцессного общения.
-
Мне нужно поддерживать как Linux, так и Windows, поэтому я предпочел бы, чтобы это было возможно для платформы-agnostic.