C++0X Enhancement: Packaged Libraries
In a recent article Bjarne Stroustrup presented the evolution of C++ toward the 0X standard, and asked the C++ community for ideas regarding C++ enhancements. This is a proposal to add to C++ support for using packaged libraries, and a standardizing a library distribution format.
Consider a typical list of enhancements to the C++ libraries. Such a list could contain: a matrix data type, a graph data structure, image manipulation classes, a networking API, cryptography, GUI programming, sound processing, compression, a currency data type, and an arbitrary precision arithmetic library. We can then generalize this list into the following requirement: provide all useful elements available in the union of the Java 5 platform, Perl's CPAN modules, the PHP libraries, and so on. Of course, neither the initial list, nor its generalization stand much chance to affect C++0X. A more realistic solution would be to provide a platform for adding these facilities, and then leveraging the work of the open source community (like Boost) for the actual library implementations.
There are two requirements for providing the C++ community with a successful library repository: the standardization of the library distribution format, and some minimal support for using packaged libraries in C++ programs.
The standardization of the library distribution format should address the following issues:
- naming of packages,
- naming of namespaces,
- versioning,
- layout of the package contents (manifest, directory and file names), and
- package format (serialization and compression).
The linguistic support for using a packaged library in a program should be minimal. A preprocessor directive like
#import libraryname [version-specification]