CppCast - Boost, The Beman Project and Beyond

Episode Date: June 14, 2024

Zach Laine joins Phil and Timur. Zach talks to us about the Boost collection of libraries, his contributions to it, a little of its history and where it's going, and a new project that aims to get bac...k to Boost's original roots. News Timing vulnerability in Kyber due to compiler optimization pass JUCE 8 released C++ Under the Sea - new conference in The Netherlands Links Boost

Transcript
Discussion (0)
Starting point is 00:00:00 Episode 384 of CppCast, with guest Zach Lane, recorded 7th of June 2024. In this episode, we talk about a Clang optimization that makes cryptographic algorithms insecure, a new version of the Juice framework, and a new C++ conference. Then we are joined by Zach Lane. Zach talks to us about news from the world of Boost and beyond. Welcome to episode 384 of CppCast, the first podcast for C++ developers by C++ developers. I'm your host, Timo Dummler, joined by my co-host, Phil Nash. Phil, how are you doing today? I'm all right, T phil how are you doing today i'm all right i'm a hating i'm all right um except
Starting point is 00:01:06 that i'm a bit tired um i just had uh a trip um i just came back from c++ russia which is a c++ conference in moscow um and i was giving the closing keynote there um the conference itself was pretty great it's uh it was very well organized very high quality content as. As you know, I'm actually from Russia. I was born there. I have friends and family there. So that conference has always been very special for me. It's a very special thing to talk there. But it's actually very difficult to get there right now
Starting point is 00:01:36 because there are no flights from Europe to Russia. There are no trains from Europe to Russia. I live in Finland and the border between Finland and Russia is just completely closed. So you have to kind of travel around and it's very, very tedious. It took me like 24 hours just to get there at like one way, even though it's quite close geographically. So I'm quite shattered from the, from the whole trip. I'm still, still recovering, but the conference itself was, was amazing. So that was, that was great. That was totally worth the trip. Congratulations on the keynote.
Starting point is 00:02:04 Yeah. Yeah. That was fun. Um, it was the first time i gave a keynote in russian actually that was that was fun as well it was normally like i normally i talk in english but yeah that was that was fun uh what about you phil any any recent conference trips or other stuff you you just had a conference that you organized didn't you how did that go yeah so swift craft so not c++ but uh i did mention it in the last two episodes as it happened it was just coming up perpetually and uh it ran a couple of weeks ago went really well actually but much smaller than we originally expected but everyone said you know what a great time they had and they're looking forward to the next one
Starting point is 00:02:39 and that's really all you can ask for a first time conference so uh yeah i'm pretty pretty pleased with that. I'm a bit tired as well. It probably didn't take you quite as long to get there, right? Where is the conference? That's in Folkestone. It's the same venue that we have for C++ on C. Oh, is it the same venue?
Starting point is 00:02:58 Yeah, that's a beautiful venue. Yeah, yeah, that really was part of it. All right, cool. So at the top of every episode, we'd like to read a piece of feedback. Our last episode with Sean Baxter actually generated a lot of discussion. We got lots of emails. There were lots of comments on Reddit and elsewhere.
Starting point is 00:03:15 All kinds of comments. Some people are agreeing with Sean and they say like, this stuff is great. Like the circle stuff, the Brochaker stuff. Some are challenging his approach. Some are pointing out things that we should have discussed or but didn't discuss or you know that some people thought were just outright wrong you know very very interesting comments thanks to everybody for writing those sending us those i don't think we will be able to respond to every email there's
Starting point is 00:03:39 quite a few but i do want to read out one email by George Ford. George writes, I loved the episode. I was wondering why Circle wasn't included in the original series of C++ successors. I've played with Circle in Compile Explorer and it's fairly straightforward and promising. I think this was the most interrogation I've ever heard Timur get involved in. Way to push him because this is a very different approach to super sars memory safety especially considering how many times he mentioned implementing lifetime and borrower checking rules using that four-letter word rust lol great job guys um well uh thanks george for your feedback i can explain why my interrogation of sean was so harsh i actually um was very sleep deprived i did the episode on something like two hours of sleep.
Starting point is 00:04:25 And generally, I'm kind of chronically sleep deprived right now because we have a little baby here at home. So I was very grumpy when we recorded that episode. So I think I was maybe a little bit more rough with Sean than I would normally have been. But it seems like he didn't take it personally and the episode still turned out okay. What do you think, think phil well i think we should make sure that you are sleep deprived for every episode well as it so happens i'm again sleep deprived for this one not quite
Starting point is 00:04:54 as badly but yeah i just came back from from this trip from russia and like have not slept very much last night so um let's see how today is gonna to go. Yeah, so we'd like to hear your thoughts about the show. You can always reach out to us on xmastered on LinkedIn or email us at feedback at cppcast.com. Joining us today is Zach Lane. Zach Lane has been using C++ in the industry for 20 years, focusing on data visualization, numeric computing, games, generic programming, and good library design. He is the author of multiple Boost libraries and a member of the ISO C++ Standard Committee. Zach, welcome to the show.
Starting point is 00:05:34 Hey guys, thanks for having me. So I've seen your bio around in a few different places now, and like many of us, you have like a variation of the same bio everywhere what i've noticed is that you know number of years in c++ industry it's a different number each time and yeah on the face of it that makes sense you know it sort of goes up one every year you would hope except i think it actually goes down as well so really so let's just clear this up once and through when when did you start using C++ in industry? So the first professional job I had doing C++ was in December of 2002.
Starting point is 00:06:13 That's when I got hired my first job. So 22 years. Yeah, I was still a student. And so for that six months or so until when I graduated in May, I was a student. And then I got hired full time at the same place. Yeah. So, yeah, 22 years. Yeah.
Starting point is 00:06:29 That's crazy. It's been a long time. Well, actually, no. So I guess, you know, 21 and a half. Yeah. I need to put a 1.5 in that bio. Yeah. Right.
Starting point is 00:06:38 Okay. We just put from 2002. Then it's always correct. Yeah. Yeah. Yeah. Yeah, yeah, yeah. Yeah, and that's the thing is I think like, you know, when you've got like eight years in your bio,
Starting point is 00:06:50 you're like, well, I really want that to be a nine. Like it makes me sound more professional or knowledgeable or something. Once it's over 20, you're like, you know, more than 20 is probably what I'm going to leave it at kind of forever. Yeah. Yeah.
Starting point is 00:07:02 Well, Zach, we'll get more into the stuff on your bio in just a few minutes but first we have a couple of news articles to talk about feel free to comment on any of these sure so we got three news articles today the first one is from pqshield.com which is a company doing cryptography stuff and that article talks about um an interesting case where the Clang optimizer took a branchless algorithm and optimized it in a way that adds a branch. Which sounds like, okay, optimizers do all kinds of stuff. Like, why not? But this actually happened in the reference implementation of Kyber, which is an important quantum-safe cryptographic algorithm. And why is that really bad?
Starting point is 00:07:42 Well, cryptographic algorithms are deliberately implemented with branchless code right because instead of like if else wild switch whatever you you have like bit masks and similar things to make sure that you always execute the same amount of instructions every time you like perform the algorithm because uh you can't have an algorithm where the observable behavior and that includes like how long it takes right depends on like your secret data like passwords or whatever otherwise you can extract the secret data which is exactly what you're not supposed to be able to do so so you can't have control flow that depends on on that on the secret data right you you always have to do everything branchless
Starting point is 00:08:20 with like bitmasks and stuff and so the problem is that like clang uh basically took this bitmask and reasoned about oh well this bitmask is always like either all zeros or all ones and so the masked value is always either zero or a constant and so i can just turn it into a branch instead because in x86 a branch is heuristically like faster right so it did that but then a malicious attacker can actually then basically run the algorithm with like you know many times and just time it and then just from that timing actually extract the password which is like really bad and so uh it took a lot of effort to fix actually the article goes into um a lot of detail like how they like what the actual problem is actually shows the exact code it's of detail, like how they, like what the actual problem is,
Starting point is 00:09:05 actually shows the exact code. It's actually quite cool, quite detailed. They had to basically rewrite the code to kind of confuse Clang. So it doesn't actually do that optimization anymore. But yeah, it's kind of really cool and interesting and also really scary. I also, I think it mentioned that
Starting point is 00:09:20 this is not the first time something like this happens. So optimizers, you know, use heuristics to make things fast, but sometimes that's not actually what you want. Well, but so, you know, I saw this article when it came out. I think someone linked it on Reddit or something. And, you know, I'm kind of nonplussed by this article. So I'm writing to an abstract machine, and then the abstract machine didn't do this exact thing that I wanted
Starting point is 00:09:41 that is below the level of the abstract machine. And so I wrote a whole article about it. That seems like a weird choice to me. Like, I understand that it's a problem for you and your implementation, but like C++ doesn't give you guarantees. Like if you write code that doesn't have branches in it, the object code that is generated will look like this and not have branches in it. Like that's not a guarantee that you're given for the language, right? You get the guarantee from writing assembly yourself, but you don't get the guarantee from language. The assembly that you get is a function of some implementation details
Starting point is 00:10:09 that have nothing to do with C++ as a standard, right? So I don't think it was a criticism of the C++ language at all. I think it was a criticism of, or a comment on like the compiler and like kind of compilers shouldn't be doing this with real world code. I don't think it's very much about like the language.
Starting point is 00:10:26 The compiler is implementing a standard, right? It's implementing the language that you're using. That's kind of my point is that, and also like, you know, I only skimmed like the article itself. I was mostly responding to the hue and cry from the Reddit community or people like, I can't believe the compiler is doing this.
Starting point is 00:10:42 I'm like, I can, that's what the abstract machine does, right? That's the whole point. Well, I actually stumbled doing this i'm like i can that's what the abstract machine does right that's that's the whole point well i actually stumbled upon this uh from a completely different blog that i'm reading it's a german language blog it's like called feifers blog and feifer is like a famous german like it security guy who has like a very cynical uh like he has this blog blog like in german where he just very cynically comments on everything that's happening in the world and occasionally comments on like it security stuff and and he just posted it there saying oh this is like really bad and like like you know compilers i'm like doing this this really bad stuff and that shouldn't be happening from a perspective of a security person and i clicked
Starting point is 00:11:17 on it and then that's how i stumbled on this article and then later i realized oh it's also being discussed on reddit yeah but from a perspective of like a security expert, like you don't really care what the standard says. You just like, that's really bad from their perspective, right? Well, yeah, no, it's really frustrating. I get that. But like saying that the compiler is doing something nefarious or like this is a poor quality implementation
Starting point is 00:11:40 because it did this to my code is just, I think it's just wrong. I don't think they did that. Like they didn't say the, like, like okay i need to read the article again but i don't i don't even think they they filed a compiler bug they didn't say the compiler is doing something broken they they actually fixed it by changing their own code yeah they just say it's unfortunate that compilers are doing that right it's clear why the compiler is doing it it's like it has a heuristic that says it's going to be faster this way. So it actually is
Starting point is 00:12:08 the correct implementation if you want performance. So, yeah. I mean, I only skimmed the article as well, so I'm also qualified to wade in. I got the impression
Starting point is 00:12:21 that, I mean, it was partly just a forensic story. You know, it's interesting to read about what's actually going on here, but also partly just raising awareness that this is the sort that, I mean, it was partly just a forensic story. It's interesting to read about what's actually going on here, but also partly just raising awareness that this is the sort of thing that does happen, and there are some cases where we actually need to pay attention to that, particularly when security is involved.
Starting point is 00:12:35 So I don't think the PQ Shield people were actually criticizing the compiler. This German blogger, whose blog I was reading when I stumbled this from, he was criticizing it, but he's a very kind of cynical security expert kind of guy. So I guess, anyway, we have other news items. The juice framework, which is something that I actually happened to have worked on like a decade ago or something.
Starting point is 00:13:01 That was fun. It's a kind of cross-platform application framework. It's kind of similar to Qt or WX widgets or something like that. Except it's also very popular for audio and music software in particular. It's kind of not limited to that, but it's very successful in that industry.
Starting point is 00:13:16 So that is getting a major update. Juice 8 is now available as a preview. What's new in Juice 8? It has a WebView UI. So in addition to writing uis in c++ the way you could always do it in juice you can now do it uh in in your like web view thing of your choice and that works they improved unicode support um including consistent text rendering on all platforms which is surprisingly hard i remember this from like using juice for my
Starting point is 00:13:43 own like apps um that like the fonts always look a little bit different on Windows, on Mac, on Linux. So they fixed that, apparently. It took months of research and more than two person years of development time just to fix the font rendering. That's, I think, interesting. And yeah, they have a few other improvements there,
Starting point is 00:13:59 but it's a major release. So I thought it was newsworthy. It's a very interesting framework that's been around for a while and used in a lot of software that's out there and making money and being used. Zach, you used to be on SG16, the Unicode study group. Does it sound to you very far-fetched that it took two-person years of development to fix this issue in juice?
Starting point is 00:14:22 No, not at all. Unicode is very difficult to get right. So, you know, like I'm not that involved in SG16 these days, but, you know, SG16 was like, you know, full of all these experts who had used Unicode for many things, experts about different parts of C++,
Starting point is 00:14:40 they're all committee members. And we have a guy that started showing up to the meeting who was a liaison from the Unicode foundation itself or the Unicode standards body. I don't know if it's called a foundation. And the number of times when we would be talking past each other and talking in circles because people just didn't understand kind of low-level assumptions that exist in Unicode because it's so fiddly and there's so many crazy details. And, you know, ultimately when you take every single natural language that's ever been spoken
Starting point is 00:15:13 and say like, yeah, we're going to write a library that does that, it's going to be difficult, right? And so, yeah, like everything related to Unicode always gets very thorny and there's all kinds of crazy exceptions and it's very easy to get subtle things wrong. I wish there was a, I don't know, something like a thick book that says, you know, this is how text works in software. And I could just read it and then I would understand it because I mean, I think the Unicode standard is intended to be that. Oh, okay. And, and the,
Starting point is 00:15:40 the only problem is that, um, you know, there's some, there's some sort of like – I guess you'd call them something like logistical problems with the Unicode standard. Like they use the word character in an overloaded way. Like the word character can mean code point. It can mean like a char. It can mean a bunch of things different. It can mean a grapheme cluster at some times. But I don't know if anybody knows what these things mean. So the point is that – yeah, yeah.
Starting point is 00:16:03 So there's like um based on context character might be one thing or another and then um but there's there's like deeper problems which is like okay so there's this bag of algorithms that comes with unicode and um i'm supposed to apply them in different places and then there's just some invariance across the algorithms like if you use this algorithm the the data the results can be used with this other algorithm. But if you use this slightly different algorithm, like I'm thinking of normalization here, you normalize stuff slightly differently, then this other algorithm doesn't work
Starting point is 00:16:31 with that normalization form, so you have to renormalize if you want to call that other algorithm. Some algorithms don't care about normalization. So it's like this body of knowledge you have to slowly accumulate over time for you to be able to even use. If you had an off- off the shelf Unicode implementation that you could use,
Starting point is 00:16:48 knowing when to employ the different algorithms from that implementation is not trivial. So it's all complicated. It's not like we need to normalize the normalization. Yeah. We need to have some kind of metanormalization in order to get this working. And I mean,
Starting point is 00:17:02 the way that we were thinking of doing this with the Unicicode working group was like i think a lot of people would like to have some kind of type that would be a unicode where string and it would template parameters that tell you what normalization normalization form things are in so that if you try to use the wrong one at the wrong time you at least get ill-formed code all right so this is a fascinating topic but we're not doing an episode about Unicode, so I suggest you don't fall into this rabbit hole right now. We can maybe do one another time. I'm sure that's going to be fascinating. But there are other things we want to talk to you about. So I'm just going to briefly mention the last news item for today, which is there is a new
Starting point is 00:17:38 C++ conference in the world, which is always a very exciting exciting thing so it's called c++ under the sea which is obviously a pun on a pun on phil's conference c++ on c which is in the uk but this new one is in the netherlands it's happening on 11th of october 2024 in breda in the netherlands um there's a pre-conference day on the 10th it's one day uh two tracks conference early bird tickets are 300 euros so it's not a huge amount of money comparedtracks conference. Early bird tickets are 300 euros. So it's not a huge amount of money compared to things like, you know, CBPCon or something. So, you know, if you're in Europe and you don't want to spend too much money
Starting point is 00:18:14 on a ticket for an international SuperSus conference, you know, that sounds like a pretty good deal. Jason Turner is giving a keynote. The submission deadline is the 12th of June, which actually, as I just realized, will have passed by the time that this episode airs. So if you want to submit a talk to this conference, it sucks to be you.
Starting point is 00:18:35 It's too late. But yeah, I hope that there's going to be a great program. I'm pretty sure there will be. There's great people involved in this. And yeah, so that's very exciting. I unfortunately don't think I will be able to make it, but maybe you will, Phil. You're not that far away, are you?
Starting point is 00:18:55 I will be there. That's really cool. Yeah, it's cool. And yeah, just to be clear, they did approach me before they went live with this name to get my permission. They didn't have to do, but it was nice that they did approach me before they went live with this name to get my permission. They didn't have to do it, but it was nice that they did that. Yeah, that was nice.
Starting point is 00:19:09 All right. So are we going to have more conferences with related titles now? Is there anything else you can come up with here? C++ through C, which happens, everyone's swimming. Oh, yeah. With kind of deep C. You could have one on a cruise ship and like out on the sea or something.
Starting point is 00:19:28 Anyway, but we can cut that part out. At sea. Sea was us at sea. We should totally have a conference on the cruise ship. Anyway, so those are all the news articles we have for this week. So we can now proceed to our main topic for today, which is our interview with our guest, Zach Lane.
Starting point is 00:19:46 Zach, thank you so much again for taking the time to be our guest today. Yeah, it's great to be here. So I think one of the things that you have been most involved in when it comes to C++ is the Boost community, right? You've been part of that for quite a while. You've actually authored multiple Boost libraries, right? So can you just remind us what they are and more broadly what your role is in the Boost community?
Starting point is 00:20:10 Yeah, so we'll take the second part first. So I was introduced to Boost at my very first job I ever had. I think I'd been on the job for like a week and someone said, do you know what Boost is? I'm like, no, what's that? And I saw it and I'm like, how did I not know about this? This is full of so many amazing things.
Starting point is 00:20:24 So I started kind of lurking on the Boost list, keeping up with what was going on in the Boost mailing list from then. And, you know, I had like some kind of interaction over time. And then eventually I had a library I thought I wanted to submit for Boost. And so I've been active as a Boost contributor since I think 2016, and maybe 2017, something like that. And I'm also on the Boost Foundation board, which is not really related directly to the Boost project. It's sort of like the legal entity that pays the bills for web hosting and stuff like that. Although now we're going to be turning the web hosting over to C++ Alliance.
Starting point is 00:21:06 But there's a few other bills that we have to pay, and that's the only reason the organization exists. Partly that's necessary because all the resources that Boost used were donated by volunteers before, and then one by one they were like, why are we doing this? Get rid of these guys. They're sucking up all our resources, and so now we have to pay for things ourselves. That foundation also is involved in putting on c++ now so um so that's kind of my involvement with the organization and as far as boost authorship goes my first library was a
Starting point is 00:21:33 thing called yap which is a an expression template library for c++ it's kind of an updated version of boost proto and um that was written in the c++ 17 and 14 standards, I believe. Then the next library I did was a thing called STL interfaces, and that is designed to make it easier for you to write things that are STL compatible. So the main one that everybody uses, I think, the most is the iterator facade called iterator interface. And I'm currently trying to standardize that.
Starting point is 00:22:04 I'm hoping to land that in C++ 26. So there's papers in flight for that. We're kind of at the point of moving that into wording review. The design is pretty stable at this point. And then the latest library, which has been accepted through the Boost review, but is not yet in part of a Boost release. I'm not sure if I'm going to make the next release because I've just kind of run out of steam working on it, but I'll probably make the release after that.
Starting point is 00:22:31 There's a thing called Boost Parser, and it's kind of an updated Boost Spirit. So the Boost Spirit framework is showing its age because it was written in like the, you know, 03 standard. And there's an updated version that was written in more modern c++ but it's kind of under document a lot of people don't even know it exists called spirit x3 and i want to take like the best versions of the library like spirit x2 or sorry not x2 spirit 2 and spirit x3 both had very implement different implementation strategies and implement different versions of c++ and they're kind of radically different but at the core they have the same kind of domain-specific embedded language D cell
Starting point is 00:23:07 operators, like, you know, right shift operator to mean like a sequence operation between two things you're parsing, and so on. So I tried to keep all of that. And both those libraries are super fun to work with. So I wanted to make something that was really easy to use, really fun. And it was a lot of fun to work on and there's a lot of interesting features. And the thing that I love about the Boost process is Boost is fraught in a lot of ways, right? It's not the most welcoming environment. It's not like it's done on a mailing list.
Starting point is 00:23:35 It's kind of antiquated at this point. But one thing that it absolutely shines at is if you do a Boost review, you're going to get incredibly useful technical feedback in a like you know concentrated form right so like if you have a library and you put it up on github every once in a while someone will stop by and say like hey this thing is broken could you fix it or hey could you add this feature if you take all you know let's say you do that for two years and
Starting point is 00:24:00 you have a reasonable number of users you take that hundred weeks worth of of input that you've got for over that two years, you're going to get that from the boost mailing list review in like two and a half weeks, right? And so you get this really intense thing of like, I'm questioning all my life choices and like, is this going to work? And then, you know, there's a combination of like,
Starting point is 00:24:19 you know, some of it sows doubt and then some of it is just like, absolutely. Like, why didn't I think of that? That's a great idea. Right. And then some things are kind of in the middle. And some things are like, did you try it this way? No, I didn't. Let me go investigate that.
Starting point is 00:24:30 And so you get like a really great overview if the boost, if the review happens with a good level of involvement, you get a really good amount of feedback. And so, you know, I've been through the review process four times. One of the libraries was a Unicode thing called Boost Text that failed the review. And got on it like i even though it was a rejection i am the library was way better for being rejected than it would have been if i had just put it up on youtube or not youtube put it up on um github rather and let people just you know whack at it right so it's you know i don't know of any other place that you can get feedback like that on an open source project that is so constructive and so useful in such a concentrated period of time. It just doesn't exist anywhere
Starting point is 00:25:31 else. So, you know, this is the thing where I, as a committee member, I've tried to get people to, you know, they have some idea for some library XYZ, right? And I'm like, oh, XYZ seems interesting. How many users do you have? They're like, you know, me and my dog know me and my dog right so i'm like okay well maybe you should have more users and and a good way to do that would be you know take it to boost and then like submit as a boost library and you get all this incredible feedback from these people that are like you're bad and you should feel bad to um this is a great library and everything in between and and the result is always something that comes out better but those those reviews that are along the lines of you're bad and you should feel bad really turn off a lot of people and they don't want to participate in that process.
Starting point is 00:26:09 And I kind of understand that. But at the same time, I mean, if you can stomach some, you know, disconsoling reviews, like the results are pretty spectacular. Yeah, there was a comment that people used to make a couple of years ago. I don't know if they still do. A little bit snarky, but saying that it's easier now to get a library into the standard than into Boost. I think that's objectively true. Yeah, I mean, it's crazy, but it's true.
Starting point is 00:26:38 No judgment either way. It's an interesting data point. And, you know, there's a bunch of people on the Boost list who are like like this is exactly what's wrong with c++ and what's wrong with the the standard and i don't know if i i buy that but there is a definite gap between the difficulty of getting a boost library um reviewed and accepted versus stuff in the standard and actually so this is something that that you know we had talked about discussing maybe, but – okay, so I should back up. The original foundation of Boost was a guy named Beman Dawes who was a committee member from the pre-98 days. He passed away unfortunately a few years back right before COVID.
Starting point is 00:27:19 And he was really like a really well-liked guy and really technically savvy. And he did all kinds of great stuff for Boost and for the committee. He was a leader of one of the rooms in the committee. He's the guy behind Boost file system and then ultimately standard file system. And so Beeman's idea was, you know, we have all these libraries that are kind of coming into the review process or the review process, the standardization process. This is, again, in the pre-98 days. And he's like, what we really need is something that we can use to kind of road test these libraries. Get them out in lots of hands.
Starting point is 00:27:58 Get them widely used. Figure out what's wrong with them. Retool them. Reshape them. Figure out the best possible version of whatever library that is, and then standardize that. So that was his idea for Boost. And that's exactly what Boost did for its first few years.
Starting point is 00:28:11 And I want to say something like 14 of the first 17 libraries added to NCPlus was 11 were straight out of Boost. Some was slight modifications. Some just adopted wholesale. There was a bunch that were... Like File System and Annie and Optional and Variant and I think SharePointer. Yeah, yeah, quite a lot of them.
Starting point is 00:28:30 Well, all of those that you mentioned, except for SharePointer, came after 11. But yeah, 11 was like a ton of stuff, including SharePointer. Unique Putter was an invention that was added that did not come from Boost because you couldn't do it in Boost. Anyway, so the idea was,
Starting point is 00:28:47 let's do this. That's the Boost project. And then people would add stuff and then it would just be part of the review process, but they didn't really intend to standardize it. And some of the stuff that's been added, like no one really wants to standardize it, including the person who submitted it.
Starting point is 00:29:01 That's not the point, right? And that's fine. There's nothing wrong with that. It's not a criticism. But the point is, it, that's not the point, right? And that's fine. There's nothing wrong with that. It's not a criticism. But the point is, it has really lost that original purpose that this is where you go to get stuff widely used so you can figure out how to standardize the best, right?
Starting point is 00:29:13 Yeah. One of the biggest libraries that were standardized more recently, like Rangers, I think, basically Eric just put it on GitHub, right? It never went through that process. And now it's in the standard. And I think all of the more recent synchronization stuff is like that.
Starting point is 00:29:30 I think actually a lot of the more recent standard library stuff kind of never went through Boost, I think. Yeah. Oh, absolutely. It's very rare. In fact, like every once in a while, Peter Dimoff will either propose or someone will propose one of his libraries from Boost. And I have explicitly put SQL interfaces into Boost because I wanted to standardize that iterator interface
Starting point is 00:29:54 and I wanted people to use it first. But with the exception of those two people, I don't think anyone is using it for that purpose. And me and Peter are not using it for that purpose, like very often. Right. So, so the point is that right now you can have your cool idea for library XYZ. You can bring it to the committee. We can talk about it a bunch and then we put it in and we don't know how many people have used it. We don't know how broadly it's, it's gotten used from the people that are using it. And we don't know what the corners are that we're going to be regretting
Starting point is 00:30:27 in a year or two after it gets deployed. And that's a problem, right? So me and a bunch of other people that have been involved in Boost and been involved in C++ Now and been involved in the committee at C++ Now, so that we had this conference just this year,
Starting point is 00:30:44 but the one before that, a bunch of us got talking about it would be nice to have like a refocus of Boost back to that original mission. And then some people were like, well, you know, like why try to turn that chip, right? Like it's hard to steer something. It already, Boost does what Boost does and that's great, right? It does its thing and it does really well. Why not have a new thing that takes the old mission of boost and does that. So that's, that's the thing we came up with.
Starting point is 00:31:10 And someone says, so we name it after B minute. So we call it project B minute. And so it's very early days yet. There's like nothing there yet, but the idea is that we want to have a set of hopefully like, you know, using like a VC package and or a Conan set of hopefully like, you know, using like a VC package and or a Kona and some kind of, you know,
Starting point is 00:31:29 package managed loose confederation of things. And then Project Beeman is just an index of those things. And those things are each a library proposal with an actual paper and a paper number. That's how you get into the project. You have a paper number and you have a library. And the actual implementation is the thing that people check out and use and so as a user if you want to point to this particular tag for one particular version number you can use this thing and have a stable version of it that's not moving up from under you you don't have to deal
Starting point is 00:31:56 with the the update cycle this is a this is a problem where boost has been the victim of its own success somewhat where when you have a new version of boost a lot of people don't want to upgrade to it because there's probably source and semantic changes in that new version of boost somewhere if you're using enough boost libraries that that's going to bite you so the migration story is difficult so the idea is to get people to actually use it in real production code give them a way to to have a specific version tag version they want to use and try out that is stable. And then other people can live ahead if they want to. And then the combination of those two things, we're going to hopefully get more people to implement more libraries that go into the standard with good unit tests.
Starting point is 00:32:39 The documentation is nice to have, but it's not super important. The ability to look at the code, understand it, use it, and verify that it works via test and use cases, that is really important. And that's something that we're missing right now. A lot of times we'll have things go into the standard and then we realize, oops, like that part doesn't work and we thought it did. I shouldn't say go into the standard. That's an overstatement. We will have things make a certain amount of progress within the committee and then it gets caught. I've never seen anything that actually goes to the standard broken.
Starting point is 00:33:10 I shouldn't be representing it that way. But I have seen things get to, let's say, a plenary vote, which means it's been through all the individual rooms and now we're ready to merge it into the international standard, the draft international standard. And then we take a big vote of everyone in the committee and then someone's like hey someone noticed that this one part of it is probably not implementable and that happened like somewhat recently that there was an objection like that so yeah it was actually one a paper i was involved in that was uh in place vector which is exactly something that's really useful for like low latency real-time code which
Starting point is 00:33:44 is like a vector that doesn't allocate because like all the elements are inside the thing so it's like a small vector optimization but it's only that part no no heap allocations and then like well it's kind of highlighted a bit of a defect in the process because we had the paper basically written and there is an implementation and then i think uh library evolution said well why don't you just like slap constexpr onto everything exactly because that's what you kind of do and that's like we haven't really and that brings had that but like they said do that and then fine they voted it to the wording and then you know people noticed oh but like this
Starting point is 00:34:19 bit you can't actually like that's not implementable in constexpr land like like do you have an implementation and you were like well no like you just got told to add constexpr like by this other room like yeah that's not what we actually had an original proposal and they were like well like but that doesn't work and you know that came up in plenary so we had to actually retract the paper at that stage which yeah yeah and then I got like kind of busy with like contracts and I'm kind of not really participating in that paper all that much. So I don't know where that is currently. Yeah. And so, you know, that paper, so, you know, that paper isn't the only problem like this that has happened.
Starting point is 00:34:59 But the point is that like, if we had a part of the culture that if you want to slap context around something, the way you do that is you actually go and do the implementation and you have tests. And then you come back and say, yeah, we put context on it and it works and here it is and everyone can see it. And if that were part of the way we did business, then we wouldn't have these kind of problems. And so the idea is to make it easier for, number one, people to have a well-known place where the implementations live,
Starting point is 00:35:27 and number two, for people to get those implementations easily and use them, and then have an emphasis on good test coverage. I think that's awesome. So basically you're saying that if we vote any sizable library additions into the standard, we just have to have that implementation there that matches the paper that people can can work with or play with and that's there and that compiles and runs and passes the test i think that's great like i wouldn't i'm totally like if it means that like some stuff just doesn't get into the standard but then also like we get
Starting point is 00:36:02 less broken stuff i think overall that's a win so i think i'm already a fan of this the one time that breaks down is where it depends on language features that are being co-proposed or you know they've already been accepted into the standard whether or not in the working draft like they have a bit of concepts and ranges well ranges so here's the thing so ranges obviously heavily depends on concepts, but ranges also had an implementation where all of that stuff was emulated with horrible macros that like resolved to enable if under the hood,
Starting point is 00:36:33 and you don't really want to know how any of this works. Right. But like it did exist, right? As a proof of concept. Yeah. Yeah. And so that's the thing is
Starting point is 00:36:41 you might have an implementation of your library that only works with Clang or only works with EDG or only works with this one implementation because they're the ones who've implemented that thing yet. But hopefully we've got people implementing language features. And I mean, like the evolution room is actually very good about requiring people to do that. We have the exact same problem. Sorry to interrupt, but we have the exact same problem in the language side of things, right? Like we are voting language features in that don't have implementation
Starting point is 00:37:06 experience. And sometimes it's okay because it's quite obvious, but sometimes, you know, you discover things afterwards that don't quite work the way you expect them to. That's bad. That's probably even more bad for language features than it is for library features. Yeah, absolutely, because you're stuck with it. It's chiseled in stone at that
Starting point is 00:37:22 point, right? Like, you're just not getting rid of it. But so that's the thing is that, like, the evolution room is really good at saying, like, because you're stuck with it. It's chiseled in stone at that point, right? Like, you're just not getting rid of it. But so that's the thing is that, like, the Evolution Room is really good at saying, like, where's the implementation? Okay, you need to implement this before we're going to move forward with it, right? They're very good about doing that. At Library, we're not as good about that.
Starting point is 00:37:34 So that's why this thing, I think, is necessary for Library and less for the language standards, the language changes. I don't think, for example, we had an implementation for spaceship and um well that i think that's a few problems that were discovered there was implementation of part of it but then the the design changed out from under that implementation it wasn't revised i think that's what happened with that but i could be misremembering but yeah there was i think it was more the semantics were well understood and the implications of those semantics were not. And so the impact on the library was pretty non-obvious.
Starting point is 00:38:15 And then David Stone and Barry Resvin, like they went through and wrote a series of papers that said like, well, what happens if we actually apply this to existing stuff in the library? And what does it look like? And they, they were like, oh yeah, these aren't the semantics we want. So it wasn't a implementability or it wasn't that question. It was like, when we take this thing with the semantics that we have defined and that we actually use it in real code, do we like it or not? That was the problem with it.
Starting point is 00:38:41 So I think it was more a design bug than a than a um okay like a kind of specification bug or or like um you know something is uh you know ill-formed with the design where it doesn't work at all it was just like the design worked but it made uh semantics that i think a lot of people were like no no we don't want those semantics but i had the property that it changed the meaning of some existing code which is always a bit fraught yeah yeah that's um yeah you know so there's like i remember when we were talking about um no unique address i was saying well isn't this like an adl trap or not sorry not adl a uh abi trap um and um and i was people insisted like no because the implementer would have to write all the crazy
Starting point is 00:39:27 metaprogramming tricks to make this work but they're going to get exactly the same layout either way this just makes it easier for them to write it and then i heard about an abi break that happened in the wild with exactly this problem yeah um so you know i mean that is bad like i that's one thing that we should never have standardized, in my personal opinion. Like, that is bad. Like, we should not have standardized it as an attribute, for sure. I mean, I think it's great.
Starting point is 00:39:53 I think it works great. Okay, fine. Let's not get into that rabbit hole. So I will say, the one thing that we have not figured out at all with Project Beam in is is how do you do something like oh well i want to add this member function to string because that seems to be some people's hobby they want to add a million minute for the string i don't like it but that's what we do so if you want to do that like you essentially have to have some like i don't know project beaman thing that's like i went to gcc and it took string implementation i
Starting point is 00:40:22 cut and paste the whole damn thing in there and then i have a patch on top of that like i don't know what you can't really do that though because i think exactly a lot of the stuff especially like vector string those like really heavy kind of old standard library things like i think their implementations actually quite heavily used like compiler intrinsics and like compiler specific stuff so exactly like you couldn't even have a reference implementation of that stuff even if even if you had the you know 100 person years or however long it would take to like to implement like a reference implementation of like the standard library like that just wouldn't work on like the way boost does like it wouldn't be cross like cross compiler like that
Starting point is 00:41:00 yeah yeah i see where the problem is like that just doesn't work like that yeah and you know some people have some ideas of like oh well maybe i could refer to a certain standard library header and i could have a list of patches or maybe i could do the cut and paste thing i was talking about and say well this only works for gcc because like you said maybe it's using intrinsics and the other gcc headers and so on so there's not a good story for it yet that someone's come up with so if anyone has any ideas please um you know tell me because i don't know what the answer is all right um yeah okay so um we talked about boost and the committee a lot i'd like to like maybe take the discussion a little bit away from like what the committee is doing and more like towards like kind of using boost and like users that use
Starting point is 00:41:44 boost so so recently boost actually underwent quite a significant change i thought like you what the committee is doing and more like towards like kind of using boost and like users that use boost. So, so recently boost actually underwent quite a significant change. I thought like you dropped support for superstars 98 and 03 from like a lot of libraries, right? Do you know like what impact that had? Okay.
Starting point is 00:42:00 So this, that's a slight mischaracterization of what happened. So, so what we did was, so I should give you this bit of background. So the way that Boost works is it's essentially a confederation of different libraries, right? So every Boost library author has to go through this very rigorous review process. They have to address all the issues of the review that might have existed, and then their library goes in. And then after that, it's the wild west.
Starting point is 00:42:27 They do whatever the hell they want. It's kind of a weird peculiarity of the system, but you are the king of the castle if you're a Boost library author. Okay. So the idea is that if you want to support C++98, C++14, whichever particular version you want to support, then you just do that as a library author. No one's going to stop you.
Starting point is 00:42:46 And that was never changed. So particular libraries may or may not have lost support for C++ 98, but honestly, that was happening. Many, many individual library authors were like, I just don't care if the 98 part of the build matrix fails. I just don't care. Like no one's using that. And none of my users complained about it.
Starting point is 00:43:03 I don't care, right? I mean, some libraries like Boost HANA were even very much written just with more than C++ in mind, right? Exactly. That was a 14 minimum library. It wouldn't even work in 11, right? Okay.
Starting point is 00:43:14 So if you've got that support for 98 in there, then someone somewhere in the test matrix has to be running 98 compiler, 98 mode builds with various compilers of your code. And so that's what we dropped support for. We basically said the test matrix will no longer run those 98 builds and report them. Oh, okay.
Starting point is 00:43:37 So the library might still compile. Exactly. Like if the library author cares about C++ 98, it's on them to make it work and tell their users that they might or might not rely on that. But it's not on Boost as a whole and your CI infrastructure anymore. Exactly. So the project as a whole said that we're not going to put any more infrastructure resources towards this support. But an individual library author, they can have their own GitHub action that tests all the 98 modes of all the compilers they use if they want to that's totally fine that is a really really good
Starting point is 00:44:08 clarification thank you so much for explaining this yeah that makes sense and so in particular like one of the previously most popular libraries for metaprogramming was boost mpl right that's all 98 code and none of that's changing and in fact there's a bunch of boost libraries that over time they've been getting off of mpl you know slowly but there, there's a bunch of boost libraries that over time they've been getting off of MPL slowly, but there's a couple of them that I think still use MPL internally for this or that. And so those would stop working if we said like, you know, MPL is no longer supported and we're going to just remove it or something because we don't support an IDE. So it was nothing that drastic. It was just an internal decision that we're not going to focus on that for our infrastructure purposes. Is MPL still useful for anything compared to modern approaches?
Starting point is 00:44:50 I don't think it is. I mean, so there's MP11, which is Peter Demos library, which everybody loves. But I mean, honestly, I don't even use that because like,
Starting point is 00:44:59 I feel like everything that I would do with an MPL or an MP11 or even HANA, like all these different solutions for for people to do metaprogram there's a bunch of other things outside of boost of course but i find that like writing my own sort of bespoke thing is faster for me uh then because like metaprogram is so much easier now like as a 14 i have automatic return type deduction i have to have this big metaprogram to figure out what the return type is of my function um i just say auto etc etc there's a bunch of things like that right i pack expansions to do a bunch of
Starting point is 00:45:28 other things so i find that typically like such libraries are not useful for me and i don't think that um doing type-based metaprogramming that i need a library for it so but that's not to take anything away from mp11 people really love it they get a lot of good use out of it. But that is, I think, the one that people use now if they want to do within Boost, if they want to do type-based metaprogramming, that's the thing they go to. So there's actually one more thing that kind of happened in the Boost community
Starting point is 00:45:58 that might or might not affect real users. I don't actually know. You mentioned this as a news item i think a couple months ago it was april yeah okay so so um there was some controversy or there is some controversy around a group of people who actually set up a parallel boost website like boost io i think that the main website is boost org right and so they set up a parallel boost website boost io they set up a parallel Boost website, Boost.io.
Starting point is 00:46:27 They set up a parallel Twitter account for Boost, a parallel LinkedIn account. And there was this, yeah, it was in April. Yeah, there was the David Sankel's blog post, or I think some post somewhere, where he characterized those activities as like a hostile takeover attempt. Like the people who are like trying to take over Boost and things like that. We have since heard other people from the Boost community
Starting point is 00:46:53 who actually vehemently disagreed with that description. So I don't know what's actually going on. Since you're quite active on the Boost community, do you have any idea what's going on uh since you're quite active in on the boost community do you have any idea what's going on there yeah so i mean in broad strokes uh david's ankle and vinnie falco were arguing with each other like vociferously on the boost mailing list right and this is something that happens every once in a while you get sweaty nerd rage that comes to the surface and uh you get a bunch of people duking it out and i basically i just don't engage with any of this stuff. Right. So like this is not
Starting point is 00:47:29 super relevant to what I get out of Boost or what I think Boost is useful for, which is again, a very high quality peer reviewed set of libraries. Right. And so if people are going to internet on the internet, I'm just going to just not engage with that. So the facts of the case are not that important. The important part is that people got angry with each other and they did it in a very internet way where it was very bombastic. And I don't think it's as big a deal as people made it out to be.
Starting point is 00:47:58 So I think that ultimately, the Boost library is still available for download and that's all anyone really cares about at the end of the day unless they're super into drama. All right, so nothing to see here. Let's move on. Whatever people have said about this is their opinion.
Starting point is 00:48:14 They disagree on that, and that's fine, basically. Yeah. Yeah. Thanks. That's good to hear a take like that from somebody who's actually active on the Boost community, because if you look at it from the outside, you just have no idea what's going on, how serious this is, who's right.
Starting point is 00:48:33 Anyway, thanks for clearing this up. I have one more question about Boost. Is there anything else apart from the B-Man project and the other stuff that we already discussed that's really new and exciting? Maybe any new libraries coming up in the new release or anything else you're aware of that is coming up yeah so um in terms of boost stuff i mean um you tend not to know about anything until like suddenly there's a boost review for it so i don't know of anything that's on the horizon i'm sure there's some people that got some stuff cooking but i don't know what it is um my you know my library hopefully is going
Starting point is 00:49:02 to be and not this upcoming boost release, but the next one. The parsing library. Yeah. Yeah. But other than that, yeah, I don't really know. Like I said, I kind of take Boost as it comes. Because suddenly you'll have a review for this library you didn't know existed, and then it'll be exciting or something you're not interested in.
Starting point is 00:49:22 It just depends. So I don't know really what's going on because it's just the nature of boost i should really check out your parsing library because like i remember i haven't used the kind of parsing libraries very recently but actually i have a little bit of an anecdote i remember my very first job as a cios developer that was back in 2012 at some point they realized it was kind of music software at some point they realized the build was slow they introduced incredibills which does these like distributed like it builds different translation units distributed on different machines to like speed it up and it didn't really work because you know all of the translation units were compiling like in parallel
Starting point is 00:49:59 except there was this one translation unit that was like taking just as much time as as all the other translation units combined which made the whole polarization process completely pointless and that was the one that like had boost spirit in it yeah so uh i i hope that your your library your library does a better job at compile times yeah so uh boost spirit one i had a translation unit that would take 10 minutes to compile. And the object code, when you had debug symbols in it, it was like 120 megabytes or something like this. I mean, it was like a file of a couple thousand lines. It was kind of crazy.
Starting point is 00:50:37 So, yeah, one of the goals that I had going into this was, oh, I can beat those compile times. We have modern compilers with modern language tricks and stuff I can do better. And sure enough, in the first versions of it, it was like lightning fast compared to what Boost Spirit did before. But then I started adding stuff like, oh, you know, I can probably tell that there's an isomorphism between your tuple and this aggregate or your aggregate and this tuple. And I could just, if you want to fill in the value of a tuple and this aggregate, or your aggregate and this tuple.
Starting point is 00:51:07 And I could just, if you want to fill in the value of a tuple using an aggregate, a thing that parses an aggregate or vice versa, I'll just make that work magically, right? And it does that and it's nice and it's fun to use and it really affects the compile time quite dramatically. So over time, I have basically like done all the magic stuff bit by bit to where you have long
Starting point is 00:51:27 compile times again so it's not great it is you know slightly better slightly worse in spirit too it's not as good as it could be but you know if we get uh the thing i hope it happens in 26 which is like good medical programming support like that will improve again. So I think that that would be a definite goal of the library that I basically failed to hold myself to. So I could get there by
Starting point is 00:51:55 ablating features that I don't want to lose. So yeah, it's going to be slow to compile. So it's still boost in spirit? Yeah. You mentioned metaprogramming just then, possibly coming in C++ compile so it's still boost spirit in spirit yeah yeah so you mentioned meta programming just then uh possibly coming in c++ 26 we're definitely talking about it do you have a particular interest there then yeah absolutely so i'm not involved in those papers but i'm like
Starting point is 00:52:16 watching uh just waiting with bated breath for this to happen so you know a bunch of us didn't really even realize that this was um a realistic goal for 26 until about, I don't know, six months or a year ago. I forget exactly how long ago it was, but we had this session about reflection and metaprogramming in which a bunch of people who had been involved in various papers in the past brought forth three or four papers, one of which was like, here's the language feature. By the way, we have an implementation and here's all these other papers that are people using the actual implementation
Starting point is 00:52:50 we already have, which is a modified version of EDG and someone else modified Clang independently, that use the metaprogramming facilities that we have with this new feature to do these kind of libraries that you would want to do that are metaprogramming heavy.
Starting point is 00:53:04 And here's the results and here's what the code looks like. And it's all spectacular, and everyone's on board, and everyone's super excited. And so it looks all of a sudden like we might get this, because the big problem, there's two big problems with any language feature, right? The first one is getting the right design, and the second one is getting an implementation of it
Starting point is 00:53:23 that people can actually play with and road test it and make sure that the design is implementable. It's still efficient in the compiler. It's easy to implement, all these kinds of concerns. Because it's something that's like tortuously difficult to implement, usually it goes away, right? Like the template export thing that was around for a long time.
Starting point is 00:53:41 Only EDG implemented it and everyone else was like, yeah, no thanks. And we got rid of it. Okay. So now those are the stakes. It was around for a long time. Only EDG implemented it, and everyone else was like, yeah, no thanks, and we got rid of it. Okay. So now those are the stakes. And then the reflection part had been cooking for a long time, right? People had been talking about this for like the better part of a decade, looking at different approaches to it. And so when they came with like, well, this is the approach that we took, we knew that the people behind those papers had had that approach before. And so it was not very surprising. But then really recently, they've been talking about how to do the metaprogramming side of
Starting point is 00:54:11 things really well. So reflection is like taking your code and looking at and introspecting and then figuring out, oh, from this struct, can I see the members and can I see the public members and the private members and all those kinds of operations you would want to do with any kind of compile time reflection. And then the metaprogramming side is saying well i actually want to take the result of inspecting a thing and generate some new code based on that thing right so the the example that i would love to have work is could i have a struct that has a bunch of operations on it class struct whichever whichever right there's a
Starting point is 00:54:46 bunch of operations on it and could i feed that to a meta program that says oh i see all these operations let me make the type erased version of this thing so you give me a class with like operations x y and z and i make you a type erased holderased holder with operations X, Y, and Z in the public interface, and then a holder-based class that has virtual X, Y, and Z, and then maybe a virtual clone. And then it has a template that derives from that holder base that is the actual most derived type of your holder. They have a pointer, and you have like a pimple implementation of copy and write. Not copy and write, width of type ratio. And I was thinking of like, you know, you can make the code,
Starting point is 00:55:30 generate the code for doing copy on write or small buffer optimization or whatever other things, make your own V table, however you want to do it. So I think you can kind of do that with this paper, right? I mean, it's like a,
Starting point is 00:55:42 the thing that's been proposed for C++26 is kind of the first step, but it does have things like define class, and then you can say, make me a class that has these members. You can use any output from any of these reflection facilities to build up those members of that class.
Starting point is 00:55:58 Yeah, that's exactly the point. I think you can actually already, with this proposal, you can do what you just described. Well, I don't know what you mean by this proposal. I forget the paper number, but the one that i think that's like the p2996 like the number whatever like the thing that they're proposing for css26 yeah yeah yeah so so that's the point is that i think that we can get all the way to that kind of very rich metaprogramming support like with the stuff that's proposed. And they've been implementing this stuff along the way,
Starting point is 00:56:27 from what I understand. So again, I'm not involved in these papers, but from what I understand, like there is a very reasonable chance that we could get this in 26. There's always the chance that it could slip. That's always a danger. Even the last, you know, 11th hour,
Starting point is 00:56:41 it's kind of thing you could have a slippage. But like, i'm very excited about that that's the most exciting thing i i think is in c++ including like you know i have four papers outstanding i'm not nearly as excited about any of those i am about this language feature um and so you know i think this is going to be for people like me who do lots of value-based generic programming this is going to be a tectonic shift in C++ that is akin to C++14's generalized return type deduction, C++17's if-concepts-per and C++20's concepts, except I think it's going to be more important than all of the above.
Starting point is 00:57:19 Like for me and my day-to-day work doing generic programming, it's going to be more valuable than all those language features combined. I'm just super excited about it. I think you might be right. Yeah, so that's the thing that really gets me jazzed, and I'm really excited to see what happens at the next meeting. We've got a meeting later this month where we're going to talk about the progress of this stuff. All right.
Starting point is 00:57:39 One thing that did amuse me in that story was you used the example of export template, and you even said, only ever implemented by edg yeah and then later you said and this reflection proposal came along and it already has implementation by hang on checks notes edg but you also said clang as well so so hopefully it's going to go better this time. Well, I don't think export template actually was an idea from EDG. They just were the only ones who managed to implement it. The only ones who implemented it. And I think they wrote a paper about the implementation experience, basically because people were like, maybe we should just get rid of this thing.
Starting point is 00:58:23 So what they found was that when they actually implemented the language feature, it did not do the thing that it was designed to do. Right. Right? Like, the whole point of it was to make sure that, like, what was the point of it? I'm forgetting now. Anyway, so it's not important. The point is that it was supposed to do whatever, and it didn't do that whatever. It did some stuff that was subtly different and made it not very useful.
Starting point is 00:58:45 And what they said about it was, I think they said something like, it took us three times longer than any equivalent-sized language feature we've ever implemented. It was so difficult to get it right. And so once people found out it was very, very hard to implement and it didn't quite do what it said on the 10 then it was kind of gone but but that first part is actually pretty important this is something that people outside the committee might not realize but a lot of times there would be a fairly reasonable thing with fairly good support proposes a language change and someone will say like yeah in our implementation this is extremely difficult to implement.
Starting point is 00:59:27 And I'm not sure if we would be able to do it within like 10 years. Like it would be such a rewrite of this one section of our compiler that is really central to how everything operates that we're just like, it's going to be permanently backburnered for the foreseeable future. And so people would be like,
Starting point is 00:59:41 okay, well then we won't do that. So implementability is a real thing that people care about. Yeah. Yeah. I think what export template was meant to have done is you can define the body of a template in a separate compilation. It's the same way that we do with non templates. So we don't have to include the whole template body every time you use it.
Starting point is 01:00:04 That was what it was meant to do. I think in practice it didn't quite work that way. Yeah, you declare the template in a header and then you define it somewhere else. But we kind of have that now with modules, don't we? Except that we don't actually compile the template because you can't compile an uninstantiated template, but we kind of turn it into something
Starting point is 01:00:29 that the compiler can gobble up much faster than source code. Yeah, which is a big step in the right direction and probably the right trade-off. But yeah, that is interesting. Okay, so traditionally, so we are coming up on time, I think. So we kind of have to start wrapping up. But our traditional last question
Starting point is 01:00:51 is kind of something we, I think we just discussed already. So I'm not sure what to do now. So our traditional last question is, is there anything else in the world of CSL that you find particularly interesting and exciting? And you basically said the same thing already that I think almost every other guest said over the last year,
Starting point is 01:01:07 except I think Niels Lohmann said something different, which I thought was interesting. But I think almost every other guest you had on recently said, yes, reflection and metaprogramming is the most exciting thing going on right now. Yeah, absolutely. So, yeah. I think that itself is interesting and exciting. Yeah, I guess it is. So, I think that itself is, is interesting and exciting. Yeah, I guess it is.
Starting point is 01:01:25 So, um, I don't know. Is there anything else you want to, uh, kind of mention or shout out before we let you go, Zach? Um, no, I can't, I can't really think of anything. I mean, I think we hit on like the, the major points of things that are like, you know, getting me really fired up about C++ these days. So yeah, I can't think of anything else. All right.
Starting point is 01:01:44 Well, that's really cool um do you want to just quickly mention like where people can reach you if they want to like talk about boost or any of the things that we have discussed or yeah uh they can't really uh i don't i mean you can email me if you if you really feel uh compelled to do so um my email address is all over uh the committee papers and stuff associated with my name so it's easy enough to find but uh yeah i really don't do a social media or anything like that i feel like it's kind of a giant time suck for me um so i just don't do it um so yeah i don't i don't have twitter or anything like that yeah well that's fair enough i think i'm
Starting point is 01:02:18 kind of reaching that point myself i'm not really using social media either i still have a twitter account i think that's the only one where I still actually have an account, but I have actually looked at it in like a month or so. Kind of getting to that point as well. I'm not sure if I want to stick, like if I want to stick around for all that. But so yeah, I understand where you're coming from. Yeah, I often feel like I'm missing out on stuff
Starting point is 01:02:40 because people will tell me, you know, I'll catch up with people at the committee meetings or at a conference or something. And people are like, oh, have you seen such and such twitter storm but i'm like i have no idea what you're talking about yeah so i miss out on things i'm sure but at the same time i'm like i have like a life that exists outside of twitter that is uh much more enjoyable i think that if no i i did did notice that like at least for me like my mental health is like
Starting point is 01:03:02 inversely proportional to like the time i spend on social media so all right so with that said uh thank you thank you again so much zach for uh taking the time to be our guest today uh we had a lot of fun having you on thank you so much and yeah we'll see you um and everybody else at the next episode. Yeah, thanks for having me, guys. Thanks so much for listening in as we chat about C++. We'd love to hear what you think of the podcast. Please let us know if we're discussing the stuff you're interested in. Or if you have a suggestion for a guest or topic, we'd love to hear about that too.
Starting point is 01:03:42 You can email all your thoughts to feedback at cppcast.com. We'd also appreciate it if you can follow CppCast on Twitter or Mastodon. You can also follow me and Phil individually on Twitter or Mastodon. All those links, as well as the show notes, can be found on the podcast website at cppcast.com.
Starting point is 01:03:57 The theme music for this episode was provided by podcastthemes.com.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.