No one vendor could possibly provide a complete inventory of interchangeable parts to satisfy the diverse needs of all branches of manufacturing. Two alternative strategies are possible. A vendor could target a single industry (like automobile manufacturing) and make parts for that industry alone. Or, a vendor could look at the common needs of all industries and provide only those parts with universal applicability. In deciding which software components to provide, we have chosen the second strategy. We call our components general-purpose because they can be used in virtually any application, from systems software (compilers, operating systems) to scientific and financial applications. Three examples of the kinds of general-purpose components we provide (to be illustrated shortly) are the String component, the Map component, and the Block component. We are certain that you will be able to use these regardless of your application domain.
Because our components are general-purpose,
you will not be able to build entire
applications from our components alone:
you must write additional, application-specific
However, our components will take care of many of the
most tedious and error-prone
programming chores, like string, list, and array manipulation.
As a result, you will
write less code, you will be able to focus more on your application
(and less on the infrastructure),
and you will make fewer programming errors.
As McIlroy wrote,
...systems based on components ought to [have]
considerably improved reliability
and performance, as it would become possible to
expend proportionally more effort
on critical parts of systems,
and also to avoid the now prevalent failings of the
more mundane parts of systems.