Problem

Clojure today exists at a balance point between performance and dynamic flexibility. Some users would be willing to sacrifice dynamic features to gain more performance. Other users would be willing to sacrifice performance to gain better development error messages or debugging. The problem we aim to solve is to alter the Clojure build such that we can produce alternate versions of Clojure that are useful to smaller audiences while retaining Clojure as it is today.

Example builds we may want to produce (examples):

 

VariantDescriptionDirect linkingLazy varsMetadataDev assistance
devFor developmentOffOnFullOn
dynamicFor dynamic production useOffOnIntermediateOff
staticFor static production useOffOffMinimalOff
experimentalExperimental compiler features????

Constraints 

Clojure users:

Build:

Integration / release infrastructure:

Compiler:

External builds

Builds that use Clojure may also need to make these kinds of compiler choices to produce their own build profiles. 

It would be useful to produce a guide on how to enable combinations of compiler options to produce builds of different flavors for libraries with the common build tools.

Research

Maven coordinate options

Maven custom assembly

Boot

Custom script (ant, make, etc)