Marc Mutz
14 results
In 2019, I optimized QStringList::removeDuplicates() by using std::pmp::unordered_set with a std::pmr::monotonic_buffer_resource, when available. The class that I wrote to encapsulate this optimization has since been re-implemented three times. The latest iteration has recently landed in KDToolBox. If you have code that looks a bit like this: then you should read on. Before my change, the […]
After four months of intensive development work, I am happy to announce that the first QStringTokenizer commits have landed in what will eventually become Qt 6.0. The docs should show up, soon. While the version in Qt will be Qt 6-only, KDAB will release this tool for Qt 5 as part of its KDToolBox productivity […]
The last blog post in this series described how to use string-views. This post is about how to design one. In particular, it's about QStringView's constructors. They evolved through a rapid succession of changes. These changes either fixed ambiguities between QString and QStringView overloads, or improved performance. And they all have the same solution: std::enable_if, […]
After two months of intensive reviews, discussions, fixes, and stripping down the initial commit, feature by feature, to make it acceptable, I am happy to announce that the first QStringView commits have landed in what will eventually become Qt 5.10. Even the docs are already on-line. This is a good time to briefly recapitulate what […]
QStringView Diaries: Advances in QStringLiteral
How QStringView Development Also Improves its "Competition"
This is the first in a series of blog posts on QStringView, the std::u16string_view equivalent for Qt. You can read about QStringView in my original post to the Qt development mailing-list, follow its status by tracking the "qstringview" topic on Gerrit and learn about string views in general in Marshall Clow's CppCon 2015 talk, aptly […]
A Race is a Race is a Race is UB
An example of the difference between int, volatile int, and std::atomic
15 February 2017
In the last days, I was once again trying to convince fellow programmers that there's no such thing as a "benign" data race. This is a recurring theme, in particular fueled by the docs of MSVC and Intel x86, which basically seem to say "you don't need atomics here". I perused the excellent papers Benign […]
In this article, I will take a look at one of the fundamental concepts introduced in Alex Stepanov and Paul McJones’ seminal book "Elements of Programming" (EoP for short) — that of a (Semi-)Regular Type and Partially-Formed State. Using these, I shall try to derive rules for C++ implementations of what are commonly called "value […]
Quick: When you design C++ APIs, when and how should you use pair and tuple? The answer is as simple as it is surprising: Never. Ever. When we design APIs, we naturally strive for qualities such as readability, ease-of-use, and discoverability. Some C++ types are enablers in this regard: std::optional, std::variant, std::string_view/gsl::string_span, and, of course, […]
Q_FOREACH (or the alternative form, foreach) will be deprecated soon, probably in Qt 5.9. Starting with Qt 5.7, you can use the QT_NO_FOREACH define to make sure that your code does not depend on Q_FOREACH. You may have wondered what all the fuss is about. Why is there a continuous stream of commits going to […]
Are you a victim of premature pessimisation? Here’s a short definition from Herb Sutter: Premature pessimization is when you write code that is slower than it needs to be, usually by asking for unnecessary extra work, when equivalently complex code would be faster and should just naturally flow out of your fingers. Despite how amazing […]
Is your code burning a lot of cycles hunting for strings? Maybe you need to find the proper charset nestled in a chunk of HTML, or look for the dimensions in an XPM image file, or locate the email attachment boundaries in a block of MIME. If you string search a lot and performance is […]
QRegion will be iterable in Qt 5.8
20 April 2016
A novel solution to an old problem The QRegion class specifies a clip region for a painter. You can also query a QPaintEvent for the region() to limit the paint operations necessary in partial repaints. A region can be anything from a simple rectangle to a bitmap mask, but virtually all code that inspects a […]
Qt is a native library at the heart. As a native (C++) library, it already outperforms most higher-level language libraries when it comes to startup performance. But if you're using native languages, you usually do so because you need to get the most out of the available hardware and being just fast may not be […]
by Marc Mutz, former employee at KDAB, at Meeting C++ 2014 Abstract: C++11 is now widely available, and so is C++14. Like for users of the language, C++11/14 is a new language for C++ library writers, too. In this talk, we will walk you through the new C++ features that impact class design. We will show guidelines that […]