New Issue: How should we have different implementations of data structures with similar interfaces?

18096, "e-kayrakli", "How should we have different implementations of data structures with similar interfaces?", "2021-07-22T23:22:54Z"

Take list, for example. We have vector, unrolledLinkedList and linkedList at different locations in our repo all with similar interfaces (or at least they all want to have a similar interface as list).

Q1: Should we have different implementations of similar data structres in the standard libraries to provide a wider range of choice when it comes to complexities?

If so,

Q2: What does the general module structure look like:

  1. A generic type that has default implementation, but the users can swap different implementations to get different performance behavior using a param field.
  • It's a burden for the maintainer of the type as new implementations needs to be added to the main type's implementation.
  • Different implementations might have slightly different interfaces
  1. Entirely separate types implementing different data structures. Potentially all implementing the same interface(s).
  • Are we openning doors for having 20 different data structures to maintain in the standard libraries? (Is it a bad thing?)