Dependency Injection for Programming by Optimization
  Programming by Optimization tools perform automatic software configuration
according to the specification supplied by a software developer. Developers
specify design spaces for program components, and the onerous task of
determining which configuration best suits a given use case is determined using
automated analysis tools and optimization heuristics. However, in current
approaches to Programming by Optimization, design space specification and
exploration relies on external configuration algorithms, executable wrappers
and fragile, preprocessed programming language extensions.
  Here we show that the architectural pattern of Dependency Injection provides
a superior alternative to the traditional Programming by Optimization pipeline.
We demonstrate that configuration tools based on Dependency Injection fit
naturally into the software development process, while requiring less overhead
than current wrapper-based mechanisms. Furthermore, the structural
correspondence between Dependency Injection and context-free grammars yields a
new class of evolutionary metaheuristics for automated algorithm configuration.
We found that the new heuristics significantly outperform existing
configuration algorithms on many problems of interest (in one case by two
orders of magnitude). We anticipate that these developments will make
Programming by Optimization immediately applicable to a large number of
enterprise software projects.
