I’m familiar with Clojure and understand the usefulness of symbolic exprs. What I don’t understand is shows up in situations that seem very unrelated to lisp / scheme / mini-interpreters.
If you’re asking specifically why Janestreet’s Base/Core libraries use sexp everywhere, it’s because they basically use it as the default data serialization format. See the Data Serialization with S-Expressions chapter in Real World OCaml.
Edit: And if you want to work with Base/Core, you will probably end up sprinkling @@deriving sexp over many of your types as well. Many of their functors require it, and many other things (Map, Set, etc) will work only with the sexp converters, and the deriving sexp is the easiest way to get the functionality.
S-expressions being strongly associated with lisps is basically a historical accident. Leaving aside Jane Street’s particular uses of them, they are a useful approach to all kinds of data interchange and symbolic representation tasks.
I don’t think I ever contributed directly to cider-mode? But then, that would have been a long time ago, so who knows.
I posted about my experience and general practice with OCaml vs. typical Clojure/lisp “repl-driven” styles some months ago that probably answers your other questions: What's your development workflow? - #8 by cemerick
You did contribute directly to CIDER! I remembered seeing a CIDER PR from you and I traced it back to Feb 2014 (see Commits · clojure-emacs/cider · GitHub).
@cemerick@bbatsov : Watch out, this might get you guys cancelled in 2030:
Why did you migrate from Clojure to … eventually Rust ?
For me it was the lack of a type system: (1) I wanted to understand datashapes without having to run the code and (2) I wanted dumb errors caught at compile time and (3) I hated writing unit tests for things a HM type system could catch.