<br>
<div class="gmail_quote">On Wed, Feb 3, 2010 at 10:32 PM, Synx <span dir="ltr"><<a href="mailto:plt@synx.us.to" target="_blank">plt@synx.us.to</a>></span> wrote:
<div> </div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<div>So R6RS has no accomodations for limits on memory, disk access, nested</div>
<div>evaluation, or network functionality. For example any evaluator that</div>
<div>allows the use of recursion in r6rs will thrash the computer it's on to</div>
<div>a halt the moment some user submits the code '(let loop () (+ 1 (loop)))</div>
<div> </div>
<div>I was trying to think how to sandbox such things. The only thing I could</div>
<div>come up with is to have every datum produced by the user be wrapped in</div>
<div>some kind of "memory tracking" object that watches a pretend memory</div>
<div>limit and throws an error when that limit has been decremented to or</div>
<div>below zero. Would that mean taking every instance of "1" in the above</div>
<div>program and putting (watch-memory limiter integer-size 1) in its place?</div>
<div> </div>
<div>Given that the R6RS doesn't specify any sort of memory management or</div>
<div>memory limiting, how would you implement such a thing, as an extension</div>
<div>to the R6RS? I know PLT can do it natively, but it's always been</div>
<div>attractive to me to write something that can run (if not perfectly) on</div>
<div>more than one implementation. </div></blockquote>
<div> </div>
<div> </div>
<div>My guess is that you need to rely on the underlying platform to provide you with the mechanism for direct memory access/management. </div>
<div> </div>
<div>As such you can have a generic interface in R6RS, and then implementation specific code that runs on each specific scheme implementations that do offer such access.</div>
<div> </div>
<div>Cheers,</div>
<div>yc</div>
<div><br> </div></div>