Skip to content

Comparison of PiLisp and Clojure#

PiLisp is interpreted. Clojure is compiled.

PiLisp has been designed for use in smaller programs and systems.

PiLisp does not implement namespaces. As a convention, PiLisp uses a slash to denote conceptual namespaces, e.g., str/join or set/intersection.

PiLisp's immutable data structures are backed by the fast_immutable_collections library, not Clojure's implementations.

The Dart VM does not support multiple threads of execution. For this reason, PiLisp does not have any of Clojure's concurrency features. The atom in PiLisp is equivalent to a Clojure volatile.

The dart:mirrors library can only be used when running Dart programs via the Dart VM. For this reason, the core PiLisp language does not integrate it, and thus cannot provide ad hoc Dart reflection. The core PiLisp implementation does, however, generate PiLisp stubs for many Dart Core classes and methods. Evaluate (apropos-full "dart/") or review the generated Dart code to see what is available.

PiLisp calls keywords terms and supports writing them either with a leading colon or a leading dot, i.e. .a is equivalent to :a. Terms are printed in the colon form.

Destructuring is a powerful tool of thought. PiLisp supports destructuring in let bindings. By design, it does not support them in function signatures.

PiLisp metadata is supported only on top-level bindings. Use bindings to get a map of symbols to maps of metadata and the bound value.