Articles & Books

C++23’s New Fold Algorithms -- Sy Brand

If you want to find out more about the std::ranges::fold_* algorithms in C++23, here's a new post for you.

C++23’s New Fold Algorithms

By Sy Brand

From the article:

C++20 added new versions of the standard library algorithms which take ranges as their first argument rather than iterator pairs, alongside other improvements. However, key algorithms like std::accumulate were not updated. This has been done in C++23, with the new std::ranges::fold_* family of algorithms.

Announcing Meeting C++ 2023

Today this years edition of the Meeting C++ conference has been announced:

Announcing Meeting C++ 2023

by Jens Weller

From the article:

This years Meeting C++ conference will be held in Berlin on the 12th - 14th November!

Like in the previous year, we will be hosting 3 tracks on site and plan for a prerecorded online track. The online part also will include live streams from all onsite talk tracks.

Tickets are available via event brite...

 

Layers -- Rainer Grimm

The layers pattern splits a task into horizontal layers. Each layer has a specific responsibility and provides a service to a higher layer.

Layers

by Rainer Grimm

From the article:

The Layers Pattern is an architectural pattern that helps, according to the book "Pattern-Oriented Software Architecture, Volume 1", to bring structure into the mud.

Although not specified, most layered architectures consist of three or four layers. Each layer is independent of the other layer. In the pure version, a layer can only access its layer below. A layer can not access its upper layer because it would create additional dependencies and complicates the control structure. Additionally, another application cannot easily use a layer that depends on an upper layer. A layer often provides its functionality by implementing the Facade Pattern. The Facade Pattern provides a simplified interface to a complex system.

C++20 Lambda Expressions, Non-type Template Parameters, Constraints and Concepts -- Gajendra Gulguli

How to write a class and fuction template declaration which uses functions and lambda expressions as non-type template parameter.

C++20 Lambda Expressions, Non-type Template Parameters, Constraints and Concepts

by Gajendra Gulgulia

From the article:

In this article I will explain how to write a class and fuction template declaration which uses functions and lambda expressions as non-type template parameter.

Function as Non-Type-Template-Parameter ( NTTP henceforth) looks like below in class and function template as of C++17.

template<auto FunctionType> class Foo{
// ...
};

template<atuo FunctionType>
void foo();

Pipes-and-Filters -- Rainer Grimm

The Pipes-and-Filters architecture pattern describes the structure of systems that process data streams.

Pipes-and-Filters

by Rainer Grimm

From the article:

The Pipes-and-Filters pattern is similar to the Layers Pattern. The idea of the Layers Pattern is to structure the system in layers so that higher layers are based on the services of lower layers. The Pipes-and-Filters naturally extend the Layers Pattern, using the layers as filters and the data flow as pipes.

Is boyer_moore_horspool faster then std::string::find?

The last blog post by Julien Jorge made me wonder if the string searchers could be faster here.

Is boyer_moore_horspool faster then std::string::find?

by Jens Weller

From the article:

On Wednesday I've read an interesting blog post by Julien Jorge on Effortful Performance Improvements, where it is shown how to improve an replace function which runs replacements on a string. Its part of a series on performance and improving a code base, you should go read all of them!

When reading the post, and seeing the two implementations, one short and simple and the other longer and more complicated - but faster - I wondered is there a faster way? Julien already has shown that his newer function beats his old function which uses std::string::find in performance. I've veryfied that, and then started to refactor a copy of that slower function with a different approach using the string search algorithm boyer_moore_horspool...

 

What do number conversions cost?

Exploring how much number conversions from string cost you and how caching helps

What do number conversions cost?

by Jens Weller

From the article:

And so the devil said: "what if there is an easier design AND implementation?"

In the last two blog posts I've been exploring some of the ways to implement a certain type that has a string_view and holds a conversion to a type in a variant or any. And my last blog post touched on conversions. And that made me wonder, what if I did not have a cache in the type for conversions? The memory foot print would be much smaller, and implementation could be simple to convert in a toType function on demand. This then would essentially be a type that holds a string_view, but offers ways to convert this view to a type. Adding a cache to hold the converted value is in this case not necessary, as this is done on demand.

C++20 Formatting Library, Parts 1. 2 and 3 -- Gajendra Gulgulia

1*YoSAmfIDl_BLrT70dHAe5Q.pngThe first three parts are live:

C++20 Formatting Library

by Gajendra Gulgulia

Part 1: Setup and Basics

Part 2: Width, Fill and Alignment

Part 3: Sign Specification

From the lead article:

At the time of writing this series, the header format is not yet integrated into latest gcc or clang compiler. According to reference the only two compilers that have so far implemented the standard text formatting libraries are clang-14* and msvc 19.29. Due to limitations in my personal computer, I’ll therefore be using the fmt library on which the standard string formatting library is based. When the compiler support is released, the token fmt::format can be replaced with std::format and the examples in the series should work as it is. ...

Effortless Performance Improvements in C++: std::vector -- Julien Jorge

Screenshot_2023-03-09_070806.jpgPart the third:

Effortless Performance Improvements in C++: std::vector

by Julien Jorge

From the article:

This is the third post in the series about effortless performance improvements in C++. Check the first post to get the full story!

Last time we switched from std::map to std::unordered_map and got 30% performance improvements. After these changes we observed that the tokenize function was a top hotspot, mostly due to std::vector::push_back. How can we improve the performance of this function? ...