WG21 in my own backyard: Belfast trip report

November

November turned into a heavy travel month when I agreed to speak at both C++ Russia in St Petersburg and Meeting C++ in Berlin, either side of the Autumn WG21 committee in Belfast. I took what some considered to be “quite a risk” with St Petersburg: the date straddled the Brexit date, and I would be accompanied by my wife whom the organisers graciously agreed to pay to accompany me. She travels with an Irish passport, so the idea of both of us safely returning to the country immediately after a change to border law seemed potentially hazardous.

Of course, Brexit was again postponed, but this concern also sat with many of the WG21 delegates when considering their travel plans: many flew to Dublin and took a coach to Belfast. Nonetheless, opening plenary on Monday morning was full as we started going through the motions. Since we were in the UK, my national body, the BSI C++ panel, was well-represented by upwards of 20 delegates, many of whom were attending for the first time.

My first meeting was in Toronto, where we started work on C++20, and this was my first meeting at the other end of the process, resolving national body comments. The four working groups were focused on resolving issues raised by individual national bodies, which are composed of C++ experts who don’t all necessarily attend the committees. There are two meetings dedicated to fixing these at the end of each cycle; Belfast was the first.

While the working groups were processing the comments, the study groups continued with C++23 issues. Although I had chosen to spend most of my time in LEWG and the rest of the time defending my papers, I found myself pulled towards SG18, the incubator group for LEWG, known as LEWG-I and spent most of the week there maintaining quorum, considering new proposals and occasionally scribing.

The authoritative trip report remains that posted on reddit, so I shall focus more on my papers and those that piqued my interest. I have three papers in progress, the 2D graphics proposal, the audio proposal and the linear algebra proposal. All were reviewed during the committee. Those of you interested in the ring buffer proposal, I haven’t forgotten about it: it may progress during the development of the audio proposal.

Day one

I started in LEWG, where new policy was formed relating to how things are done. This is a feature of LEWG life. Of particular interest to me was expanding the rights described in SD-8, a standing document which warns users of the language what the committee reserves the right to do. So, for example, you are entirely at liberty to add identifiers to the std namespace, but the committee reserves the right to define symbols which are spelled the same as your identifier but which have completely different meanings. The moral remains “stay out of the std namespace”.

After lunch the first linear algebra review took place. There are two papers: P1385, the syntax paper I am co-authoring with Bob Steagall, which reserves some identifiers and describes operation for linear algebra, and P1673, the BLAS paper which seeks to wrap BLAS in a C++ interface. All review is good review, and although the papers were forwarded by SG6 to LEWG at the last meeting in Cologne it was good for everyone to keep track of progress.

The committee took place in a hotel where many of us were staying, so we gathered in the bar after business to catch up with each other. The committee resembles the tennis grand tour, with many familiar faces travelling the globe from city to city.

Day two

I spent the entire day in LEWG-I. The schedule was to get through the linear algebra papers in the morning, and then move on to low-level file IO in the afternoon. Both of these topics interest me greatly: besides linear algebra, one of my projects at Creative Assembly on Total War is our virtual file system which copies data from offline storage into the process.

We were rather defeated though: we only made it through the BLAS paper but as a result it was forwarded to LEWG. We were short on time so we moved on to std::breakpoint, which as you might guess is a proposal to allow inserting breakpoints into code such that the running programs is suspended and a debugger may be invoked. We considered other names: I suggested std::pause which was roundly dismissed. break is already a keyword, so that’s not feasible. Naming is hard.

After lunch we took a look at P1883. Niall Douglas is attempting to improve standard file IO: at the moment we have fstream which fails on the issue of separation of concerns. It bundles together file IO, the filesystem and formatting into a single entity, rather than making the concerns composable. This was an exhausting pair of sessions. Niall is an excellent presenter and took us through a walkthrough of his file_handle proposal. There was SO MUCH TO LEARN though; I only work on Windows and my knowledge of POSIX is sketchy at best. Any proposal has to accommodate all the targets and be implementable everywhere, a costly lesson I’m learning while trying to work out how to implement host input for 2D graphics.

