Potential features to consider for future releases
Note: some of the names below are solution-y but they are really intended to be primarily a handle for the problem.
|Build||Profiles||If producers make multiple artifacts (for example, with and without direct linking) of a project (either Clojure, or something else), how do we make this feasible to work with in consumer projects?|
|Build||Bugfix build||Do not have a process for building a bugfix version of Clojure.|
It is hard to use the "best" version of forkjoin with Clojure.
|Build||Dependency management||Lightweight way to specify and use dependencies.|
|Build||Clojure jar is too big|
For some environments, size of Clojure jar (3.6 MB) is significant.
|Compiler||Grammars for macros||Hand-written parsers are difficult to maintain and have poor error reporting - improve error messages with a parser grammar for macro destructuring|
|Compiler||Slow start time|
Clojure runtime is too slow to start
Invocation of functions could be faster
|Compiler||Specialization of functions|
Want type-specific specializations of some functions (ex: math/numerics)
Transitive AOT compilation often compiles more than a user would like - this is both slow and creates situations where libraries re-export compiled classes it shouldn't, thus creating downstream problems.
|Core lib||Parallel transducers|
Transducers do not support multi-core evaluation like reducers
|Core lib||KV transducers|
Transducers lack special support for kv transducing functions like in reducers
|Core lib||Primitive transducers||Transducers and sequence transformations on primitive input collections don't support application of functions that retain primitive-ness. As a result, any primitive transformations typically need loop/recur type solutions.|
|Core lib||Destructuring spec|
Destructuring contains a number of ambiguous corner cases (wrt the spec), does not validating well, produces confusing errors, and has few tests.
Possibly related to grammars for macros.
|Collections||HAMT improvements||HAMT can use less memory, provide faster equality and iterators, etc.|
Mutable namespaces cause some loading performance issues (could just be pulling in persistent data structure instead of traversing and copying lots of stuff). They are also problematic in the face of loading errors, etc.