List of PluginPlay Features
This page is intended to collect the major selling points of PluginPlay. This necessarilly is not a complete list; the complete list can be garnered by reviewing the list of merged pull requests on GitHub.
Fundamental Features
The features listed in this section essentially define an inversion-of-control framework. So while they have been available since version 1.0.0, their fundamental nature makes them almost assumed; nonetheless, we list them here for completeness.
Algorithms are written as modules, self-contained encapsulated units of code.
Interfaces defining how modules exchange data are defined via “property types”. Users can dynamically choose how to call a module by selecting from the property types it satisfies.
Property types are developed downstream of PluginPlay and may thus contain domain-specific data structures, i.e., no need to serialize or use a restricted set of types.
Module distribution is facilitated by creating packages called “plugins.”
Plugins can be loaded at runtime to dynamically change the features of the codes built on PluginPlay.
Dependency injection. PluginPlay allows modules to use other modules without either module knowing of the other’s existence, so long as their property types are compatible.
Features available in PluginPlay 1.0.0
Memoization of the call graph.
RocksDB as a cache backend.
Ability to automatically generate reStructured Text documentation for modules.
Annotated module bounds checking.