-
Notifications
You must be signed in to change notification settings - Fork 319
Home
BDE (BDE Development Environment) is a set of C++ software libraries as well as development tools and methodology. Originally developed at Bloomberg L.P., BDE is intended to form the foundation for large scale C++ software products.
BSL (BDE Standard Library), the lowest level BDE library, provides implementations for portions of the C++ standard library, particularly the container types, as well as a suite of system utilities, meta-functions, and algorithms needed to build such containers.
BDL (BDE Development Library) , the second BDE library currently provides concrete allocator implementations. This library is under active development and will eventually contain a collection of tools appropriate for a low-level library and application development.
BDE aims to provide libraries that meet superior standards in terms of their
design, documentation, and testing (see Mission Statement).
Every component (i.e., .h
/.cpp
file pair) provides thorough component-, class-, and
method-level documentation (see Online Library Documentation
, including a compilable example for using that type. Every component also
has a thorough test-driver that tests every public method of that component
through a comprehensive range of input
(see bslstl_map.t.cpp
).
These libraries, along with the tools and methodology that accompany them, are meant to enable developers to create their own C++ software that meets similar standards of quality.
BSL provides a finely factored collection of modules (or components) that form the foundation for cross-platform component-based development. The library culminates in the implementation of several standard containers that take advantage of the features of the rest of BSL. Some of the highlights of BSL include:
-
Support for runtime polymorphic memory allocators
- Provides more efficient application-specific memory-allocation behavior.
- Provides facilities for testing memory allocation.
- (see
bslma
)
-
Enhanced type trait support and trait-aware container facilities
- Provides for efficient move semantics (similar to to C++11 move-semantics)
- (see
bslmf
)
-
Support for defensive programming through a configurable assert facility
- Support for testing those defensive checks ("negative testing")
- (see
bsls_assert
andbsls_asserttest
)
-
A modular system for defining hash functions
- Based on C++ ISO Proposal N3980
- Enhances the C++ standard defined mechanism for defining hash functions
- See bslh
-
A facility for testing generic container instantiations with a range of troublesome types
- (see
bsltf
)
- (see
-
Implementations of basic atomic operations with flexible memory semantics
- (see
bsls_atomic
)
- (see
BDL is under active development, and will eventually contain a wide range of facilities needed for common development tasks. For example, date and time types, specialized containers, thread pools, event schedulers, and file system utilities. The current highlights of BDL include:
-
Value types and utilities for manipulating dates and times.
- Of particular note bdlt::Date, bdlt::Datetime, bdlt::CurrentTime
- See bdlt
-
Additional concrete implementations of the allocator interface defined in BSL
- (see
bdlma
)
- (see
-
Value types and utilities that support decimal floating point arithmetic (IEEE754-2008) (see
bdldfp
andbdldfp_decimal
)- These types are is useful where exact representations of decimal fractions are required (e.g., financial transactions).
The best place to get started is to read our introduction to building BDE and creating a
"Hello World"
application using that built library:
Some other introductory material includes:
- The list of platforms on which BDE is supported can be found here
- Introduction to BDE memory allocators
- Introduction to the physical organization of the libraries
- BSL and STL
- Introduction to BDE Coding Standards
One of the key elements of the BDE libraries is the extensive header
(i.e., component-level) documentation. Doxygen for BDE can be
found here:
Online Library Documentation,
although the documentation in the headers themselves is intended for
reading on its own (without doxygen
).
One of our goals in publishing BDE is to encourage others to use these tools and adopt them in their software development processes. In the next few weeks, we'll be making various community tools available, including discussion forums/mailing lists, continuous integration infrastructure, and we'll be answering BDE questions on StackOverflow to begin building a knowledge base to help new users of BDE get started with their projects.
In addition, we're excited to see what the community of developers who want to help improve and extend BDE can bring to the equation. If you are interested in contributing to BDE itself, see Contributing to BDE to get started.
To request an account for our phabricator instance, [https://review.openbloomberg.com], just ask on any issue or pull request.
Development of BDE began in 2001, and it has been in production use for over a decade. BSL is the lowest level BDE library, but as we review higher level libraries (ensuring they are up to date with our coding standards) additional libraries will be made available with an open-source license. Some features of these additional libraries include:
- Date, time, and calendar types.
- Cross-platform multi-threading & synchronization primitives.
- Efficient thread pools, event schedulers, and thread-safe container types.
- Network channel pools and session pools.
- Logging infrastructure.
Our immediate focus is an extended date (and time) facility along with additional memory-allocators, which we aim to provide in 2014.
If you have questions, comments, suggestions for improvement or any other inquiries regarding BSL or this wiki, feel free to open an issue in the issue tracker.