Skip to end of metadata
Go to start of metadata

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.

BuildProfilesIf 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?
BuildBugfix buildDo not have a process for building a bugfix version of Clojure.
BuildForkjoin version

It is hard to use the "best" version of forkjoin with Clojure.

  • CLJ-1221 - rebundling as an option
  • async executors (see table farther down the page for research on "best" version)
BuildDependency managementLightweight way to specify and use dependencies.
BuildClojure jar is too big

For some environments, size of Clojure jar (3.6 MB) is significant.

  • Elide meta (need profiles)
  • Eliminate the compiler for deployment
CompilerGrammars for macrosHand-written parsers are difficult to maintain and have poor error reporting - improve error messages with a parser grammar for macro destructuring
CompilerSlow start time

Clojure runtime is too slow to start

  • Lean runtime (umbrella page)
  • Delayed var loading
  • invokedynamic for delayed vars
  • Don't load the `user` ns
CompilerFaster invocation

Invocation of functions could be faster

  • invokedynamic - investigate if faster for protocols, multimethods, delayed vars, etc
    • may require dropping JDK 1.6 + upgrading ASM 5.0
  • Overloading IFn for long/double primitive invocation
CompilerSpecialization of functions

Want type-specific specializations of some functions (ex: math/numerics)

CompilerAOT scope

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 libParallel transducers

Transducers do not support multi-core evaluation like reducers

Core libKV transducers

Transducers lack special support for kv transducing functions like in reducers

Core libPrimitive transducersTransducers 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 libDestructuring 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.

CollectionsHAMT improvementsHAMT can use less memory, provide faster equality and iterators, etc. 
NamespacesImmutable namespaces

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.