The novelty in this application of reuse technology to low-level building blocks such as lists, stacks, queues, trees, and sets resides in a standardized interface across all data types, which is organized according to well-defined layers, each taking advantage of lower-level components. This approach enables the programmer to experiment with various implementation variants, conveniently controlling such aspects as storage management and consistency checking. For each abstract data type, the authors present detailed information about its purpose, variants, available operations, and implementation decisions. They describe a tool needed to guide the user through the selection of variants; this tool controls the exponential explosion through the combination of parameters and generates an Ada generic package. A deep understanding of Ada is required in order to fully exploit the proposed concept.
The authors also propose a process to guide the user in the proper selection of components. They dedicate a chapter to a file compression system that illustrates the proposed methodology. Some comparisons between C++ and Ada are made: the relative merits of the two are presented, but as the authors are still implementing a similar library in C++ and the current catalogue does not cover concurrency, it is too early to draw definite conclusions.
The book illustrates the various data types, their location within the library hierarchy, and some implementation details well, with good diagrams. Either a floppy disk or information on how to obtain the many Ada sources listed in the book would have been useful, however. The absence of an index does not cause any trouble, because the well-designed table of contents provides adequate information. I recommend this book as a complement to an advanced computer science course in data structures or as advanced support for computer scientists wishing to develop libraries of reusable code.