January 6, 2019

What is C++ ?

These past few weeks have been quite difficult for me. I have therefore not followed closely the ongoing discussions about C++, ranges, game developers and iota. I’m afraid my current outlook on things is rather cynical and I’ve been told I might be too assertive and opinionated. So, rather than another exercise in quixotism, or a pointless opinion on how best name a function that creates a sequence, let me ask a few questions. Read more

December 6, 2018

Towards Better C++ Modules - Part 2: Modules naming

In case you have been napping, in the last installment we talked about modules mapping, and so now we must talk about modules naming. You see, modules have names and names are hard. In this case, names serve to identify uniquely each module used through the program. The end of this article proposes to govern module naming through an official WG21 standing document and I would love your opinion. But be patient! Read more

November 26, 2018

Towards Better C++ Modules - Part 1: Modules mapping

In this blog post, we will talk about modules mapping. Modules mapping is a mechanism by which is a module name is associated with the source file that defines that module’s interface. A module is closed and self-contained. Which mean that for every module name there must exist one and only source file defining that module. Module mapping is not useful to the compiler per-say. By the time the compiler encounters an import declaration, the module binary interface must exist and be known to the compiler. Read more

November 25, 2018

RangeOf: A better span

I don’t like span. Since that article was posted, the committee improved span quite a bit by removing operator== and making it’s size() consistent with that of vector after a lot of discussions. And I mean a lot. What is span: 30 seconds refresher If you have N T laid out contiguously in memory, you can build a span<T> over them. Span being a value type you can move it around, copy it and so forth. Read more

November 16, 2018

San Diego Committee Meeting: A Trip Report

As I left Rapperswil earlier this year, I said very firmly that I would not go to the San Diego Meeting. Crossing an ocean to work on C++ 12 hours a day for a week is indeed madness. And so naturally, I found myself in a San Diego hotel straight from the 60s, to do some C++ for a week. With the exception of the author of this blog, all people there are incredibly smart and energetic, and so a lot of great work was done. Read more

October 31, 2018

Modules are not a tooling opportunity

C++ Modules are going through the standardization process and current plans would have them merged in the C++ Standard in time for C++20. They are a great language feature, offering a number of benefits over headers They feel more modern They are much faster to parse They provide protections against macros They provide some protections against ODR violations. I really can’t wait to be able to replace headers with them in my code bases. Read more

October 29, 2018

Translation units considered harmful ?

Let say you have some struct square you want to compute the area of. struct square { int width; } You could of course do that: int area(square s) { return s.width * s.width; } But, your friend Tony told you to use more functions, so instead you do that int area(square s) { return width(s) * width(s); } int width(square s) { return s.width; } area being the function you really care about it is defined first - after all, code reads from top to bottom. Read more