The BSL (Basic Standard Library) package group contains various packages that provide platform-specific classes, meta-functions, defensive programming mechanisms, a framework for component testing, memory allocation protocols and algorithms, and a C++ standard library implementation.
The standard library implementation in BSL is where the BDE allocator model and defensive programming techniques were developed, tested and improved until they became part of Bloomberg’s production systems. As these techniques and designs move towards inclusion in future C++ standards, the implementations in BSL will be modified to conform to the versions adopted by the standards committee.
Note that the C++ standard library is implemented in the bsl namespace instead of the standard std namespace. This allow users to utilize both the native (toolchain provided) C++ standard library and the BDE provided C++ standard library in the same translation unit.
The BSL package group contains a number of packages, covering a wide range of functionality. They include:
- bslalg provides a variety of lower-level algorithms, comparisons, and traits.
- bsldoc documents key terminology and concepts used throughout BDE documentation. Note that the components in this package consist entirely of comments, no code.
- bslim provides implementation mechanisms for features that must have identical syntax and semantics in many disparate classes.
- bslma provides memory allocation and related proctor and handle objects.
- bslmf provides low-level “meta-functions” implementing “traits” and other useful properties of types, determined at compile-time.
- bsls provides the needed platform-independent definitions and utilities (with platform-specific implementations) so that the rest of the bsl library, and all conforming applications within the Development Framework, can be written in a truly portable, platform-neutral dialect of C++ — one having dependency on bsls, but on no other system-specific services. Among the issues dealt with in bsls are hardware, operating system, and compiler definitions, “endian-ness” and alignment of type representation in physical memory, bit-manipulation utilities, and a uniform interface to system services (e.g., timers).
- bslscm is a special source control management package containing only two components, bslscm_version and bslscm_versiontag. The first of these components is included by every other component in bsl, and provides versioning information for the package group. Users may use the bslscm_version facilities to query a particular bsl library for its version information. The second component defines macros that can be used for conditional-compilation based on bsl version information.
- bslstl provides an implementation of certain containers of the C++ standard library using the bslma memory allocation model, algorithms and traits in bslalg and meta-functions in bslmf.
- bsltf provides a set test types and utilities that operates on those types, which can help simplify, particularly for template, the implementation of test drivers.
BSL is developed as part of the larger BDE distribution, and its source code is located in the BDE repository on GitHub.
Comprehensive component- and class-level documentation for BSL can be found here.