An implementation of Clojure in Common Lisp that enables interoperability between the two languages.
Cloture is an implementation of Clojure that runs within Common Lisp, designed primarily to allow Common Lisp programs to use Clojure libraries. It reads Clojure code with the Lisp reader and maps Clojure namespaces directly to Lisp packages, focusing on seamless interoperability between the two ecosystems.
Common Lisp developers who want to integrate Clojure libraries into their projects, and Clojure developers interested in leveraging Common Lisp environments or libraries.
Developers choose Cloture for its bidirectional interoperability, allowing direct calls between Clojure and Common Lisp code, and its use of FSet's persistent data structures to implement Clojure collections efficiently within Lisp.
Clojure in Common Lisp
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Cloture enables seamless calls between Clojure and Common Lisp, allowing quoted lower-case names in Lisp and uppercasing in Clojure, as detailed in the interoperation section.
It uses FSet's seqs, maps, and sets to implement Clojure vectors, maps, and sets, providing efficient persistent data structures, though with acknowledged hacks that might affect other FSet usage.
Includes a Clojure REPL via (cloture:repl) for interactive development, though the README notes that printing is still mostly Common Lisp style, not Clojure-style.
Supports .cljc files with :cl reader conditionals, facilitating cross-platform code that targets Common Lisp, as mentioned in the features and setup instructions.
The project is explicitly in very early (pre-alpha) stages, missing key features and not suitable for production, limiting its reliability and completeness.
Calling Clojure functions from Lisp requires quoting with pipe characters (e.g., |clojure.core|:|cons|), adding overhead and reducing code readability compared to native calls.
Cloture's integration with FSet involves hacks that could potentially break other programs using the same library, a risk acknowledged in the 'A note about FSet' section.
Clojure's concurrency primitives like atom and future are only planned, not yet implemented, as stated in the Clojure vs. ClojureScript comparison, hindering concurrent programming use cases.