Building Scalable Libraries with cJ

Creating highly reusable software libraries is one of the primary software engineering goals. The ability of a library to be reused, however, depends crucially on the ease of customizing the reusable components. If customization is hard, the well-known library scalability problem by Biggerstaff, T.J. (1994) ensues: a domain contains n features, but these can produce an exponential (or super-exponential if order matters or features can be replicated) number of combinations. Hard-coding all combinations results in an unmaintainably large library. Offering features as components that are composed without any customization results in undesirable "bad-fit" solutions, either for reasons of performance or correctness.

[1]  Ted J. Biggerstaff,et al.  The library scaling problem and the limits of concrete component reuse , 1994, Proceedings of 1994 3rd International Conference on Software Reuse.

[2]  Dachuan Yu,et al.  Variance and Generalized Constraints for C# Generics , 2006, ECOOP.

[3]  Shan Shan Huang,et al.  cJ: enhancing java with safe type conditions , 2007, AOSD.