<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">You should probably go with a Lisp process per session.<br>
<br></blockquote><div><br></div><div>One subprocess that stays open as long as the user keeps sending more commands back to the server? I thought about that, but after watching people use it from the logs, most people ran maybe 1 or 2 commands. (+ 1 2) was the biggest hit. Plus the server didn't even break a sweat, while opening a new subprocess per request. It just doesn't seem like the highest priority. Am I missing something?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Consider using CLISP because it starts up really fast and has very<br>
little memory overhead (although both CLISP and SBCL share their Lisp<br>
image VM pages, loading FASLs causes some of the pages to be modified<br>
and unshared - if you make a new image file with Parenscript<br>
preloaded, all the processes will share their entire image).<br>
<br></blockquote><div><br></div><div>You mean make an image with save-lisp-and-die? That seems like a good idea.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

The tricky thing is going to be detecting a stuck process. One easy<br>
way to bypass this is to do a new Lisp process per eval - just run the<br>
entire REPL history over every time the user presses enter, and have<br>
something like a 5 second timer that kills that process if it doesn't<br>
complete. I guess that's exactly like CGI. Users might run into<br>
trouble if something depends on randomly generated names (gensyms<br>
should be identical across invocations).<br>
<br></blockquote><div><br></div><div>Oh thats an interesting idea! The timeouts wouldn't even be difficult because Node JS supports setTimeout on the server. Very cool.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

You can use FreeBSD jails or one of the Linux jail tools to sandbox<br>
the Lisp and allow defmacros (although the latter are kind of a pain<br>
to set up).<br></blockquote><div><br></div><div>Unfortunately, it looks like the way I have the server set up I can't run this stuff inside a chroot type jail. It is currently set up as a startup script in /etc/init.d/ and apparently Ubuntu 10.04 won't let start up scripts create chroots anymore...</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
As far as the code goes, the repository Parenscript has implicit<br>
returns for defuns and lambdas. I should put together a new release<br>
soon.<br></blockquote><div><br></div><div>Awesome! My implementation of implicit returns is crappy and hacked together at best.</div><div><br></div><div>_Nick_</div></div>