<div dir="ltr">Thanks Bill. That matches what i was guessing, that tail call optimization was going to mean stack limitations wouldn&#39;t work anyway. I don&#39;t think we can get the signal in Max either. I did a test yesterday and found out that the same situation exists in the javascript object in Max, so I have a feeling if the host platform had a way to do this, Cycling 74 would be doing it already with the js object. Perhaps using begin_hook is an option if I can make it optional, I definitely don&#39;t want to slow down all execution. I appreciate the response!<div><br></div><div>iain</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 27, 2021 at 6:31 AM &lt;<a href="mailto:bil@ccrma.stanford.edu">bil@ccrma.stanford.edu</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">You can set (*s7* &#39;max-stack-size) which will raise an<br>
error if the stack gets beyond that size.  Tail recursion<br>
does not affect the stack, so the stack-max-size only<br>
catches &quot;normal&quot; infinite recursion.  I don&#39;t know the<br>
context, but in nrepl I trap SIGINT (control-C) and<br>
raise an error in the interrupt handler -- look for<br>
set_sigint_handler and related code in nrepl.c.  This<br>
is then enabled during s7_eval_string in nrepl.scm.<br>
I just noticed (of course!) that it only works once --<br>
not sure why you can&#39;t interrupt successive expressions.<br>
Snd (and maybe Grace) use s7&#39;s begin_hook to interrupt<br>
computation, but that slows down everything (it is<br>
polling the begin_hook and calling a function each time)<br>
and might not work in loops that the optimizer has<br>
so tightly optimized that no scheme-level body exists.<br>
<br>
</blockquote></div>