[slime-devel] broken clojure REPL

Terje Norderhaug terje at in-progress.com
Sat Jan 9 21:52:03 UTC 2010

On Jan 9, 2010, at 7:23 AM, Steven E. Harris wrote:
> "Tobias C. Rittweiler" <tcr at freebits.de> writes:
>> The point is that you're not trying to use a Lisp reader to read what
>> looks very much like Lisp forms, but you're trying to use the Clojure
>> reader. And the Clojure reader is very restrictive in what it accepts
>> as symbols.
> Well, I wrote "Lisp" as opposed to "Common Lisp" to generalize the
> complaint. One can imagine SLIME having originated for some Lisp that
> allowed symbols like ":::foo", which the Common Lisp reader would not
> read without complaint. Are we not biased in this debate due to SLIME
> having been made for Common Lisp?

Even the Common Lisp reader will barf when encountering symbols that  
are in an non-existent package, like those passed through the swank  
protocol from another lisp system. We had to work around that for the  
MCLIDE client, which is implemented in Common Lisp.

>> The easiest compromise is to change %CURSOR-MARKER% to +CURSOR- 
>> which, if I read the documentation right, the Clojure reader will
>> accept. Doing so, is sweeping a problem under the carpet.
> Yes, I agree, insofar as either protocol participant is using a parser
> (be it the Common Lisp, Clojure, or ELisp reader) that isn't just
> reading a string.
> However, to recommend that the protocol participants implement a  
> parser
> from scratch to read these Lisp forms seems unreasonable too; after  
> all,
> the protocol looks to have been designed for writing and reading Lisp
> forms directly. It can't just be an accident that there are paired
> parentheses and keyword-style tags.

A problem is that the swank protocol allows the full common Lisp  
syntax, with a few self-imposed limitations to make the output  
compatible with emacs lisp. The consequence is that it is a  
substantial job to implement a custom reader.

>> I still think that it is Clojure that should "change". It should
>> provide a way to READ in a form with minimal processing -- something
>> that CL's reader, for instance, does not really allow to unfortunate
>> consequences.
> Does using the protocol require a parser separate from a
> lowest-common-denominator Lisp reader? If so, would you introduce  
> syntax
> that the Common Lisp reader couldn't accept?

Now that there are multiple clients and servers, I think it is time  
that we formalize the lisp syntax of the messages in the swank  
protocol. It should be simple, limited to a subset of what is allowed  
by Common Lisp... something parseable with say less than a page of  
lisp code.

Swank clients and servers should adhere to this syntax in the  
messages they produce, but should not be required to implement a  
validating parser for reading. Implementations may continue to use  
the lisp reader as before, although writing a custom reader would be  
trivial with a well defined and simple message syntax.

-- Terje Norderhaug
   terje at in-progress.com

More information about the slime-devel mailing list