If I Only Had A Brain: 2018 CppSAN WG21 Trip Report

This is a short report on my experience from attending the WG21 2018 San Diego meeting. Some warnings though..

  • I’m a very infrequent WG21 in-person attendee. The last time I attended was in Chicago 2013, and that was for one day. This time I managed to attend for three days.
  • My main goal for going this time was to present for discussion P1177 and P1178. Both proposals for SG15, or so I thought when I first wrote them. But as we all know.. Plans are obsolete the moment they are conceived.
  • My feeling towards the worth of attending are mixed, more on that below. I say that, from the context that I attend these things by taking vacation and paying for my own way (I do have to thank my employer, Disbelief LLC, for paying one work day).
  • The only order below is relative to what I feel is least to most important to me personally. I hope you will read to the end (or if you are impatient just skip there).

This Is The End

Yes, I’m starting “backwards”, with the Plenary meeting. This time around I decided to stay long enough to observe some real voting happen. As the last time I did this was more than a decade ago. This is where the “fun” really happens, and I’m quoting “fun” because the usual interactions are to present a motion approve a proposal go into the standard is cut and dry with unanimous consent. But once in a while there are objections, which triggers voting by members and eventually national bodies. This was one of those meeting with at least one such incident to provide one exciting moment. Another exciting moment came when voting in Ranges into the standard. That triggered a deserved standing ovation as it’s one of the biggest proposals to hit the standard since 11.

Of Libraries and Evolution

When not participating in one of the SGs (Study Groups) I spent a good chunk of my time going between LWG and LEWG (Library Working Group and Library Evolution Working Group). For those that don’t know, the former is the gate keeper of library proposals making it to a vote for the standard. And the latter is the gate keeper for the former. This year we saw the addition of LEWGI (I == Incubator), which seems designed to be a filter to LEWG.

I attended LWG on Friday morning as a distraction to what had expired Thursday night and to be in the good company of fellow C++ Alliance member Marshall Clow. Most people think of LWG as the second most boring meeting to be in as all it covers is final wording review of proposals. And as such it’s mostly just reading standards text and making corrections or sending it back to other groups for adjustments. But I find it’s the most useful group to attend. As one is usually dealing with well described proposals which makes it easier to understand what’s going on. And it tends to avoid all the hoopla of design arguments the evolution groups get which suites me, as I’m not fond of multi-party arguments. The one notable proposal that I voted on while in the room was P0595 “std::is_constant_evaluated()“.

99 Red Bricks

After the Plenary voting session on Saturday morning I went to LEWG to remind myself how this group works. As LEWG is the group I presented a paper in that Chicago 2013 meeting. And fives years is more than enough to forget almost everything. One think to understand is that because this meeting happens after the Plenary, it’s a zombie session. Nothing that goes on here is official in any way as the WG21 week has been adjourned. Which means that any voting going is replayed in the next WG21 meeting (assuming someone remembers to do that). While there I discovered that I might finally get a chance to present the P1178 “std::compile()” proposal. In this zombie session we covered P1132out_ptr“, P0288unique_function“, LWG3101 “span constructors”, and we closed the session off with P1178 (finally).

It was both a relief and scary. P1178 had gone a circuitous route to get here. My expectation was that this would be discussed in SG15 (Tooling) and eventually move to LEWG. Instead LEWGI was created a short time before the meeting and it got scheduled there instead of SG15. But I was not going to be around to present it while LEWGI was meeting. So it was taken off that schedule and I pleaded to get it back on the SG15 schedule. Wherein it did not get seen as we ran out of time on that meeting. But then it turned out LEWGI extended its schedule to Thursday, but alas it was already gone from that schedule. To say the least, this was a frustrating experience for me. In the end I got some good feedback from LEWG on how to move forward with the ideas in P1178. So I’m somewhat hopeful on that end.

There was a brick; a red brick: Being a zombie session it means everyone is horribly tired and a bit loopy. This was punctuated by the rather strange moment when Walter Brown pointed out there was a literal red brick sitting on the table. No one in the room knew the purpose of the brick. If you are reading this and have some inside into the provenance of the red brick we would all love to know. Please help out this reporter with an anonymous recount of that red brick.

SG13

Spending time in the relaunching of SG13 I/O was the first item in my interest list as it was scheduled for Thursday morning right after I got there. SG13 is where the “io2d” proposal came from some years ago. And now the group is back to try and deal with its possible future. We discussed the future of that proposal and also a possible proposal for audio output and input. The general consensus is that at minimum we should provide some core features that make I/O possible. But wether something above that is desirable in the standard is still undecided. One key question we tackled was what SG13 should be looking to get done. And the range we discussed is large, and could include the various human perception inputs that are becoming more and more prevalent with sensors built into phones, VR, AR, and MR.

