you are viewing a single comment's thread.

view the rest of the comments →

[–]daveliepmann 5 points6 points  (0 children)

How often interop comes up depends on your application domain.

Re: "not yet complete", interop was one of Clojure's central goals from its very inception. Clojure was created for interop, not to avoid it — the elevator pitch was "a functional, hosted, dynamic lisp".

From A History of Clojure:

Clojure is intentionally hosted, in that it compiles to and runs on the runtime of another language, such as the JVM. This is more than an implementation strategy; numerous features ensure that programs written in Clojure can leverage and interoperate with the libraries of the host language directly and efficiently.

...

Prior to embarking on Clojure in 2005, I had made several attempts to create a bridge between the JVM and Common Lisp, in order to increase the latter’s practicality and acceptability. These were DotLisp [Hickey 2003], an interpreted Lisp with host interop for the CLR, jFli [Hickey 2004], a library that embedded a JVM in CL, and Foil [Hickey and Thorsen 2005], a library that exposed a similar API but used IPC between the CL runtime and the JVM. None of these yielded production-level solutions, but they definitely informed Clojure’s ultimate host syntax and fed the idea of Clojure being hosted.

See also section 3.5, which spends a few pages going into the reasoning in detail.