<div>Hi Herbert,</div><div><br></div><div>It sounds like you&#39;re interested in running just one client computation at once?  Hence you don&#39;t have a disambiguation problem -- if the total memory footprint crosses a threshold you know who to blame.</div>

<div><br></div><div>At least this seems easier than needing a per-computation or per-IO-thread caps.  By the way, the folks who implement Second Life did an interesting job of that -- they hacked Mono to be able to execute untrusted code with resource bounds.</div>

<div><br></div><div>Cheers,</div><div>  -Ryan</div><div><br></div><div class="gmail_quote">On Thu, Apr 19, 2012 at 6:45 AM, Herbert Valerio Riedel <span dir="ltr">&lt;<a href="mailto:hvr@gnu.org">hvr@gnu.org</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello GHC Devs,<br>
<br>
One issue that&#39;s been bothering me when writing Haskell programs meant<br>
to be long-running processes performing computations on external<br>
input-data in terms of an event/request-loop (think web-services,<br>
SQL-servers, or REPLs), that it is desirable to be able to limit<br>
resource-usage and be able to &quot;contain&quot; the effects of computations<br>
which exhausts the resource-limits (i.e. w/o crashing and burning the<br>
whole process)<br>
<br>
For the time-dimension, I&#39;m already using functions such as<br>
System.Timeout.timeout which I can use to make sure that even a (forced)<br>
pure computation doesn&#39;t require (significantly) more wall-clock time<br>
than I expect it to.<br>
<br>
But I&#39;m missing a similar facility for constraining the<br>
space-dimension. In some other languages such as C, I have (more or<br>
less) the ability to check for /local/ out-of-memory conditions (e.g. by<br>
checking the return value of e.g. malloc(3) for heap-allocations, or by<br>
handling an OOM exception), rollback the computation, and be able to<br>
skip to the next computation request (which hopefully requires less<br>
memory...)<br>
<br>
So, is there already any such facility provided by the GHC Platform I&#39;ve<br>
missed so far?<br>
<br>
...and if not, would such a memory-limiting facility be reconcilable<br>
with the GHC RTS architecture?<br>
<br>
Cheers,<br>
  hvr<br>
<span class="HOEnZb"><font color="#888888">--<br>
<br>
_______________________________________________<br>
Glasgow-haskell-users mailing list<br>
<a href="mailto:Glasgow-haskell-users@haskell.org">Glasgow-haskell-users@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><br>
</font></span></blockquote></div><br>