On 21 March 2011 11:29, Chas Emerick <cemer...@snowtide.com> wrote:
> The notion of "passing around Clojure data structures" does get watered down 
> because of the non-sexpr-nature of e.g. *out* and *err*, and it's all 
> message-oriented so as to support asynchronous evaluation from the same 
> client, but that's pretty much what nREPL does.  Expressions are sent, 
> results are printed and sent back.

That wasn't quite what I meant :)

You could use a Clojure data structure protocol (henceforth known as
CDSP) to send the just data you want evaluated by the REPL, e.g.

>>> (+ 1 1)
<<< 2

But that's probably too simplistic. Instead, you'd probably encase
messages in a map, e.g.

>>> {:id 1, :eval (+ 1 1)}
<<< {:id 1, :return 2}

Which would allow you to handle more sophisticated streaming stuff as well:

>>> {:id 2, :eval (do (Thread/sleep 1) (print "world"))}
>>> {:id 3, :eval (print "hello")}
<<< {:id 3, :out "hello"}
<<< {:id 3, :return nil}
<<< {:id 2, :out "world"}
<<< {:id 2, :return nil}

My point was more that network protocols should be designed in layers.
Take a streaming protocol like TCP, layer netstrings on top of it so
you have a safe way of passing fixed-length messages. Then use the
Clojure read-string and pr-str functions to encode data.

You then have a very basic protocol that allows you to communicate in
more complex data structures, like maps, vectors and lists, which you
can use as a basis for a more sophisticated protocol.

In essence, we want to build a compound network protocol out of simple
components. You don't have to use netstrings and Clojure data
structures to do it, but they seem like a good fit.

- James

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to