Elements of Design for Containers and Solutions in the LinBox Library
This work addresses usability and safety improvements for developers using the LinBox library, representing incremental design enhancements rather than fundamental algorithmic breakthroughs.
The paper tackles the challenge of making the LinBox exact linear algebra library safer and easier to use while maintaining its generic and efficient nature, resulting in a new container structure based on a 'founding scope allocation' model, a controller-plugin system for algorithm selection, and a benchmark architecture for user-friendly graphing and automated tuning.
We describe in this paper new design techniques used in the \cpp exact linear algebra library \linbox, intended to make the library safer and easier to use, while keeping it generic and efficient. First, we review the new simplified structure for containers, based on our \emph{founding scope allocation} model. We explain design choices and their impact on coding: unification of our matrix classes, clearer model for matrices and submatrices, \etc Then we present a variation of the \emph{strategy} design pattern that is comprised of a controller--plugin system: the controller (solution) chooses among plug-ins (algorithms) that always call back the controllers for subtasks. We give examples using the solution \mul. Finally we present a benchmark architecture that serves two purposes: Providing the user with easier ways to produce graphs; Creating a framework for automatically tuning the library and supporting regression testing.