[Openmcl-devel] Remote REPL
Gary Byers
gb at clozure.com
Thu Jan 9 08:51:53 PST 2003
On Thu, 9 Jan 2003, Sven Van Caekenberghe wrote:
> Was: RE: Faceless Background Server Behavior
>
> > I was looking at
> > http://www.franz.com/support/tech_corner/telnetserver.lhtml
> > and reading the code in l1-readloop[-lds].lisp and friends (hard ;-).
> > Maybe setting *terminal-io* to some socket stream and starting
> > (toplevel) could do it ? Probably very much oversimplified...
> >
> > When I find some more time, I will try something, and I will ask again
> > how to wire it to the openmcl toplevel.
>
> So OK, lisp hacking is very addictive, I gave it a try:
>
> http://homepage.mac.com/svc/remote-repl.lisp
>
> This code kind of works: I could not figure out how to bind
> *terminal-io* thus no print functions work, break loops and toplevel
> commands are also absent, but hey you can evaluate lisp code. Anyway,
> it would be much nicer to use the real openmcl toplevel-loop. I had a
> look, but I think there must be people who can do this much quicker -
> it would take me too long to even understand the code....
>
> What we need is the equivalent of the acl code:
>
> (defun start-telnet-session (s from)
> (unwind-protect
> (catch 'end-telnet-session
> (let ((*in-telnet-session* t))
> (tpl:start-interactive-top-level
> s 'tpl:top-level-read-eval-print-loop nil)))
> (ignore-errors (close s)))
> (format t "telnet server: closing connection from ~a~%" from))
>
> In particular starting another toplevel loop (I hope that having
> multiple toplevel loops is different processes possible, otherwise the
> server could be made single threaded).
>
> Sven
OpenMCL's Cocoa demo runs multiple listeners, each in its own thread.
It calls MAKE-MCL-LISTENER-PROCESS, which might not do exactly what
you want but should give you an idea of how to do it.
An "echoing-two-way-stream" is one which knows that input is echoed
by the OS (so reading a newline affects STREAM-LINE-COLUMN of the
output stream.)
There are a few issues that come to mind:
1) You'd like for ^C to interrupt the listener process that reads it.
2) There should be some standard function that terminates a REPL.
3) OpenMCL assumes that EOF on an "interactive" stream is a
transient condtion; I believe that that's only actually true
on ttys/ptys.
_______________________________________________
Openmcl-devel mailing list
Openmcl-devel at clozure.com
http://clozure.com/cgi-bin/mailman/listinfo/openmcl-devel
More information about the Openmcl-devel
mailing list