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