My colleague Duygu Cakmak was attending for the first time. She truly grasped the effort required to build the standard. We stepped out for supper before the evening session and commiserated about how tiring this was. The day wasn’t over though: the evening session was about exception performance measurement, a consistent pain point over the past few years to the committee. Ben Craig had interesting data to present about the cost of being exception safe.

Day three

I did some scribing on Wednesday morning in LEWG-I. Everyone should try it: the chair was tipping scribes with Nvidia rulers, one of which now has permanent residence in my satchel. It’s easier than it seems, and it’s an excellent way of focusing your attention on a particular paper.

In the afternoon we continued with file_handle and completed the paper: three sessions well spent. Do take a look at P1883 and consider what is coming down the tracks towards us. Bob and I were also offered review in LEWG-I of P1385 and got excellent additional feedback which we can improve the paper with. I’m looking forward to advancing the paper further in Prague in February.

There is a problem on the horizon: the size of the C++23 backlog in LEWG. I heard numbers being bandied around suggesting there were 80 papers already in the queue. I don’t know the precise number but getting a paper out of LEWG-I and into LEWG does not mean we can expect linear algebra to be ready for the end of next year. However, our plan is to continue improving our implementation and make it available to Compiler Explorer. We also recruited a BSI delegate, Antony Peacock, to write a small matrix customisation using the SIMD proposal; he was introduced to a relevant Intel delegate who happened to be in the room at the time. The committee is the best place for C++ networking bar none!

A few of the BSI delegation went out to dinner: there were over 20 of us at this committee, the biggest so far. I had a blue steak which I came to regret…

Day four

History does in fact repeat itself, and as in Jacksonville 2018 I fell ill, although this time seemingly with food poisoning. This was rather unfortunate, since this was the day set aside for 2D graphics and audio. More precisely, SG13 met in the morning but I was only able to make the second session where we reviewed the audio proposal. This is going well: we hope to put this into Boost during the standardisation process.

My co-author on the 2D graphics proposal kept me up to speed though: this revision (R10) contains more detailed feedback from critique papers and some corrections. We have a text API now and have “only” to sort out cross-platform input, as described above. I hope to have this done for Prague, although Varna in June seems more likely since it is a mere nine weeks to the Prague mailing deadline.

These things really do rush up on you.

Day five

SG14 met on Friday morning. We spent a few minutes looking at linear algebra progress but since this has already left the group, this was more of a checkup. The meat of the session was affinity and executors, topology discovery for heterogeneous computing and fibers without a scheduler. Chunky stuff, quite different from the rest of my week.

In the afternoon SG19 joined us and we looked at some simple statistical functions and a graph data structures proposal. These are right up my mathematical street and were warmly welcomed by the room.

I returned to a LEWG-I/SG6 joint session to hear Chris Di Bella defend a paper about a concept design for the numeric algorithms. SG6 were meeting in two rooms simultaneously, a first I’m sure, but entirely appropriate for the group: reality is ours to describe, after all. This is a great paper attempting to describe concepts like magma, semigroup, monoid and so on. It led to my favourite poll of the week, where we had to decide on a name for the zero_element, which when applied to another element in a field produces itself (think of multiplication by zero). zero_element was deemed unfit because it’s not an element of a container, annihilating_element was similarly unpopular, so we ended up deciding on annihilator. I am delighted with this name, although the chair was less impressed; he should be pleased we didn’t choose ‘destructor’.

And with that, the group work was completed. I retired to my room but was persuaded from my bed (yes, I was actually in bed) by the BSI delegation out drinking in the city. We sang songs accompanied by an acoustic trio in a pub. Many of the BSI delegates were attending their first meeting, yet we spoke about our plans for Prague.

Day six

Closing plenary voted nearly all of the work through to the standard. 75% of the national body comments were addressed, which puts us in excellent shape for sending the draft for publication at Prague.

We parted in high spirits. I have a full plate for the next few weeks but I’m looking forward to Prague very much indeed. Many thanks, as always, to the C++ Foundation for sponsoring my attendance.

Leave a Reply

Your email address will not be published. Required fields are marked *