The German tour: Cologne trip report

No time for fripperies

This trip report is a little different: not only did I attend the C++ Standard committee in Cologne, but I went on to speak at the Munich C++ meetup on the following Monday. 

I arrived a day late: I rolled up on Tuesday afternoon, so I only saw a little over three days of discussion, plus the closing plenary. Still, there was plenty to cram in, including two full days of discussion of papers I’m involved with. I’m now co-authoring three active papers: the 2D graphics proposal, the audio proposal and the linear algebra proposal. Things are getting rather busy! 

There was very little time for exploring Cologne, unfortunately. The square outside the hotel was the social hub after the day’s business was completed, but that was about as far as I got. I enjoyed some German food, including a Pork Knuckle (if I translated the German correctly) that was the size of my head, as well as a variety of beers. When in Rome… 

pork_knuckle

Committee rooms

There were an astonishing 200+ people in attendance this time: many thanks and congratulations to the hosts and sponsors for accommodating us all! The order of business for this week was making sure the working draft of the next standard was completed and that a committee draft could be published. This is the version that the committee asks the National Bodies to vote on. 

Things were very busy in those rooms where wording was being finalisedthe Core Working Group for the language portion of the standard, and the Library Working Group for the library portion of the standard. However, new material is still being prepared for the standard that won’t make C++20, particularly the contents of my paper. I spent time with the Library Evolution Working Group looking at some of these new items when I wasn’t working on my Munich talk or assisting the defence of my own papers. 

The big news though was the withdrawal of Contracts from the working draft. The consensus is that it simply isn’t ready yet, and since it is a LOT harder to remove something from the standard than it is to add something, the best plan is to wait until it’s ready and keep examining it. A new Study Group has been formed, chaired by John Spicer, SG21, Contracts. I’m pretty disappointed about postponing contracts, but then again, I probably wasn’t going to get what I was expecting. I think that was possibly the general experience for many observers… 

Wednesday: 2D graphics

Two Study Groups wanted to review the graphics proposal. The first was SG16, Unicode, on Wednesday. The graphics proposal has two new features: we now support text, as well as command lists for batch processing. Text support means that the Unicode people are interested. 

Unicode interests me in general, since I find the idea of trying to describe and standardise the complete set of glyphs we as a species use to communicate with one another in absentia an extraordinary endeavour. The actual work of this is formidable and I am very impressed by Tom Honermann’s desire to chair this group and make C++ text handling more realistic. 

At the moment the 2D graphics text interface takes a std::string. The question at hand was “why not take a char8_t?” Recall that there are several character types available now: char, wchar_t, char16_t, char32_t and, if the committee draft is published without national body comment opposing this, char8_t. These last three are for UTF encoding, and it would seem obvious to take a char8_t string. However, the target of the graphics proposal is NOT the International Standard, it is a Technical Specification. Such a document must be based on a published standard, so we cannot take a char8_t until we decide to rebase the proposal on C++20. 

It seems very likely that we will do this, and we will consider our options regarding the nice new features that the language introduces. I imagine we will indeed offer char8_t support for our text: a poll was taken among the attendees and there was unanimous consent for this course of action. Interestingly, there was no support at all for offering char16_t, char32_t or wchar_t support. I’m looking forward to how text is going to pan out, and I think this SG is grappling with the hard problems. Many thanks for their time reviewing our proposal! 

Thursday: 2D graphics

On Thursday morning I was joined by my colleague from the rendering team at Creative Assembly, Dmytro Shchukin. He joined me in SG13, IO, who also wanted to take a look at the 2D graphics proposal as well as the other graphics proposal, web_view. 

This proposal, by Hal Finkel, offers a mechanism for talking directly to browsers, leveraging the enormous amount of work already put into standardising many parts of the browser ecosystem. The idea is to compose and send text strings to the browser and let it do all the rendering work. It’s a neat idea, although adding it to the standard is going to be a possibly more formidable task than the existing graphics proposal since the W3C standardisation process is rather different from the ISO process. However, Nvidia support this proposal (to my surprise, and to the astonishment of my colleague!) so it may yet make it into the standard. Further work was encouraged, and it was noted that this proposal could also cover some of the proposed audio effort (more on that later).

