Algorithms + Data Structures = Programs - Episode 234: C++Now 2025 Recap!

Episode Date: May 16, 2025

In this episode, Conor and Ben chat about Ben's recent talk and attendance at C++Now 2025!Link to Episode 234 on WebsiteDiscuss this episode, leave a comment, or ask a question (on GitHub)Socials...ADSP: The Podcast: TwitterConor Hoekstra: Twitter | BlueSky | MastodonBen Deane: Twitter | BlueSkyShow NotesDate Generated: 2025-05-13Date Released: 2025-05-16C++Now 2025C++Now 2025 ScheduleADSP Episode 148: 🇸🇮 SRT23 - Robert Leahy on C++ in FinTechC++Now 2025 - Roby Leahy TalkC++Now 2025 - Sean Parent KeynoteC++Now 2025 - Lisa Lippincott KeynoteC++Now 2025 - Ben Deane TalkC++Now 2025 - Richard Powell TalkPython sortPython sortedC++Now 2025 - Braden Ganetsky TalkC++Now 2025 - Dietmar Kühl TalkC++Now 2025 - Andy Shoffer TalkIntro Song InfoMiss You by Sarah Jansen https://soundcloud.com/sarahjansenmusicCreative Commons — Attribution 3.0 Unported — CC BY 3.0Free Download / Stream: http://bit.ly/l-miss-youMusic promoted by Audio Library https://youtu.be/iYYxnasvfx8

