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.