BDE 3.69.0: Production Release¶
Schedule¶
The BDE team is pleased to announce that the BDE 3.69.0 production release was completed on Tuesday, Dec 22, 2020.
BDE 3.69.0 Highlights¶
Introducing fast open-addressed unordered map and set containers¶
This release introduces the bdlc_flathashmap
and bdlc_flathashset
components, which provide bdlc::FlatHashMap
and bdlc::FlatHashSet
,
respectively. These containers are derived from Google’s “Swiss Table”
unordered container implementation, and use SSE instructions to optimize common
operations. As such, use of these components is recommended for Intel platforms
only (i.e., Linux and Windows, and pre-ARM Macs); on platforms using other
processors (i.e., Sun and AIX) these components may have slower performance
than the corresponding standard container. Although these open-addressed
unordered containers do not provide a “bucket” interface, they are otherwise
viable replacements for bsl::unordered_map
and bsl::unordered_set
. For many
applications, these containers will use significantly less memory (on all
platforms) and be significantly more performant (again, on Intel platforms
only) than bsl::unordered_*
. Given the Intel-only performance caveats, it is
highly recommended that you benchmark before using these new facilities in
production, and please share any optimized benchmark results with the BDE team.
Guarding Against Mixing C++ Versions¶
The bsls_libraryfeatures
component now defines a “link-coercion” symbol that
prevents linking a translation unit (that includes the bsls_libraryfeatures.h
header, possibly indirectly) built against one version of the C++ Standard with
a translation unit (also including the bsls_libraryfeatures.h
header) built
against another version of the Standard. For example, attempting to link
objects built with C++14 with those built with C+++17 will result in a
link-time failure.
Because BDE supports a variety of features that are enabled depending on the C++ version for which code is built, it is generally not safe to link code built with one version of C++ with code built with another version. For example, in C++11 there are move constructor signatures, whereas in C++03 there are not, and linking code that views the set of constructors for a type differently is an ODR violation. The link-coercion symbol that enforces this is meant to provide users a single, easy-to-comprehend link-time error, rather than having bugs potentially manifest at runtime in ways that are difficult to diagnose.
Introducing facilities for using a PCG PRNG¶
The bdlb_random
component now offers a pseudo-random number generator
employing the PCG (permuted congruential generator) method. The PCG technique
employs the concepts of permutation functions on tuples and a base linear
congruential generator, which efficiently produces high-quality pseudo-random
numbers. Details of the algorithm can be found here:
http://www.pcg-random.org. The new PRNG can be invoked using
Random::generatePcg
, and is implemented in the bdlb_pcgrandomGenerator
component, which can also be used directly.
Generating GUIDs more efficiently¶
The bdlb_guidutil
component now provides a series of
GuidUtil::generateNonSecure
methods which generate GUIDs using the new
bdlb_pcgrandomgenerator
component, which provides higher-performance
alternatives to the existing GuidUtil::generate
ones. Note, however, that
while these functions generate high quality random numbers for GUIDs, they are
not cryptographically secure.
ball::StreamObserver
Supports Log Formatting¶
This release introduces support for log formating in ball::StreamObserver
.
The formatting functor can be registered with the ball::StreamObserver
using
setRecordFormatFunctor
method:
ball::StreamObserver observer(&bsl::cout); observer.setRecordFormatFunctor(ball::RecordStringFormatter("\n%s %m"));
Fixed requests: 3.69.0¶
Summary |
---|
Release BDE 3.69.0 |
Correct usage of allocator in ball::StreamObserver. |
BSLS_ANNOTATION_NORETURN does not have fallback support for pre-c+ |
bdlc_flathash[map|set]: add performance caveats to the doc |
Correct median calculation in bdlc_flathashset and bdlc_flathashmap |
Suppress TD errors for baejsn_Decoder/EncoderOptions. |
New indexing of buffers in ‘bdlbb::Blob’ |
bdld::ManagedDatum deep-copies references |
Please enhance exception string to better facilitate troubleshooting |
Replace bde uses of CONSTEXPR_RELAXED with CONSTEXPR_CPP14 |
Fix printing for unsigned char for bslim_printer |
Add cmake target to install unqualified symlinks |
Add library-wide linker coercion symbols |
Make log format in stream observer configurable |
bdlb::GuidUtil::generate not handling getRandomBytesNonBlocking erro |
Reduce cost of one-off guid generations |
Testing dpkg distribution support - Bus error extending Journal |
bdlcc_singleproducersingleconsumerboundedqueue case 11 failure |
Implement flat hash map |