Discussion of the 2D Graphics proposal centred around feedback from Apple. Their experts kindly reviewed the proposal last year and provided a lot of detailed feedback which Michael McLaughlin incorporated into the proposal. We also raised issues about threading, batching, renderers, and of course how it might proceed through Library Evolution given that last time it was voted down. Although there is National Body support for this effort, the wrong design will not pass, nor should it. 

If you want to participate, look at the repository, make pull requests, raise issues, you know the drill. Mike is busy completing a Qt backend to support the text API: stay tuned. 

(also, if you have any ideas about user input, the final part of the puzzle, we are all ears) 

Friday: Linear Algebra

Friday saw a joint meeting between SG6, Numerics, SG14, Low Latency, and SG19, Machine Learning to talk about Linear Algebra. This proposal has taken off dramatically, spawning a lot of interest and several succession papers. I was only able to attend the morning sessions but work to date on the proposal was well received. 

Of particular interest was the proposal to add a free-function linear algebra library based on BLAS. This would coexist beautifully with the existing proposal, allowing implementers to use these functions to implement the proposed linear algebra library. Of course, implementers would be free to provide multiple implementations if their target platform had special support, for example DirectXMath on Windows. 

The next order of business for these proposals is to ensure they can coexist and then to present them to the Library Evolution Working Group. Indeed, this was a condition of support for forwarding. I shall start writing wording for the final paper over the next few months prior to the Autumn meeting of the committee in Belfast. 

Bob Steagall has been doing sterling work on this: please visit the repo and raise issues, try your own implementation of the operations, and give it a thorough going-over. 

Friday: Audio

I had to leave the Linear Algebra session to visit SG13 for my final paper of interest, the Audio proposal. I was delighted to note that we were in the room named Bad Homburg: this town is twinned with Exeter, the place of my birth

bad_homburg

Just as with the 2D graphics proposal, Apple gave some excellent feedback which we have largely addressed in the current proposal, and we spent time reviewing this. Sophia Poirier presented Apple’s response and there was discussion of some quite fine details, such as connecting and unplugging hardware while the process is running, deciding how to access the data and implications of contiguity, what can be handled via class and function templates and what via virtual dispatch. 

I have been taking an organisational role in this proposal rather than a direct authorial role. Timur Doumler has been leading development with Guy Somberg providing Windows expertise and additional game dev perspective. I have great interest in audio: I’ve been playing the piano for nearly 50 years now, I’m very interested in studio production and audio software, as is my son, and I’m keen to see a single low-level audio solution in the standard. There is SUCH a lot of repetition, as with 2D graphics, in existing libraries, that it is surely the time for the library to embrace IO. 

Again, check the repo, kick the tyres, play some tunes. Also, be advised that we intend to submit this to Boost.

Saturday: Closing plenary and on to Munich

As I said at the top, we succeeded in voting for publication of the Committee Draft. 

Closing plenary was a slightly strange affair since there was no room large enough to hold us all. The adjacent room received a live video stream of the proceedings, complete with jokes repeated through the microphone by the chair, John Spicer. 

There were some procedural shenanigans with a late paper billed as a bug fix, but the implementers present unanimously declared that it was NOT a bug fix. There was considerable celebration for publication, and I left with the feeling of a job well done. 

I would have liked to have seen more of Cologne, but instead I prepared my slides for the Munich meetup. Indeed, almost the entire remainder of the day was devoted to producing slides. I inadvertently bought a first-class train ticket from Cologne to Munich and enjoyed 300Km/h rail travel through Germany. Every time I looked up from my laptop there was something splendid to look at. I’m more used to UK rail travel, which is why I was particularly astonished to be served wine at my table.

wine_on_dbahn

I checked into Hotel Europa and carried on with my slides. Perhaps I spent too much time on them… 

My wife joined me on Sunday morning for a couple of days touring Munich. It’s a lovely town, and that part of the world is quite gorgeous.

img_1982

Eventually though, I had to give my talk to the Munich C++ meetup. My topic was about teaching geometry to C++. It’s the next step after linear algebra. I will be giving this talk in St Petersburg at C++ Russia at the end of October, which will be published on YouTube. Watch the skies!

img_1983

Many thanks, as always, to the C++ Foundation for sponsoring my attendance, and to the various hosts along the way. I had a great time and I’m looking forward to continuing the work in Belfast.