The procedures in this section are provided by
(use-modules (system repl coop-server))
Whereas ordinary REPL servers run in their own threads (see REPL Servers), sometimes it is more convenient to provide REPLs that run at specified times within an existing thread, for example in programs utilizing an event loop or in single-threaded programs. This allows for safe access and mutation of a program’s data structures from the REPL, without concern for thread synchronization.
Although the REPLs are run in the thread that calls
dedicated threads are spawned so that the calling thread is not blocked.
The spawned threads read input for the REPLs and to listen for new
Cooperative REPL servers must be polled periodically to evaluate any
pending expressions by calling
poll-coop-repl-server with the
object returned from
spawn-coop-repl-server. The thread that
poll-coop-repl-server will be blocked for as long as the
expression takes to be evaluated or if the debugger is entered.
Create and return a new cooperative REPL server object, and spawn a new
thread to listen for connections on server-socket. Proper
functioning of the REPL server requires that
poll-coop-repl-server be called periodically on the returned
Poll the cooperative REPL server coop-server and apply a pending
operation if there is one, such as evaluating an expression typed at the
REPL prompt. This procedure must be called from the same thread that