[gambit-list] web-repl.scm behaving strangely
Marc Feeley
feeley at iro.umontreal.ca
Wed Nov 8 07:18:40 EST 2006
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 8-Nov-06, at 1:20 AM, Andrew Lentvorski wrote:
> I'm trying to execute web-repl.scm from the repl rather than from the
> command line. If I comment out the (start-repl-server), I get this:
>
> Gambit Version 4.0 beta 20
>
>> (load "web-repl")
> "/Users/gambit/src/gambc-4.0d20/web-repl.scm"
>> (start-repl-server)
> ; I do telnet 127.0.0.1 7000 and the repl responds on the starting tty
> Gambit Version 4.0 beta 20
>
> 1>
> ; rather than on the telnet session
>
> What's going on? This same program works fine if I uncomment the
> (start-repl-server) and invoke it using "gsi web-repl". The prompt
> works just fine on the telnet session.
>
> What am I missing?
Each thread is associated to a "REPL channel", which is the I/O
channel that the thread will use for interaction with the "user".
Initially a thread has no associated REPL channel. At the first REPL
interaction (writing the prompt or error message, reading the user's
command, etc) an I/O channel will be assigned to the thread. If you
know UNIX, this is very similar to how the "controlling tty" is
allocated to a process. This approach is interesting because you can
redefine the procedure ##thread-make-repl-channel (in your
initialization file, in a script, etc) **before the first REPL
interation** to change where the primordial thread's REPL will do I/
O. This is used by GUIDE to redirect the primordial thread's REPL to
the IDE. For details read lib/_repl.scm and lib/guide/_guide.scm .
Back to your specific problem, if you load web-repl interactively,
the primordial thread already has an associated I/O channel (because
it has already interacted with the user) so it will not be redirected
to the network connection. However, if you uncomment the (start-ide-
repl-in-new-thread) in web-repl, then each telnet connection will
start a new thread which will use that connection for its I/O channel.
There is also another issue which may confuse you here. The meaning
of (current-input-port) and (current-output-port) depends on whether
you started gsi in interactive mode (with a REPL) or in batch mode.
In batch mode you will get ports that correspond to the stdin/stdout
of the process. In interactive mode you will get ports that
correspond to the REPL channel, which is normally connected to the
console (UNIX controlling terminal) rather than stdin/stdout (unless
you start gsi with the -:d- option).
Marc
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (Darwin)
iD8DBQFFUcsg//V9Zc2T/v4RAp83AJ4qlfH4F9EhvjP1lkfyvCqzMSuJfwCfTkHP
gXqpXjOsEvyVpow9yUlaKcM=
=tQEW
-----END PGP SIGNATURE-----
More information about the Gambit-list
mailing list