Almost every program makes extensive use of container types -- structures that hold a collection of values together.
Despite many programming languages offering a variety of implementations, most programmers stick to one or two, potentially leaving large performance improvements on the table.

We present Candelabra, a system for selecting the best implementation of a container type based on the individual program's requirements.
Using the DSL proposed in \cite{qin_primrose_2023}, developers specify the way a container must behave and what operations it must be able to perform.
Once they have done this, we are able to select implementations that meet those requirements, and suggest which will be the fastest based on the usage patterns of the user's program.

Our system is designed with flexibility in mind, meaning it is easy to add new container implementations, and operations.
It is also able to scale up to larger programs, without suffering the exponential blowup in time taken that would happen with a brute-force approach.

Our approach is able to suggest the fastest implementation in most of our tests, although further testing is required on a wider range of workloads.

We also investigate the feasibility of adaptive containers, which switch implementation once the size reaches a certain threshold.
In doing so, we identify several key concerns that future work should address.