SG14

This meeting was an unexpected pleasure. Nothing was scheduled for the SG14 Low Latency and Games groups when I got there. But by the end of day Thursday Michael Wong managed to schedule a Friday afternoon session to talk about linear algebra. Which, as a game developer, is something I’m interested in seeing supported. We had some good discussions as to what kinds of data structures and operation we would want on a minimal linear algebra library. And the need to make a core set that serves as much of the community as possible. I’ll be trying to attend future meetings on this one. Which thankfully is following on the general SG14 modus operandi of doing frequent tele-con meetings.

Cooks In The Kitchen

The SG15 Tooling night meeting was my “main event”. I was there to present two papers, P1177 “Package Ecosystem Plan” and P1178 “C++ Compile”. But as I mentioned above, due to scheduling we never got to P1178 here.

The meeting started with discussion of P1177. The proposal tries posits that we do two things:

  1. Create a package index.
  2. Create control and communications APIs between all the ecosystem tools.

The original goal for the meeting, as far as I understood it, was that it would provide the framework for the rest of the presentations and discussions. Things did not go according to plan. The discussion allowed for some clarifications of the plan. There was agreement that something needs to get done. Unfortunately how much and what is still elusive. We covered a lot of ground, perhaps too much ground, by many people, perhaps too many people, on this initial part. The only consensus conclusion at this point is that we all want to make it easier to use 3rd party libraries. To say the least, not the most useful conclusion we could have reached.

On the schedule next where two papers: P1313 “Let’s Talk About Package Specification” and P1254 “Notes on C++ Package Management”. They both provide some background exposition in package management. P1313 dealt mostly with the rationale behind CPS, a common specification of packages. And P1254 presented the position of advocating for text based interfaces when dealing with ecosystem tools. The discussion was short and since this was expository only no conclusions where attempted.

The next pair of papers diverged a bit from the above discussions of package management. As we turned to the issues and solutions for dealing with the impending C++ Modules feature. We heard, about P1184 “A Module Mapper,” on how gcc solved the problem of finding module binary interface files by invoking an external program (or networked equivalent) through a command query API. This in some ways fits with P1177 in that it’s one of those pieces we might eventually need to talk between the compiler and build systems. Following was, what turned out to be the last paper of the night, P1302 “Implicit Module Partition Lookup”. The concept on this is to provide a common set of recommendations for module source and BMI naming and arrangement that makes it easy to find the BMI when someone does a module import. As we where already running over time for the meeting the discussion was brief. Which didn’t leave, I think, enough time to truly debate the proposal. We did end up having a poll on the core of this proposal. Unfortunately there was no consensus to proceed either way.

Here we where at the end of the SG15 meeting; Did the committee accomplish something? Does the committee have a direction to pursue? The answer to those is no. As was expressed by another in the room: the committee is in the spot it was in Rapperswil. So it seems that after at least five months of people working on some concrete proposals we have nothing to show for it. To say the least this is not a good place to be. Why did this meeting end up this way? I can’t say for sure, since I’m not a frequent attendee of WG21. But I do have one theory, there where too many people to effectively discuss the proposals. Coming to consensus is hard enough with a handful of people. But having a few dozen with varied opinions and little time makes it an impossible certainty. I don’t know if this is normal operation of WG21 SGs. But it’s certainly not what I’ve come to expect from participating in SG14.

This Is The End

As I mentioned at the start of this trip report, I have mixed feelings for this meeting. While I had the good aspects, some unexpected, of participating in some interesting discussions and got to chat with some friends it’s balanced with the ineffectiveness of the key purpose of my attendance, to advance on the tooling problems.

I am hopeful for future work towards resolving the tooling problems in the coming meetings, like Kona. But as my personal resources are limited I will only be able to observe and participate on those from afar.

René Ferdinand Rivera Morell

I program, mostly in C++, and mostly game engine systems. But I also manage to program open source tools, libraries, and contribute to C++ standardization. I've been known to take pictures, many, many pictures. If you're curious about the OSS work I do, learn more at my sponsor page: https://github.com/sponsors/grafikrobot - https://github.com/grafikrobot - https://cpplang.slack.com / grafikrobot - https://twitter.com/grafikrobot - https://cohost.org/grafikrobot - https://www.linkedin.com/in/rrivera/ - https://robot-dreams.net/author/grafik/ - grafikrobot @ libera.chat - @grafikrobot@allforall.net - @grafik@robot-dreams.net

Leave a Reply

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