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