Transcript
Discussion (0)
Starting point is 00:00:00 So in a sense, C++ and Java and Python and C sharp, they're all really the same language-ish. They're all descended from Algoll, right? But then something like Lisp or Smalltalk or Prologue, they are different. They are qualitatively different. They're different families. Welcome to ADSP the podcast episode 234 recorded on May 13th, 2025. My name is Connor and today with my cohost Ben, we recap C++ now 2025. How's it going? We're back. All right. Yeah, it's going pretty well.
Starting point is 00:00:53 Yeah, what is it? It's May 13th or halfway through May, which is I don't know what puts that percentage through the summer. Is it officially summertime now? I actually don't know. It might be spring still. It's probably still spring. You know, people say the first day of spring is the spring equinox.
Starting point is 00:01:06 To me that's not really the first day of spring, but... I see. I mean, it depends on where you are in the world, I guess. We don't have much spring in Toronto. It's just cold, then there's a couple weeks, and then it's summer. And then sometimes it's winter for a day or two, like as a practical joke that the weather gods play on us. Fake spring?
Starting point is 00:01:23 I think you pay extra attention to spring considering how short it might be. I guess. I guess. I'm just happy that it's like 20 plus degrees ish in Celsius, which is it's getting, it feels like it's summertime, at least this weekend. It was very, very nice. Yeah. Same in Denver.
Starting point is 00:01:43 In fact, it's been hotter than that even it's been mid 20s I think today it's yeah right now it's 25 Celsius so yeah into the low 80s it's been what is it in it's only 13 degrees right now but that's because I think it's about the weather people are saying it's about to rain or they actually say it's raining right now, which I can tell you is false But hey, it's hard to get the weather right even in the moment, I guess Anyways you were recently at one of the I guess not biggest Decidedly not biggest but but for my money Probably the best the most enjoyable
Starting point is 00:02:28 C++ conference that C++ now, of course in Aspen in Aspen. Yes up in the mountains where the air is thinner Yeah, Aspen's what just over 8,000 feet I think How is how is that? Yeah, I wasn't there but you were you were speaking It was really good You know as it always is, you know, this year the attendance was down a bit, you know distinct lack of the usual a Lot of the usual Europeans did not attend and also some Canadians Tony was not there Notable by his absence, but having said that there were lots of good talks
Starting point is 00:03:04 There were a lot there were still also lots of good folks who did make it. And it was fun. There were some Canadians, Braydon was there. And so was Rob Lahey. Technically, I mean, Rob's Canadian, but he's like, how would you describe, I mean, we had Rob on the podcast, one of my favorite interviews ever.
Starting point is 00:03:22 We were walking through Venice, post wine and much seafood. And he was one of the most articulate while walking posts, wine interviews. I mean, I guess we've only really done it with him, but I couldn't. I couldn't believe how composed he stayed. And but he lives, unless if he's moved since I last spoke to him, he lives in New York.
Starting point is 00:03:46 So he's a, I'd almost consider him half Canadian, half New Yorker at this point. Well, he gave a talk anyway about, let me find the exact title, Extending Stead Execution was his title. So he talked about implementing custom algorithms with senders and receivers. And as is typical for his talks, he always gives a very polished talk. I think he's taken classes in public speaking in the past.
Starting point is 00:04:17 Yeah. And his talks are very polished and especially this one, because he showed a lot of C++ code. It was very dense. So it's the kind of talk I'm going to want to go back and watch again on YouTube. But it was it was a great talk to sit in and I I managed to follow most of it at the time. But as you know, with these things, you know, you need to go back and sort of reinforce. You know, you need to go back and sort of reinforce. Yeah, no, definitely. And I guess we should we should mention this now for the listeners that are going to definitely be curious about this.
Starting point is 00:04:53 Do we know because it's changed from years past how these videos get released. It used to be they kind of came out super quickly. I saw on Reddit now that there's like a if you're very eager, I think you can pay some money to get access ahead of time and then they're gonna slow I don't actually know the full details. Do you know well, so I don't know I Don't really know what timeline they'll be coming out on But but yes If you if you went to the conference you do get the early access Or you can buy the early access as several conferences are doing now i think i read somewhere that the first videos will be out.
Starting point is 00:05:34 About a month after the conference so that will put it at the end of may beginning of june. And I expect, although I'm not sure, the keynotes might be out before then, or certainly the keynotes are usually among the first to be released. Yes. Yeah. Okay. Well, so as I always do, I will link the talks in the show notes of either the website or the podcast app, but they will usually be unlinked for the first several months. Oh, that's right.
Starting point is 00:06:06 They're unlisted on YouTube. Yeah. Yeah. Well, not unlisted, like, but it'll just be the text of the link that will be there in the future. Oh, I see what you mean. And so I will anytime like I peruse the C++ subreddit and they have those videos that have been released.
Starting point is 00:06:21 So whenever I notice that there's a talk that comes out, I will retroactively go back and it's better to check the website. I don't usually go back to the podcast episodes because that's more work than it's worth. But anyways, you can check back on the website show notes for when these talks do come out. Right. But they will be. So if we're talking about a talk, you might not be able to watch it today. But if you're listening to this, you know, months in the future, so not May of 2025, it's probably already out online. So you can go check out Rob's talk and any of the other talks we're about to talk about, including yours. Yeah, yeah. So there were three keynotes. Sean gave the first.
Starting point is 00:06:57 I saw that. How was that? You know, it was good. It was really good. Sean will forgive me for saying this, but I'm in the same boat, but sometimes I feel like some of us have already given the most impactful talk we're going to give, you know, in terms of the most, you know, like see, it's hard to live up to C++ seasoning, given the impact that had. But it was a great keynote. It was called Are We There Yet?
Starting point is 00:07:20 It was a follow-up to his original keynote from C++ Now, the first one I think. Yeah, I saw in the, I think, description of the keynote it said it was a follow-up to BoostCon 2007, which I didn't even realize it went back that far. Maybe I'm misremembering. It was 2000. To 2007, yes. A possible future of software development. That was Sean's keynote in 2007. I wonder if that talk, because I'm not sure if they go back that far before C++ Now. I know some of the BoostCon talks are online, but I would be surprised if that is even available. Yeah, it was very sketchy before about 2014, 2015. That's about as far back as videos go. And even back in those days, some of them were before video sponsors.
Starting point is 00:08:11 Yeah, I was actually just, was it a week ago or two weeks ago? I can't remember how I found my way down the rabbit hole, but I ended up trying to watch a couple of Bartosz Maluski's really old C++ Now videos, but like it's like a camera recorder stood up and so depending on the year it's like the light wash you can barely make out what's on the screen and all you see is the shadowy figure with you know Bartosz's crazy haircut. Anyways not very watchable is the point so yeah anyways so a good talk but I mean like you said C++ seasoning
Starting point is 00:08:45 hard to hard to live up to. Yeah. And I don't think I'll ever live up to, you know, context for all the things again. You never know. You got you got a few decades ahead of you. So yeah, so that was great. So Sean's keynote, we started off with Lisa had the midweek keynote, Lisa Lippincott. And that was a really great talk. I didn't actually realize that was a keynote because the title of it made it seem like it was a...
Starting point is 00:09:15 What was the title? Balancing the Books. I thought that was like a agenda item similar to the library of the week. We need to take a look at the finances. No, no. It was Lisa's midweek keynote and she talked about double entry bookkeeping across the function call interface. And it was a really interesting talk and I thought very easy to follow. Some of Lisa's talks get quite mathematical and although people might think I'm good at maths I don't have formal math training beyond high school.
Starting point is 00:10:00 So I follow and keep up where I can. But anyway, balancing the books was great. It was she was talking about yeah so double entry bookkeeping of the contract of the rights given to the callee by the caller and the duties also imposed upon the caller by the callee. Right and so she presented a way of where both sides can hence double entry both sides can keep a record of credits and debits in the rights and duties and it gets to something like well it gets to something like borrow checking you know Well, it gets to something like borrow checking, you know, and it gets to a form of safety, we might say. But I'm really not doing it a good service there.
Starting point is 00:10:54 You should watch the keynote when it comes out. I was going to say, this sounds like a talk that you need to watch in order to fully grasp the ideas she's putting forward. Yeah, yeah. Some really interesting ideas in that one. And then the final keynote was Jeff Garland's keynote where it was, Generic Programming Considered Harmful. Now, I'm not a fan of the title because I'm not a fan of cliches in titles these days.
Starting point is 00:11:25 But the talk was great. I thought the talk was really, really, really good. Is it advocating for what the title says or is it the opposite? Because a lot of times it's click bait and then they would bait and switch. Quite the opposite. Jeff is very heavily into generic programming. He's one of its great practitioners over the years in terms of boost libraries and other things.
Starting point is 00:11:50 So the title was really asking the question which the talk answers as, and the answer is no, I think. I see. Okay, so another one to put on the list. And there was a, I mean, a ton of other talks, some that mentioned generic programming, yours as well. And I noticed that there was, I think four different talks, or maybe only three, that there was a couple talks that
Starting point is 00:12:14 mentioned declarative something. Yeah, yeah. So there was, I think three. Yeah. Well, so and they were quite, they were quite, they turned out to be quite different talks. So one was declarative refactoring for the masses. That was Andy Soffer's talk. Andy is an engineer at Bronto Source and that he has that company with Matt Kulukundis and his talk was about their tool that refactors, I think, C, but maybe also C++ into Rust.
Starting point is 00:12:50 Oh, wow. I sadly didn't attend Andy's talk because it was in a time slot where I had to do something else. Then the other declarative talk was Richard Powell's talk, techniques for declarative programming in C++. And that was a really good talk for my money. That was, although again, it was in a time slot where I wanted to watch all of the talks in the time slot.
Starting point is 00:13:17 The sign of a good conference. But what was good about Richard's talk, I thought, was that he successfully did what I try and sometimes succeed in doing, but more often fail. He took kind of more everyday C++, so he wasn't talking about super template metaprogramming, like heavy stuff. He was talking about using a WX widgets framework in C++ and just writing applications and showing how to refactor the code to make it more declarative in the series of steps.
Starting point is 00:13:52 I thought it was a really nice talk, really some good learnings from that. Because as much as we try to program, well, I guess I shouldn't say that. I do do declarative programming and I do do generic programming as much as I can. But I also have to do object-oriented programming and I have to do structured programming and imperative programming as well. It's not all one way. We have to synthesize them all together. Because at the end of the day, at the bottom of everything, it's all imperative. And sometimes imperative is the right choice. It's like Stepanov in his efficient programming with components A9 series, which I'm now working through after having finished from mathematics
Starting point is 00:14:45 to generic programming. And like the first couple lectures, he has this little five minute digression on OOP because he's making use of OOP. And he's like, listen, listen. You know, they say I'm on record saying I don't like OOP. And that may or may not be true, but doesn't mean I'm not going to use it when it's the right tool for the job. And so yeah, it's just because you're a big fan of generic programming, AKA Stepanov or yourself, doesn't mean you're not going to use other paradigms or techniques
Starting point is 00:15:11 when it's the right thing to do, right? Right, right. And the right thing to do is sometimes just the way it is in the code base you're working in, because it's too much to change. That's what one of Tony's big things is, right? Is the right style or right formatting is whatever the surrounding code is doing,
Starting point is 00:15:30 because anything else is just going to look out of place. Right. So yeah, so my talk was another declarative one. I called it Declarative Style Evolved. Call back to my 2018 talk about declarative style. Is this a sequel, an official sequel or official sequel? It's a sequel of sorts, I suppose. I don't really know.
Starting point is 00:15:55 I was talking about declarative structure. So if the first talk was talking about style at the level of individual function calls and function bodies and expressions, then this talk was more talking about the level of APIs. So structuring APIs for a declarative style somewhat, but also recognizing that, well, part of it came from, or most of it, I would say came from the work I do now, which is, you know, embedded work very heavily, IO, right? And if programs are sort of, you can imagine on a balance, we have maths on one side and IO on the other side, all programs do some of both, or almost all
Starting point is 00:16:45 programs do some of both. Most programs do more maths than IO probably, but most programs on embedded, like my work, do way more IO than maths. It's all about marshalling data between I-O modules and things like that. There's very little calculation. Anyway, and also in embedded, a lot of things are just at the level of there is a global API. So that was a theme of my talk as well. We've got a global API for doing logging. We've got another global API for doing concurrency, another one for doing handling errors, that kind of thing. When you say declarative APIs, in my head, the two things that pop up are the sorted versus sort functions in Python, where one's in place
Starting point is 00:17:46 versus out of place, and other things like fluent APIs, or the builder pattern, where you're kind of, instead of having a bunch of in place, do this, do that, you can kind of chain some stuff together, and then under the hood, like you said, it's a bunch of mutation. Is that the right idea or is it your talk focusing on, on something different? I think my talk was sort of at the level above that, or it's like, how do you choose which API to use? Because one of the problems, one of the recurring problems with particularly
Starting point is 00:18:19 with embedded work is you, how do you test it? Right. So you want to be able to use the same API on the platform as you do in desktop tests. Right? But the implementation needs to change. Right? Because you want to test at the level of the API
Starting point is 00:18:40 and push down as much platform-specific implementation as possible. And that's what this talk kind of addressed. You know, so I can declare at the level of which implementation to use for the API. And I can push that down as far as possible so that tests as far as much as possible can just use the same API and even the same implementation down to as far down as I can push it. Interesting.
Starting point is 00:19:08 So this does sound like a very different talk than your first. It was a very different talk. It covered all kinds of things. One of the surprising sort of conclusions I reached in making the talk was that I don't think that tests, I think tests should be imperative. And actually after the talk Kirk,
Starting point is 00:19:28 Kirk Shoop, I was talking to him, I think the day after or so and he said, he said, you know, I think that's probably because tests don't compose, we don't compose tests. And I made the point in the talk that tests should be simple enough that you just say, arrange, act, assert, right? That's the classic kind of trio of things you do in a test. And you just, if you just have arrange, act, assert, that's imperative. There's no reason to go down a declarative programming route to make that any simpler. I guess I'm trying to think what do you mean by because when I'm thinking of like the unit test that I have most recently written, definitely there's a statement and assertion at the end, but usually it's a construction of some input and then you are doing the act, which in my
Starting point is 00:20:20 case a lot of the times like it can be, well, is it declaratively done? It'll just be, you know, like autoconst result equals, et cetera, et cetera, of the input. And then you have your autoconst expected, and then you assert that those things are equal or whatever property you're checking. So I guess when you say tests should be imperative, is that an example of an imperative test? And if so, is it the it's the assertion at the end? Or I guess what's what's the difference between declarative and imperative testing? You know, let's not get hung up on trying to define what imperative versus declarative means. But I think tests ought to be short.
Starting point is 00:21:03 They ought to be short enough that you can just, the test takes up no more than your visual field of view at the distance of your monitor. So the length of a test ought to be like, you know, less than 10 lines. Yeah, I was thinking 10 lines is the same. And what tests should not be, we can contrast that with what tests I often see, which is tests that use mocking frameworks tend to get longer, they tend to confuse, arrange with assert, because mocking frameworks invariably do this thing where you set up expectations.
Starting point is 00:21:47 And so it's confusing the sort of temporal reasoning about the test. You're putting the arrange and the assert in the same place. And then finally you're doing the act. I usually find that when mocks are used, it does not improve things. I've seen, you know, maybe there's a way to use mocks well. If there is, I mostly haven't seen it on teams I've worked in in my career. And so I've come to the conclusion that mocks just confuse things in perhaps trying to make, you know, we can argue whether it's declarative
Starting point is 00:22:25 or imperative. But anyway, that style, that style I don't like. Yeah, I mean, I can get behind that. I honestly have never used a mocking framework. And whenever AI recommends me using mocking, I'm like, no, we don't need to do that here. That's not necessary. And I used to listen to an Android podcast and they were always talking about, I'm going to get these wrong for the Android devs that are listening, but it's something like Dagger versus juice versus there's all these dependency injection and mocking frameworks for tests. And I remember
Starting point is 00:23:00 listening to it just being like, what, why is all that stuff necessary I guess you in some cases it is if you're trying to do some like UI testing you have to set up some some state and whatnot but I don't know I guess as a library developer you very rarely have need for like mocking and if if someone's telling you that you do I don't know I would question that I agree and the level of unit tests what I want is for things to be simple. Things to be so simple that I don't need to reach for a framework to mock out APIs. I just want to test the one function I want to test in that test.
Starting point is 00:23:38 Yeah. Yeah. Yeah, I totally agree with that. Mocking frameworks also, this might not be true of all mocking frameworks now, but I think it's certainly still true of the majority that they absolutely live for the classical object oriented class hierarchy virtual function world. And that pushes you, that sort of makes the tail wag the dog, right? If your test framework is dictating how you structure your code so that you can test it, then that seems the wrong way around to me, which is another reason I don't like mocking frameworks. Right. Right. Okay. Yeah, I definitely can stand behind that. I can't necessarily say that I've seen all mocking frameworks
Starting point is 00:24:26 used poorly or not optimally, but that's just because I have avoided them. Have not worked on a team or a library that has to make use of them. We almost always just use unit testing frameworks and try to write short tests. Anyway, so there were lots of other good talks. Brayden gave a talk, Brayden Gnetsky, Lambda All the Things, which was a very fun talk
Starting point is 00:24:57 where he took the idea of, you know, can I make everything from lambdas? Can I make type traits from lambdas? Can I go down this road? It was a very nice talk for C++ now, because it was one of these talks that, obviously, no one would do that in their production code. But it's the sort of talk that's a playful talk, a talk that explores an idea and takes it to even absurd conclusions, but
Starting point is 00:25:27 we learn things along the way, right? Right. Yes. That, in my view, is very much the spirit of C++ now, you know, the playfulness. Yeah. I mean, you've given talks like that in your past as well. The std accumulate algorithmic empire does kind of the same thing, right? What, you thought that was not serious?
Starting point is 00:25:50 I think you said as much in the talk. Yeah, again, yes, it was exploring an idea. I tend to do that a lot in lightning talks as well. You know, show some weird thing. And you know, you and I are both fans of languages in general. And the idea that languages embody computational paradigms. You know, so in a sense, you know, C++ and Java
Starting point is 00:26:24 and Python and C sharp, they're all really the same language ish. They're all descended from Algoll, right? But then something like Lisp or Smalltalk or Prologue, they are different. They are qualitatively different. They're different families, right? And so sometimes I think about languages like I have a sort of term that I use where it's everything is an X language. Is this language and everything is an X language?
Starting point is 00:26:57 You know, C++ is not, but like Scheme is. Everything's an S expression. Everything's an expression, right? Lua is. Everything's a table right prologue everything's a clause is that those kind of languages which really lean heavily onto one idea and just see how far they can take it and in many cases they can take it so far as to be to be a completely kind of program complete programming paradigm. There's some quote and this is where I wish I was better at I
Starting point is 00:27:28 had a friend Adam who always knew the aphorism or witticism for the moment he always just had him top of mind but there's some quote or aphorism that's you know, constraint breeds innovation or something like that. That is basically what you're talking about there that, you know, basically what you're talking about there. That limit what you're allowed to do and then you come up with a novel solution that would have seemed impossible or you never would have explored in that direction because you've got other paths available, right? Right, right.
Starting point is 00:27:59 Any other talks worth mentioning while we're winding down the C++ now recap. There were lots of other good talks. Dietmar Kuhl gave a talk called Getting the Lazy Task Done, and that was about another talk about senders and receivers and their application. In that case, their application to co-routines was the topic, I believe. Yes. And Zach gave a good talk about about writing stood compatible
Starting point is 00:28:33 views. And then a talk I didn't get to go to was Steve Downey's talk, but which I will make sure to catch as soon as it comes out, building streams out of hot air. Oh, that's a catchy title. Using senders and receivers to build streams in the style of SICP in the sense that, you know, I think it's about lecture five or so where they show that, you know, what you thought of as data really doesn't have to be data under the hood. It can just be made of functions.
Starting point is 00:29:12 Right. And so I think Steve's talk went down the similar vein, although I didn't get to see it in person because it was, you know, one of those talk slots where there was a lot. Right, right, right. I'm trying to think. Yes, I remember that part and they have a number of exercises where you are calculating the next, you know, number. I can't remember if Ramonajan was one of them. But yeah, it's a common.
Starting point is 00:29:40 Yeah, in learning functional languages, that's a common exercise as you get toward the intermediate level of like the lazy stream, the infinite stream. And then you can start out with like an infinite iota stream. And then you can, of course, famously, you can do the Sivaritostinis to filter out. You just take the head of the stream, you start the stream with two, you take the head and you filter out that and they take the head of the stream, you start the stream with two, you take the head and you filter out that and they take the head of that stream, filter out the next, you end up filtering out all of the multiples of primes. Yes, a very nice implementation of what can be, well, not hairy necessarily, but it's,
Starting point is 00:30:23 you know, if you look at the different implementations technically you're supposed to start it What is it two or three and and do some first pass for efficiency, but? You can just build that one up and very very quickly Okay, well all of the talks and the talks we didn't mention. I'm sure that there was more than Ben could mention. I'm sure I forgot several, but I'll kick myself for not mentioning, but. We can't mention them all though. There's way too many,
Starting point is 00:30:54 but links to all of them, like I said, will be in the show notes. They probably will all be quote unquote, unlinked for the next period of time. But yeah, if you're listening to this in the future, they probably will be updated. So yeah, C++ now in the books. I'm not sure what's the next,
Starting point is 00:31:12 might be C++ on C. Yeah, I know that one's at the, typically it's at the tail end of June. And then Cpp North is in July. Yep. And then I think that brings us to CPPCon. There might be, I know actually there was, I think it might have already taken place. There was a virtual C++.
Starting point is 00:31:31 I was going to say C++ Under the Sea is somewhere in there as well, right? That one was October last year. And my guess, I actually know, I think I know it's the same, roughly the same time. So I think it's in October sometime. And yeah, there's a bunch of other ones. I mean, I know meeting C++ is in November as well as Code Dive. Pure Virtual C++, which I think you were about to say before.
Starting point is 00:31:56 The one day Microsoft online conference that, yeah, that happened during the week of C++ now, I believe it was I think it was April 30. Oh, that's a bad sport timing. It was the same last year. Oh, was it last year? Yeah, 2024. Yes, I had to record my talk.
Starting point is 00:32:20 Side brand reached out to me and they said, would you like to give a talk at Pure Virtual C++? Because Cy, I think they originated the conference or they were certainly a driving force for putting it on. And yeah, so, and again, it fell during C++ now. So I recorded my talk ahead of time and sent it off. So then I was at one conference, able to attend another, I guess. A copy of you was speaking at another conference for some definition of the word copy.
Starting point is 00:33:02 Yeah, I don't think I saw any of the talks from this year. but yeah, we'll link in the shout-outs. There's tons we live in. That's one of the best parts about C++ is that we, there's a cornucopia of content in the form not just of lectures, but podcasts, blog posts, which is, can't be said of all communities. And as someone who likes to ingest as much of that kind of stuff as possible. Yeah, it's great to be able to watch this stuff. All right. I mean, we should maybe put a bow on the C++ Now 2025 recap and transition that was what
Starting point is 00:33:33 episode 234? Be sure to check these show notes either in your podcast app or at adspthepodcast.com for links to anything we mentioned in today's episode, as well as a link to a get up discussion where you can leave thoughts, comments, and questions. Thanks for listening, we hope you enjoyed, and have a great day. I am the anti-brace.

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