I love Czechia and I love Prague. I have visited a few times: most recently to give a talk at the Avast meetup last February, organised by Hana Dusíková, who also organised this WG21 meeting. She did an absolutely outstanding job, and I know that I share that opinion with many committee folk.
Of course, this was the meeting that C++20 was due to be signed off by WG21 and sent for polling by the National Bodies (NB) before going to ISO for publication. Plenty of time was spent on attending to outstanding NB comments but there was still scope for reviewing new proposals.
On top of that, there was a social event on Wednesday evening to celebrate the release, which took place at Pražská Křižovatka. The whole week was as tiring as ever, but I was delighted to be there, to make “the team photo” and to advance some of my work. If you are interested in a detailed report of the work completed you can find one on reddit: I am going to discuss my work and experiences.
I arrived on Sunday morning, having foolishly decided to catch the 08:20 flight from Gatwick which required me to get up at 05:45. Prague really is gorgeous at any time, but I was fortunate enough to be awarded an upgrade and to get a room on the top floor, commanding astonishing views of this beautiful city.
Of course, veterans of this column and of the meeting process will know that looking at the city was about the only thing for which I would have the opportunity. However, after spending an afternoon in preparation, I was able to join several colleagues at a nearby bar: from Creative Assembly, Duygu Cakmak and Nick de Brueck, and also James Berrow who has been working on a colour proposal with me for the graphics effort.
Hospitality really is very, very generous in Prague: after four beers and a pizza I was ready to call it a night, having spent a wallet-whispering £12. This was to be the pattern throughout the week: several of us would go out and eat a fine lunch for the price of two coffees back home.
P1385 is up to revision 6 now, since the post-Prague mailing. It is the fourth meeting at which it has been reviewed, and the third meeting at which LEWG-I has been a reviewer. We spent two full sessions, equivalent to half a day, interrogating design issues. The outstanding issue was, again, the issue of operator overloading: should you be able to write A*B to multiply two matrices, two vectors, or a matrix and a vector, and what should it mean? This turns out to be a surprisingly subtle question.
I know that some people are getting a little impatient, but we do have to get this right. The proposal is a little under 50 pages now, and we haven’t even added any wording. These things take time! Bryce, the LEWG-I chair, estimated another one or two meetings before it would be ready to move on to LEWG. With a couple of meetings there, and another couple of meetings for wording correction, we should make it into C++23. There are nine meetings in total per cycle.
I was interested to discover that there are already dependent proposals waiting for our proposal to make it into the C++23 working draft, particularly Physical Units by Mateusz Pusz and the upcoming colour proposal. Speaking of which…
There was no new revision for the graphics proposal this time, but an interesting paper did appear which critiques the work so far. It is an excellent paper and paid a lot of attention to the ways in which colour can be incorrectly manipulated. I contacted the author and asked him to coauthor a colour proposal with me, and encouraged him to join the UK National Body and attend the Prague meeting to present his findings.
Colour is hard and confusing. James prepared an excellent presentation to SG13 that took well over an hour to deliver. He covered the salient points but even then it was just an introductory session. He carefully fielded every question and it was an incredible and revelatory time for all. James is to be applauded, especially considering it was his first engagement with the standardisation process.
The main source of confusion is the difference between linear and non-linear colourspaces. We are all used to RGB colour values on a monitor, but if you want to blend between two colours you need to use a linear colourspace, which RGB is not. This causes problems for any kind of interpolation: you must convert to and from a linear colourspace. Since a colour is typically a vector of three elements, this conversion is achieved through matrix multiplication, hence the need for linear algebra.
Surprisingly, this category of error is observed throughout most graphics libraries, which lends additional weight to the need for a colour library. Watch this space: James and I hope to bring a paper to the next meeting.
If you have read Timur Doumler’s trip report, you will know that we are floundering somewhat. Although we (very nearly) have a proposal and implementation, the committee isn’t quite sure what it wants. Timur co-authored a paper with Sophia Poirier and Frank Birbacher which listed some use cases for audio. It is to be hoped that this will focus the minds of the stakeholders and we can make some progress.
The real problem, of course, is that myself, Timur and Guy Somberg all have day jobs, and the world is suddenly a rather peculiar place. As I have mentioned before, the entire effort of standardisation is voluntary and if there is nobody to push the work forward, it doesn’t happen.
I have a vision for SG13, which is to enable C++ engineers to use standard language and library features to portably develop rich media applications. It is a long march, and I am fully aware of this. Piece by piece it is falling into place though.
Hana scheduled a formal dinner to celebrate the completion of C++20, and asked everyone to dress up and wear something sparkly. Sparkly isn’t really my style, when it comes to dinner. However, I recently joined the Brighton Festival Chorus, a requirement for which is the possession of a dinner suit for performances. I added a top hat and decided that would be my outfit. I decided I rather resembled a 19th century European gentleman.
It turns out we did not disappoint, nor was mine the only top hat. There was a variety of very well turned out guests, along with the inevitable scattering of refuseniks in shorts, and an excellent time was had by all. A grand piano sat on the stage awaiting the attentions of several of the committee, and we seem to have a large number of members who know there way around another type of keyboard.
This is the end of my first C++ cycle: my first committee meeting was Toronto 2017, which was the first meeting of C++20. The next committee meeting was scheduled to be in Varna, Bulgaria, but times are strange now and that won’t be happening; I hope it has been postponed a year, as I would love to visit the Black Sea. Also, Creative Assembly has a sister studio in Sofia, so a visit would be excellent. The committee is looking at virtual meetings and teleconferences, so do contact your national body if you are interested in participating: the barrier to entry has never been lower.
Many thanks, again, to the C++ Foundation for sponsoring my attendance.