clojurecidernrepl

Why BENCODE has been used for transporting clojure code to nrepl in CIDER?


Why can't we simply convert Clojure code to string and send it over TCP and evaluate on the other side(nrepl)?

For example : This is a hashmap {"foo" "bar", 1 "spam"} whose BENCODE encoding is d3:foo3:bari1e4:spame.

If we convert it to string -> {\"foo\" \"bar\", 1 \"spam\"}

and evaluate on the other side instead of using BENCODE as shown below.

(eval (read-string "{\"foo\" \"bar\", 1 \"spam\"}"))
; ⇒ {"foo" "bar", 1 "spam"}

I am new to the Clojure world. This might be a stupid question but anyway.


Solution

  • For people looking for the answer, read the # Motivation section in https://github.com/clojure/tools.nrepl/blob/master/src/main/clojure/clojure/tools/nrepl/bencode.clj

    This is very well written.