CppCast - Holiday Special with Phil Nash and Timur Doumler

Episode Date: December 23, 2022

Rob and Jason are back, at least for the holidays, and are joined by Timur Doumler and Phil Nash to talk about some of their recent news, and a super secret new project they are working on together. ... News Boost 1.81.0 released CLion 2022.3 released, with CMake debug and new (opt-in) UI C++ support in JetBrains' Fleet C++ passes Java on the TIOBE index "If we must, let's talk about safety" (Corentin Jabot) P2723R0 "Zero-initialize objects of automatic storage duration" (JF Bastien) NDC TechTown - Call for Speakers (ends May 19th) C++ on Sea - Call for Speakers (ends Jan 8th) ACCU - speakers selected, schedule soon Links P1774R8 "Portable Assumption" ([[assume]]) P2590R2 "Explicit lifetime managerment" (std::start_lifetime_as) "Type punning in modern C++" (video) "The Rules of Three, Five and Zero" (article) "Beyond the Rules of Three, Five and Zero" (article) "The Power of Clean C++" (webinar) Jason's C++ eBooks Jason's C++ print books Jason's "C++ Weekly" Youtube channel "Making C++ Fun, Safe, and Accessible" - Jason's C++ on Sea keynote

Transcript
Discussion (0)
Starting point is 00:00:00 Episode 350 of CppCast with guests Phil Nash and Tamir Dumler, recorded December 19th, 2022. This episode is sponsored by JetBrains. JetBrains has a range of C++ IDEs to help you avoid the typical pitfalls and headaches that are often associated with coding in C++. Exclusively for CppCast, JetBrains is offering a 25% discount for purchasing or renewing a yearly individual license on the C++ tool of your choice. CLion, ReSharper, and ReSharper C++, or Rider. Use the coupon code JETBRAINS for CppCast during checkout at www.jetbrains.com. In this episode, we talk about several new releases, a new version of Boost, C-Line, and Fleet. Then we talk to Timur Dumler and Phil Nash. Timur and Phil talk to us about a couple of committee proposals, their developer advocacy,
Starting point is 00:01:02 and a new project they'll be starting together. Welcome to episode 350, a 2022 holiday special of CppCast, the first podcast for C++ developers by C++ developers. I'm your host, Rob Irving, joined by my co-host, Jason Turner. Jason, how are you doing today? Well, you know what, Rob? For the first time ever in owning a smartphone, I managed to shatter my screen today. Oh, wow. That it's i i legitimately shattered it i've i've had smartphones since like the first android phones that were teeny tiny ridiculous yeah ones that are keyboards yeah mine has had the physical forward and backward buttons on it back then i didn't have an actual keyboard yeah anyhow so it could be a better day, but how are you doing? I'm doing okay. You know, I don't have too much news to share.
Starting point is 00:02:19 Obviously, we've taken a little bit of a break, but it's the holidays, so we wanted to get back together, do a show, right? Yeah. By any chance, have you seen the holiday special from Guardians of the Galaxy yet? Yeah, absolutely. It was hilarious. It's awesome. Yeah. My, my daughter really wanted to get the, um, the ugly Christmas sweater that Drax was wearing in the show with the, uh, it is available. And for listeners who may have not seen it, uh, it's a cat shooting lasers out of its eyes riding on a piece of pizza um and you can find it online but uh it was very sold out uh hot item i suppose i was just really hoping that that christmas song would end up on the radio but i have not heard it yet we we watched the whole special once but then we watched the
Starting point is 00:03:05 the christmas song like three or four times we enjoyed that song so much it was great yeah all right uh well the top of every episode i'd like to read a piece of feedback uh we got this tweet uh along with many others uh this one was from bowie owens uh saying i want you to to do one more episode where you just read from the outpouring of positive feedback you're getting right now. I feel like your podcast is a big factor in why there is a C++ community. What you two created is far more than just a bunch of words. Thank you both. And thank you, Bowie.
Starting point is 00:03:39 And thank you to everyone else who sent us kind words back in May when we put up our last episode. And, you know, I want to point out because I do try to point this out whenever anyone asks me about this, because I've been on a couple of podcasts as a guest and such since we started our hiatus, that really, Rob, you're the one that created CBPCast. I get credit, but really I was just the second guest who happened to stick around for longer than I was invited, I guess. Made us more respectable a whole lot. I don't know how I made it more respectable, honestly. I think so. I think so. Okay. Well, we'd love to hear your thoughts about the show. You can
Starting point is 00:04:19 always reach out to us on Facebook, Twitter, or email us at feedback at cppcast.com. And don't forget to leave us a review on iTunes or subscribe on YouTube. Joining us today are Timur Dumler and Phil Nash. Timur Dumler is a developer advocate for C++ tools at JetBrains and an active member of the ISO C++ Standard Committee. As a developer, he worked many years in the audio and music technology industry
Starting point is 00:04:42 and co-founded the music tech startup Cradle. Timur is passionate about building inclusive communities clean code good tools low latency and the evolution of the c++ language has previously been co-host of the virtual audio programmer meetup timor welcome back to the show hey thanks for having me it's been a while thank you it has three years yeah three years really yeah yeah so you did not have the job as developer advocate for JetBrains three years ago when we last had you on. No, I wasn't. I didn't. Phil did.
Starting point is 00:05:10 Yeah, that was me. Well, speaking of Phil, Phil is the original author of the C++ test framework, Catch-2. He is interested in all aspects of software quality, which led him to become C++ developer advocate at Sonar, who focuses on tools for clean code. He's also a member of the ISO C++ Science Committee, organizer of C++ London and C++ on C, and has previously been co-host and producer of CPP Chat and No Diagnostic Required podcast. He might have more news in that area in the near future. Phil and Timur, both welcome to the show. Thank you very much. Good to be back. I was on a little bit more recently than Timur, but still about a year ago now, I think. Were you a developer advocate for Sonar then?
Starting point is 00:05:51 I think we had you right when you started at Sonar. Yeah, just a few months in. Well, since we're not so far away from this, did C++ on C go well this year? It did, yes. Not everything according to plan. We made a few changes along the way, responding to the facts on the ground. But yeah, it was a big success overall. So hoping that next year is going to be an even bigger success.
Starting point is 00:06:17 And I think we'll talk about that in a bit. Okay. Yeah. Well, yeah, we'll talk more about what you're both up to. But I guess let's go into the news. First, we have a new version of Boost coming out. This is version 1.81.0. And this is like a huge, huge release.
Starting point is 00:06:39 Yeah, it's gigantic. Yeah. One new library, a URL library for parsing, modifying, and printing URLs. What? I thought you could do that with just a simple regex. No, I'm just... Has anyone read through all this? Are there specific things we should highlight? I see there's a couple of major updates listed in here.
Starting point is 00:07:04 I've briefly looked at the list i saw that was very very long and then i kind of gave up and decided to have a look at it later yeah there's a couple of deprecations interesting a couple of deprecations file system path is going away i think right no no not the path is yeah path is going away, but then also they're limiting the ways in which you can construct a path. And I have to be perfectly honest. I don't fully understand what exactly that they're doing here. Like you cannot have a vector of cars and a pan that to a path. It has to be a string like thing, but honestly, isn't a vector of cars, a string like thing? Yeah. Yeah.
Starting point is 00:07:46 There must have been a reason for it, though. Was that something people were really doing, though, putting together vectors of chars instead of a string? I don't know. I've seen it done. Yeah, I've probably done it, because I would have had to interact with a POS6 API or something, and I would have used a vector of cars in that case, and then the data would already be there.
Starting point is 00:08:04 Gotcha. I think it's interesting that things like file system are still getting so much attention, given that it got adopted into the standard some years ago now, but just goes to show that we do need libraries like this that can be updated slightly more frequently and freely. Well, and looking at how many updates have been to ASIO in this release, it does, again, just make me ponder
Starting point is 00:08:27 what exactly belongs in the standard library. But since I am still not a member of the standards committee, I get to pontificate about these things. Yeah, that's for the two of you guys to worry about, I guess. Next, we have a update from SeaLion on JetBrains.com. This is SeaLion 2022.3 release. And this looks like a really, really big release for SeaLion. They're adding, like, CMake debugging, which is pretty awesome.
Starting point is 00:09:02 It's pretty crazy. A bunch of other things. Yeah. That's like with, you know, great power comes great responsibility kind of scenario. If I can debug my... Actually, I tweeted about this when I first saw the announcement
Starting point is 00:09:16 and a fair number of people responded with things like they think that it might just encourage people to write more complicated CMake scripts now that they have more powerful tools for debugging it. I don't know if that's a fair assessment or not. Yeah, I don't think people need much encouragement there. Right. The other thing I thought was a really nice addition was the single file support.
Starting point is 00:09:40 So if you're just making some small project just to test something out that fits in a single file, you don't need to make a project for it. You can just run that one file from the IDE, which is pretty cool. That just finally brings it all full circle from when I first started learning C++ with Vim, and I would just edit and then compile that one file back and forth. And of course, we have to mention the most controversial feature. Oh, what would that be? The new UI.
Starting point is 00:10:09 Well, it's hopped in, but not everyone likes it, but I think it's overall got positive feedback. I've heard some complaints. All right. But I haven't seen it yet myself. But you can,
Starting point is 00:10:19 like, it's in beta. You can like turn it on, turn it off, and then keep polishing it. Okay. And then we also have the module support, which I think is the other really big, cool thing. Yeah, that's pretty crazy.
Starting point is 00:10:32 But does CMake support? How are you doing this? What, the CMake debugger? No. How do you support modules without build tools supporting modules? Well, we do kind of of so cmake kind of supports modules right oh okay so um i'm not sure exactly like the details of how it works but from what i know is like cmake has this like version where you can ask it to figure out what the dependencies
Starting point is 00:11:02 are and then you get like this kind of info dependency info back. And then we use the CMake file API to get that info. So we do interface with CMake to get that information from what I know. Anything else worth highlighting here? Obviously, like I said, it's a really large release, but anything we should mention that wasn't mentioned already? Only that I said several times,
Starting point is 00:11:31 C++20 modules will be a C++23 feature, and it seems to be proving to be about true. Yeah, so you get to get kind of syntax highlighting, and you can navigate into a module and all of the things that you would kind of expect. Nice. Okay, and then the last thing we have, this is also from JetBrains,
Starting point is 00:11:51 and this is on Twitter. The tweet says, C++ support comes to Fleet version 1.12. Get a compilation database for your project and try out Fleet for C++ development. So I'm not too familiar with what Fleet is. What does this mean? We need an overview about Fleet real quick. for C++ development. So I'm not too familiar with what fleet is. What does this mean?
Starting point is 00:12:09 We need an overview about fleet real quick. Give us the elevator pitch. Yeah, in one sentence, it's like a new IDE from JetBrains written from scratch that supports all kinds of different programming languages. And it's very thin and lightweight. Is it still written in Java? It is not. Oh, it's kind of like the difference between visual
Starting point is 00:12:28 studio and visual studio code um you can think of that a fair comparison i think it's a very fair comparison so it's kind of written from scratch like nate is a native app um and yeah it supports all kinds of programming language it's lightweight, very kind of fast and very modern. And yeah, we now added C++ support to it. So it's still a preview. So like, for example, it doesn't do CMake yet. Like you have to actually create this compile commands JSON file, which you can do from CMake or from Clang or from GNU Make.
Starting point is 00:13:02 But then once you have that, you can like, it gives you like code completion, navigation, error handling, like all the basics, but like in a very lightweight package. And hopefully in the future, it will also support CMake. So you can just open a CMake project
Starting point is 00:13:14 like you already can in CLang. Okay. You know, I just somewhat jokingly asked if it was still written in Java. You said it is not. It was a native app. So now I feel like I'm required to ask, is it written in Rust?
Starting point is 00:13:30 Is it written in C++? Do we know? Do we care? Actually, no, to be honest. I can find out. So I believe there was some Rust in there in the early versions that I knew about when I was still at JetBrains. I don't believe most of that actually made it to the final version.
Starting point is 00:13:50 But I'm long gone, so I've lost that. So it's written in Fortran now? Probably Fortran or COBOL. Visual Fortran. I believe Visual Studio Code is like HTML JavaScript. Oh, so no, it's not like that. It is not any JavaScript, Electron or anything like that. It is native code.
Starting point is 00:14:12 I do not know what programming language is the predominant one. I'd have to ask my colleagues. But yeah, it's not any JavaScript based stuff. Okay. From what I know. All right. Well, it's been a while since we've talked to either of you so i think there's a couple things we wanted to catch up on uh timor you're working on
Starting point is 00:14:32 p1774 can you tell us a little bit about that paper yeah so i um i've been working on this paper for over three years now um and it's now actually in c++ 23 so it was voted into the c++ 23 draft um i think like which plenary i think in june at the june plenary and then in kona last month we had a committee meeting in kona where somebody proposed to take it out again because it's dangerous you know we discussed that and it was we did not have consensus to remove it so uh it is in and it's going to be in C++23. So in a nutshell, it's called portable assumptions. It gives you this new attribute, double square bracket assume,
Starting point is 00:15:13 and then you can say assume some expression. And what the compiler is going to do with that, you can say assume x greater than zero, for example. And then what the compiler is going to do with that is that at that point in the code, it's going to say, okay, you've told me that x greater than zero. I'm. And then what the compiler is going to do with that is that at that point in the code it's going to say, okay, you've told me that x greater than zero. I'm going to not check that. I'm going to assume
Starting point is 00:15:30 that this is true and then optimize based on that assumption. So if you put in basically an expression that's false, then that's just instantly UB because the compiler will optimize based on the fact that this is not going to happen. So for example, if you say x equals zero, like x bigger than zero, you're not going to happen so for example if you say x equals zero like x bigger
Starting point is 00:15:45 than zero like you're not going to get any um like instructions handling like the negative case like they're just going to be optimized away but this way you can make your code like smaller and faster so it's great for like low latency real-time stuff where you have to like squeeze every nanosecond out of your code but if you get it wrong you get ub so it's kind of a very sharp knife so therefore it was very very tricky to like specify it exactly right and to get everybody on board on like how this exactly should work because it's been in clang since forever like underscore underscore built and assume and microsoft and gcc and microsoft and icc have it as well underscore underscore assume but they all kind of behave slightly
Starting point is 00:16:24 differently so like to get the behavior exactly right so that like we agree on what this now does uh was tricky took a long time but yeah now it's there and it's it's yeah it's great for this kind of like optimizing for speed stuff but it's one of those things like memory ordering or like reinterpret cast but you really kind of have to know what you're doing. You want to use this. So on the topic of reinterpret cast then, start lifetime as? Yeah. So that's the other one. That's P2590.
Starting point is 00:16:52 So that's another one that was voted in like very recently, but now we got it in C++23. So we got since C++20, we have this thing called implicit lifetime types, which was a Richard Smith's proposal, where basically, which is this thing that people have been writing for ages, but was always undefined behavior until C++ 20,
Starting point is 00:17:15 where you say malloc, like a bunch of memory, and then you reinterpret, cast it to a widget star, and then you just read, cast it to a widget star, and then you just read it through this widget pointer. And that's undefined behavior because you have never called a constructor of a widget object. So you're accessing the memory as if it was a widget,
Starting point is 00:17:39 but there is no object of that type actually within its lifetime that has been created. So notionally, it's undefined behavior. It kind of works on most compilers, but... But that's still undefined behavior in C++20. No, so in C++20, it says
Starting point is 00:17:55 certain functions implicitly create objects. malloc, when you create a char array, memcpy copy so you can like if you get like just bits from like the network or something i think um and then if you cast it to a pointer of an object and then that object is an implicit lifetime type so it's either an array or an aggregate or like a built-in type or or it has at least one trivial constructor.
Starting point is 00:18:27 So there was a way to construct such an object without actually running any code. There was like some trivial way to construct this object that has at least one trivial constructor. Then the compiler is going to be like, okay, I'm just going to like bring this object to life and pretend that it always existed. And so we got that in C++20.
Starting point is 00:18:48 The problem still was, what do we do if the memory comes from a function that isn't blessed magically, like by the standard, like malloc, or like creating a char array? For example, mmap, right? Or you have your own allocator, right? User code that doesn't have this magic standard property of implicitly creating objects. And so now you can explicitly create them. You can say, okay, here's a bunch of bits. I'm going to do std start lifetime as pointer to widget.
Starting point is 00:19:18 And you're going to explicitly tell the compiler, I want to start the lifetime of a widget without actually calling a widget constructor there and just start the lifetime of a widget without actually calling you know a widget constructor there and just interpret those bits as a widget and and you can do that explicitly that's the new thing that we're going to get in css 23 and that again is that's something that i kind of worked on it goes back to richard smith's proposal so i didn't come up with the original idea uh but then richard kind of said like i don't have time to actually polish this because it didn't get into css 20 it wasn't quite finished yet and then i kind of picked it up and like went through the whole getting it through the committee um thing and and now we have it in
Starting point is 00:19:56 css 23 so that's again really cool to kind of optimize the code if you really want to or yeah have these situations where you don't want to call a constructor you don't want to run code you just want to say these are bits here's like a object that i know the layout of just just you know interpret that as that object just make that object alive basically at that point in the code i feel like if i if i understand it correctly then there should be uh the only how do I want to phrase this? There should almost be no use left at all for reinterpret cast. No valid use left. Kind of, because we also have std bit cast,
Starting point is 00:20:36 which we had since C++20, which is the thing where lots of people do type punning with reinterpret cast, and that has always been and still is undefined behavior. Right. So yeah, that is a good question. What is still a valid reason for? I think if you have to squeeze things through like C APIs
Starting point is 00:20:54 and you have to like... Yeah, casting to avoid star or back. Yeah, exactly, that kind of stuff. And then you know it's a pointer. No, you can use static cast for that. You can use static cast for that. You don't need reinterpret cast to go in and out of void pointer. If you've got...
Starting point is 00:21:07 So you're saying... I just want to make sure I understand this right. If I've got an int pointer and I want to... I cannot call start lifetime as float star on there. That's still undefined behavior. Start lifetime as does not let you do type panning. Neither does stdLaunder, by the way.
Starting point is 00:21:29 And also StdLifetimeAs and StdLaunder are different, right? So StdLaunder, you say there is an object in that bit of memory. It's just not the object that this pointer refers to. So I have to kind of reseat the pointer to a new object. That's StdLaunder. But it's the
Starting point is 00:21:44 same type, but a new object. That's the launderer. But it's the same type, but a new object. Start lifetime as says there is no object, but there are bytes in there that I know represent, you know, an object of that value. Okay. And so you can say, just make that object exist. But neither of those let you do type punning. And that always has been UB, like, with all the other stuff as well. just make that object exist. But neither of those let you do type punning.
Starting point is 00:22:06 And that always has been UB with all the other stuff as well. So then you still need memcpy or bitcast if that's what you really need to do. Exactly. The only way to do this before C++20 was memcpy if you want to be standard compliant. And now we have bitcast, which is basically something
Starting point is 00:22:22 that doesn't copy the memory, but just says, you know, just assume this value representation is a value representation of a float now. No, no, bitcast, you still have to create, it returns a new object back to you. It does return a new value back to you. So it is essentially like the memcpy,
Starting point is 00:22:38 but like it's a lot easier to write and the copy gets optimized away in almost all cases. And it's constexpr capable. Yeah, so you get the same code, I think, as with memcpy, because it's also being optimized away. But it's also constexpr, and memcpy isn't, so that's exactly it. So BitCast is basically a drop-in replacement for memcpy, whereas these two, they don't let you do typefinding.
Starting point is 00:23:03 I do have actually a talk about all of this that i did back in 2019 it's called typefinding and modern c++ where i spend an hour just talking about mem copy and bitcasts and all of the stuff and unions and inactive members of unions definitely uh yeah put a link to that in the show notes oh yeah should do that yeah anyway it's delightful topic i could talk for a whole hour about that but that's not why we're here so sorry well to just go over a little bit more uh standards news uh sg21 on contracts has been making some progress is that right yeah exactly so that's the last thing that i have in terms of like committee stuff that i have going on so as of last month i'm actually now co-chair of sg21 together with john spicer uh of the contract study group sg21 on the committee and that's actually pretty pretty exciting so one thing that uh one thing that i did there is i proposed
Starting point is 00:24:00 actually a roadmap it's uh p2695 r, a proposed plan for contracts in C++. And I was like, okay, I really want to get contracts in C++ 26 because really they should have been in 20. But we kind of messed it up for various reasons. Turned out that we didn't quite get it right or the thing that we had, we didn't actually have consensus on. So we threw it all away. We started over.
Starting point is 00:24:27 But we didn't get it in C++ 23 because we still don't know how side effects and contracts should behave. We don't know what the syntax should be. Should it be double square bracket or something that looks more like a lambda? And you also still don't know if you want to say anything about like violation handling or what happens,
Starting point is 00:24:42 what happens after a contract has been violated. And so, but I was like, okay, I really want to have contracts in C++ 26. Like it would be very sad if it would take until 29 or even longer than that. So what would it take to get it into C++ 26? And so then, you know, in 25, there is at some point a meeting where there's the feature freeze, right? Like early 25 is the feature freeze of C++ 26. So you definitely have to get back the wording by then.
Starting point is 00:25:11 So then working back, like the meeting before, we have to have the design ready. The meeting before, we have to. And so then, like, what resulted was basically a roadmap saying, okay, at the next meeting in Issaquah in February, we need to figure out side effects. And then in Varna in summer, we need to figure out the syntax. And then in Kona next November, we need to figure out the violation handling modes. And then we need to pass it to EWG, get the word.
Starting point is 00:25:37 And so it gives you a literal roadmap. And so then I proposed that to the group and then we discussed it for a little bit and people were like strongly in favor of it so now we have a roadmap and i'm also a co-chair so together with john we are kind of uh yeah getting the the group back on track so to say and and like okay saying okay now we have roadmap we need to really get this done and then this and then this so you know let's have a few more telecons let's vote on the proposals more quickly do we want the syntax do we want this way of handling side effects yes or no move on and try to really uh kind of get it and just
Starting point is 00:26:14 get contracts in the css 26 okay so um i'm still not 100 sure we're gonna make it because there are some tricky things that i know there are disagreements on still but i'm hopeful i think like we are kind of motivated now to like stick to the plan and get this done so yeah very excited to help uh make the group kind of go forward and make progress and and yeah fingers crossed we have we will have contracts in css 26 if nothing major goes wrong it's been quite the roller coaster we've covered the addition of contracts the removal of contracts the potential future of contracts and now the new contracts proposals so yeah so this is getting contracts back on track yeah it's good to have a plan yeah it's actually quite fun like it's it's such a it's a challenging group to be chairing
Starting point is 00:27:05 because there are like people with very different visions on like what contracts should do and whom they're for and you know but like it kind of comes together in an interesting way so it's kind of fun in a weird way uh to kind of make progress there and see us making progress so it's kind of cool it's kind of motivating and it's also the first time i'm like co-sharing like something on the committee so it's also a very new experience for me but yeah i think i think it's working out well so far very cool so phil we've been uh you know asking timor he's been up to how about you what have you been uh working on at sonar yeah so i mean a lot of what i've been doing has really been much the same as i was doing when i was at jetbrains so giving talks and writing blog posts and things but one one thing
Starting point is 00:27:49 that was quite interesting that came up recently was uh the idea i had right at the start when i first joined actually and i finally got to follow through on it a bit which was all of our uh what we call them rules the the actual things that get checked. They have associated rule descriptions that you can bring up in the IDE or online, whichever tool you're using. And many of them, not all of them, many of them are quite in-depth and they read like little mini articles in themselves, almost like a little chapter out of
Starting point is 00:28:17 Effective C++, that sort of thing. Or C++ best practices, if you will. Or C++ best practices. Yeah, of course. Why not? So they're quite a good resource in their own right. And I wanted to try and surface that a bit more. And one of the ideas I had was to take two or three sort of related rules and their rule descriptions and then sort of work that into an actual standalone blog post or article and the ones i picked to kick this off were to do with the
Starting point is 00:28:46 the rules of um three and five and zero and the interplay between those and the thing is i kept working on it and working on it it was growing and growing and i was thinking this is just getting too complicated so i split it into two posts but the second one actually goes beyond the rules of zero three and five and more into the territory of the interplay between all the special member functions and how you can take advantage of that. So it actually went way beyond what I originally intended, but I'm quite pleased with how it turned out in the end. So you'll be publishing a book on that soon then?
Starting point is 00:29:21 I think maybe a series of books. We'll see. No no i think i'm done with that one now is the blog post available online now they both are yes i'll give you some links to to put in the show notes or work that out somehow awesome um go ahead so yeah i was also going to say that i just recently did a a webinar a couple of weeks ago now on because because we use this term clean code and there may be different connotations around that and different interpretations so i wanted to just have something which explains what we mean by it and how our tools will actually help specifically in the context of C++.
Starting point is 00:30:09 So that one is probably worth a watch as well. So I'll also give you a link to that. Cool. Very cool. All right. So I guess we've gotten caught up on what you two are doing individually, but you're also like coming on today to make an announcement about a new group project that two of you are going to be doing together. Is that right?
Starting point is 00:30:27 It is. I might as well continue with this one then. So our new project is to take over CppCast. Oh. Oh. Yeah. So that's exciting. Phil and I are going to be the new hosts of CppCast.
Starting point is 00:30:44 Yeah. That's our secret project. What do you think about that? Well, I guess we should probably restart the show then. Phil and I, yeah, Phil and I are going to be the new hosts of CppCast. Yeah, so... That's our secret project. What do you think about that? Well, I guess we should probably restart the show then. Yeah, I guess so. Episode 350 of CppCast with guests Rob Irving and Jason Turner, recorded 19th of December 2022. This episode is sponsored by Sonar,
Starting point is 00:31:06 the home of clean code. Sonar Lint in your IDE helps you find and fix bugs and security issues from the moment you start writing code. Add Sonar Cube or Sonar Cloud to enable your whole team to deliver clean code consistently and efficiently with a tool that easily integrates into the cloud DevOps platforms
Starting point is 00:31:21 and extend your CI-CD workflow. In this episode, we talk about C++ on the Tyobi index, safety in C++, and some upcoming C++ conferences. Then we talked to Jason Turner and Rob Irving. Rob and Jason talked to us about what they've been doing since they stopped hosting CBPCast. Welcome to episode 350 of CppCast, the first podcast for C++ developers by C++ developers. I'm your new host, Timo Dummler, joined by my new co-host, Phil Nash. Phil, how are you doing today? I'm all right, Timo. How are you doing?
Starting point is 00:32:30 Well, I'm all right. I'm actually moving countries in a few days. I'm moving from the UK to Finland. So, you know, just packing up the whole house right now. And it's a bit chaotic, but also kind of exciting. So that's kind of what I have going on at the moment. So pretty big end to a year then? Yeah, yeah. So let's see how that's going of what I have going on at the moment. So pretty big end to a year then? Yeah, yeah. So let's see how that's going to go. Have you been to Finland before? Yeah, yeah. I have been to Finland quite a few times. So you know where you're
Starting point is 00:32:55 leaning yourself in for. Yes, yes, yes. I'm very excited about that. All right. At the start of every episode, I'd like to read a piece of feedback. So we got a tweet from Sam McDonald saying, sad to hear that CBPcast is taking a break. During the pandemic, I took up CBP C++, and it was the first podcast I subscribed to on the subject.
Starting point is 00:33:18 I learned a lot from Rob Irving and Lefticus, plus their guests. Well, the good news there is that that break is now over. And actually, there was a lot of feedback, I believe, that Rob and Jason got along similar lines. And that is one of the reasons that we decided to step forward and pick this back up. We'd like to continue hearing your thoughts about the show. You can always reach out to us on Twitter, or now also on Mastodon,
Starting point is 00:33:43 or email us at feedback at cppcast.com. And don't forget to leave us a review on iTunes. Joining us today are Rob Irving and Jason Turner, the former hosts of this show. Rob is a software engineer with Sierra Nevada Corporation, not the brewery. He started the CppCast podcast in February 2015, frustrated by the lack of podcast content for C++ developers.
Starting point is 00:34:08 He recently began working in cloud-native web development using Blazor, C Sharp, and TypeScript. Jason is a C++ trainer and contractor, host of the YouTube channel C++ Weekly, co-host emeritus of the podcast CppCast, author of C++ Best Practices, and author of the first casual puzzle books designed to teach C++ fundamentals while having fun. Rob and Jason, welcome to the show. Thanks, Tim. It's good to be here. Thank you. Now, Rob, I've got to ask, well, first of all, I was a bit disappointed that the Sierra
Starting point is 00:34:44 Nevada Corporation was not the brewery. But you did clear that up. But you mentioned Blazor, because it's a C Sharp project, I believe. I presume that's nothing to do with the C++ library Blaze? No, no, completely unrelated. Blazor is a C Sharp Microsoft WebAssembly implementation. Obviously, in the past, we did episodes on WebAssembly with C++. It's available in lots of other languages, and Blazor is what Microsoft put together for C Sharp WebAssembly.
Starting point is 00:35:16 So C Sharp compiles with Blazor to WebAssembly? Yes. So it's C Sharp for the browser? C Sharp for the browser. I think Blazzer more refers to the ui front end where you can take um html and uh have code kind of interspersed within it um they're called razor pages but yeah blazer basically is is c-sharp for web assembly yeah okay yeah pretty cool Yeah, pretty cool.
Starting point is 00:35:45 That's pretty cool. So we'll get more into what Drop and Jason have been up to in a few minutes. But we have a couple of news articles to talk about. So feel free to comment on any of those, okay? All right. So the first one is the Tyobi index for December 2022 is out, which lists the most popular programming languages. And actually C++ has passed Java now and is now on number three after Python and C.
Starting point is 00:36:12 You should pick up C++, Rob. Yeah. Really? Yes. It's hot right now. I did have a look at this, and I think one of the reasons that Java's lost ground is because it's actually lost a lot of its user base to Kotlin. So really, they're all still on the JVM, but now that's split the vote.
Starting point is 00:36:33 We'll take the wins where we can, I think. I was going to say, are you being serious, or are you shilling for JetBrains? Not me. So Kotlin is on the rise. It's now number 23. Rust is also on the rise. It's now number 23. Rust is also on the rise. Yeah, it's number 20 now. Kotlin is only 0.58% according to this. And Java went down. Well, no, it says it went up 1.7%.
Starting point is 00:36:55 It's going down on the ranking. It went up. C++ went up faster. So that's why it overtook it. C++ went up faster. So I don't know. Can you really attribute that much to Kotlin? Yeah, I probably don't think if you put it that way.
Starting point is 00:37:06 Yeah. I mean, I guess the difference is less than that 0.58% because C++ is 11.9 and Java is 11.8. Let's see, Scala is also on here. That's a Java thing. That's the only two that I see. Don't be that, it's growing in popularity. Oh, that's also interesting.
Starting point is 00:37:25 Yeah, sorry. No, I was going to say I'm surprised that assembly language is as high as it is. It's number nine on this. I never noticed that
Starting point is 00:37:32 before. Do you think that's just from like engineering students, you know, learning stuff? This is based off of what Google search
Starting point is 00:37:40 Google searches and stuff. Yeah. Yeah. So assembly language actually lost ground as well. Like it swapped places with SQL, which yeah yeah so assembly language actually lost ground as well like it swapped places with SQL which now surpassed assembly language oh and I mean and it's obvious because they're such similar related tools as to why they would be jockeying for position here
Starting point is 00:37:57 and you know what other language has gained uh gained a place? PHP. That's sad. I want to forget that PHP exists. I actually recently went and looked because I just assumed PHP was dead and I hadn't actually looked at it in probably 12 years. And I went and looked and it's still alive and well and thriving and new releases
Starting point is 00:38:22 are coming out regularly. I was confused i think we just we just managed to offend all of our php listeners now so both both of them are not going to listen again hey what do you i was gonna say what do you make of both uh you know objective c matlab and go all being on the rise like rust is also on the rise, and that one I guess I understand. VB6? MATLAB? Visual Basic?
Starting point is 00:38:50 That's classic Visual Basic. We're talking VB6 is staying level 13 right now. Oh, right. Classic Visual Basic. Visual Basic, plain Visual Basic is number 6 ahead of JavaScript. So, yeah.
Starting point is 00:39:09 How much do we trust this? Well, the thing we have to remember about the Tobii index is it's based on what things are being searched for rather than what are actually popular. So if people just seem to be having more issues with a certain language, then it's going to score more highly. It would be cool if there was a way to know what is actually the most popular,
Starting point is 00:39:27 if there are some other metrics. The other one that I'm going to point out as being weird is Objective-C is up and Swift is down. That's like the opposite of what's happening with Java and Kotlin. Maybe Swift is just becoming more stable now. Maybe. Maybe I can become a highly paid consultant by pulling out my old vb6
Starting point is 00:39:46 skills since that's still staying strong on the index here all right so uh we do have another news item um which is this whole safety in c++ uh topic so uh a new uh blog post came out very recently by corinthian jabot called if we must let's talk about safety so i actually uh read this blog post and i thought it was super interesting i don't know if anybody else has read it yeah i did i did not get through it i i looked at it earlier so basically this whole thing started kind of earlier this year i think uh there was kind of a lot of rumbling in the community about this thing that um certain u.s government agencies are now recommending to stop using languages that are not memory safe which obviously includes c and c++ um and so then um yeah there's a lot of
Starting point is 00:40:38 talk about well maybe we should make c++ a safe language or otherwise it's just going to die or people are not going to use it anymore. And so then there was a lot of discussion about that and what safety even means because it also kind of means different things to different people. And then there was a paper last month by J.F. Bastian, P2723, called
Starting point is 00:41:00 Zero-Initialized Objects of Automatic Storage Duration, where he was saying, okay, we can't remove all the unsafeties and all the UB at once, but let's just do like a piecemeal approach and just remove like them one by one. So he's, he proposed to say, okay, whenever you have like an uninitialized variable of like scalar type, like int I just initialize it to zero by default. And that already removes like 10 10 of all like security vulnerabilities right
Starting point is 00:41:26 obviously has a bunch of other like implications so um then there was a discussion about like how it affects performance uh you know whether maybe we should say instead of zero initializing it should like be implementation defined or unspecified what it initializes to and there was a proposal by thomas kapper saying well maybe instead of saying it's it's ub we should just say it's erroneous behavior but we still define what the behavior is even though and then we allow the compiler to do this like rust thing where uh in debug it's like gonna trap or tell you the tool is going to tell you, is this a bug? But then release, it's going to do something, which is not UB. So there's a long discussion about this and lots of other discussions about this topic.
Starting point is 00:42:12 And I think in that context, Corentin's blog post is super interesting because he's basically saying, well, we can't just make C++ a completely safe language, right? Because you would have to do something like either globally reason about lifetime of all objects and then be land at garbage collection or not have aliasing.
Starting point is 00:42:35 And then you get to something like Rust Spiral Checker where you can have either one mutating reference or multiple non-mutating ones, but never both at the same time. And so you can't have pointers, you can't have C++ references or iterators, really. You have to rethink everything. And so is this what we want?
Starting point is 00:42:54 Maybe we can do something else where we just have better tools telling us that there's a bug and he actually talks about something I haven't really heard before, but apparently people are working on to actually have hardware, like implemented in hardware,
Starting point is 00:43:10 they can track pointers and do interesting things like that. So it's a super interesting blog post. Basically, I think the bottom line is we can't be safe, performant, and perfectly backwards compatible all at the same time.
Starting point is 00:43:23 So we kind of have to find a compromise in that space and it kind of really depends on what your priorities are what the use case is so it's like highly non-obvious like where we should go and and that's kind of kind of the bottom line and i think but there's a lot of work happening actually on this like just uh last week like um i don't actually know if this is public. I guess I can talk about it. We have a new study group for safety on the C++ committee, and they're going to be looking at this
Starting point is 00:43:53 kind of like specifically. But yeah, it's very much not clear where this is going. So I'm kind of curious. I wonder if, do you have any opinions on this i mean i have some thoughts i've been spending i'd have to look at my playlist here but i think at least the last 12 episodes of c++ weekly something like that of basically just trying to convince people to finally use tools i mean I've been talking about this since I started talking about C++.
Starting point is 00:44:28 The first conference talk I ever gave at C++ Now, Thinking Portable, if you read between the lines on that topic, the whole point is if you support multiple platforms, then you have more tools available to you to help you find bugs in your c++ code you get valgrind you get you know visual studios whatever like you know as you move back and forth um so i've been yeah i'm just my opinion is i don't know maybe it maybe it is too hard to convince people to actually use the tools that
Starting point is 00:45:02 are already available and it's easier to convince people to move to a brand new programming language maybe it is i don't know but we have the tools and uh you know nothing personal to jf here because that's a respectable um uh proposal but my immediate thought on reading this was if you're using like any tools right now, you get warnings if you don't initialize your objects. Yep. This should only help people who have no tooling in their project. And are they going to upgrade to the latest version of a C++ compiler that warns on these things now? Probably not. That's a good point.
Starting point is 00:45:47 Yeah. that warns on these things now probably not that's a good point yeah the only thing i'm you know thinking about while uh here listening about this is i know some of the news we've uh not had a chance to comment on with the show and uh hiatus was all these possible successor languages coming out which are you know coming out to deal with lack of safety in c++ and i think you guys might have some plans on episodes for that so i'm curious to hear what some of those might look like we we may well yes yeah yeah we shall see but yeah it's definitely something we are looking into yeah so from a but from the perspective of some of the works with static analysis tools my concern with j JF's proposal originally was that it would actually reduce the number of bugs that we could detect. Right. I wondered about that.
Starting point is 00:46:33 Because it would give defined behavior to something that was undefined. But actually, the way the discussion carried on, it seemed that we could still retain that. We're just going to be removing the vulnerabilities associated with the undefined behavior so you could still track if no explicit initialization occurred yeah there's a few nuances to it now so one thing that yeah sorry so there's multiple kind of counter proposal like unofficial counter proposals that have not been written down in public but are kind of being discussed like one of them is to say we have this new concept not undefined behavior but erroneous behavior where basically if you hit this behavior it is a bug um which would be yeah using using a variable
Starting point is 00:47:17 that hasn't been initialized is erroneous behavior so we say this is a bug so tools can still diagnose it okay but it's not undefined behavior in the sense of we still specify what the result is, which is zero or like an implementation defined value or something. And that removes the vulnerability aspect. But it's kind of weird because we can't really talk in the standard about, I mean, obviously we can't talk about tools in the standard, but you also cannot talk about anything that isn't observable in the C++ AppShack machine.
Starting point is 00:47:49 Right? So this whole concept is kind of not clear yet if this is doable or how that would look. And there's other people having other ideas in this space. So it's a very kind of active discussion. I don't know where this is going. I suspect we're going
Starting point is 00:48:03 to talk about it in Issaquah maybe, but I don't know. I think that's the suspect we're going to talk about it in issaquah maybe but i don't know and i think that's the key takeaway this is a hot topic right now yeah pretty much just hot topic and we haven't figured it out yet and as often there is there is no right or wrong there is just trade-offs right right so so we have one last uh uh news item, which is updates on some conferences. So there is now a call for papers out from NDC Tech Town, which is a conference happening around autumn, usually in Kongsberg in Norway.
Starting point is 00:48:38 And you can submit there. There's a very generous deadline until 19th of May. I have been to that conference for the first time ever um this year i had a lot of fun so it's it's a great one so if you want to go there submit a talk um there's also cpp on c uh which also has its call for speakers out phil it's obviously your conference do you want to talk about that a bit yeah well we we said that we're hoping the next year is going to be even better so it's your chance to actually join that as a speaker it's going to be open until i forget the date now but it's the end oh it's 8th of january it's going to say the end of the first week in january so you've got um
Starting point is 00:49:15 probably a couple of weeks by the time this airs if you listen to it straight away hopefully that should give you enough time thinking over the holidays to come up with something. But I can tell you we've seen some great submissions already. And the last one is ACCU conference, which is taking place in April here in the UK in Bristol.
Starting point is 00:49:37 And that's a little bit further along. So we have now actually looked at the proposals and sent out acceptance notifications. So people who've submitted talks already should know whether they're accepted. And the schedule is not public yet, but it's going to be released very soon.
Starting point is 00:49:54 And I can tell you the schedule looks really awesome. So that's in April, if you want to come to the UK. All right, that's it for the news items. So Rob and Jason, I'm going to talk a little bit about what you've been up to since the show went on hiatus. Sure. So Rob, I saw in your bio that you have a new job working for Sierra Nevada, not the brewery. Do you want to tell us a little bit about that? Can you tell us a little bit about that? Yeah. I think it was not related to C++ right or something along those lines i i've done just a very tiny amount of c++ throughout the job and for listeners who don't understand the reference
Starting point is 00:50:35 uh sierra nevada is a very pretty popular brewery pretty big yes they sell it here in the uk but yeah uh i work for a different sah nevada with no relation to the uh the brewery and actually i did get a a bit of swag which is a beer koozie that says you're nevada not the brewery nice pretty funny so it's actually part of the full name no it's not part of the name but they just put out these beer koozies that say not the brewery on them. So, yeah, so I've been working in geospatial mapping applications for pretty much my whole career. My first job was primarily mobile development and some desktop. And then my next job for the past seven years was uh primarily desktop and that was c sharp and c plus plus the first job was all c plus plus and um the new job i'm still doing uh
Starting point is 00:51:35 in an application a geospatial application but i'm now moving into web development so i mentioned uh blazer c sharp um also doing a bit of typescript which is pretty cool uh jason i should say thank you to your cousin because he made a pretty nice language well to be fair jt developed he worked on a very nice language yeah project manager product product product whatever pm anyhow at microsoft during for that project yeah yeah but uh but yeah it's it's been fun um I'm you know mostly doing uh kind of a lot of front-end development with the uh use of our you know geospatial libraries for the mapping application but it is a cloud native application so I'm you know learning a bunch of things about cloud native web development too like docker and kubernetes and all that stuff so it's been fun sounds fun and uh you're still
Starting point is 00:52:31 working remotely don't you yeah i am fully remote uh there is an office uh in the uh in north carolina um i'd only go down about once a month cause it's an hour away. Um, but, uh, but yeah, so working remotely and, um, you know, the one nice thing there is, I think I may have mentioned this, you know, a few months ago when we were still doing the show that, uh, I was going to get a like dedicated office put together because right now I'm recording in the kids' playroom slash Rob's office slash gym. Yeah. Which, which can get a little difficult, especially when the kids have off of school.
Starting point is 00:53:17 But the office actually was completed just last week. We actually had the inspection today. So I'm going to be transitioning into my dedicated office soon and it's like an addition on the back of the house is it a third story is it uh we hadn't yeah we didn't finish third floor and that'll be the office yeah um and uh to go with the office i actually built my own desk which i'm very excited about you can um buy like standing desk the motorized legs you can buy the legs online and um so i built my own um desktop to go with the legs and uh that turned out pretty well did you do you have a separate air conditioner unit for that third floor we were able to split it off we had enough
Starting point is 00:54:03 our second floor unit was big enough that we could just split it off and use that for the third floor i feel like you're gonna have to sorry i'm just thinking about my own house i mean because we have i'm in my finished basement right now and uh in the summer you turn off all of the first the basement vents and most of the second floor the main floor vents and just have the vents on the top floor open and let the cold air work its way back down the house. Because otherwise, the upstairs is just too hot. That's clever. Interesting. Forced air.
Starting point is 00:54:38 Yeah, we don't do basements in North Carolina, so that wasn't an option for me. So what's the plan with the standing desk? Are you going to alternate between sitting and standing at regular intervals, or are you going to get a treadmill? Ooh, treadmill. I'm not sure if I'm going to get a treadmill, but yeah, I'll try to alternate. I'll try to spend a decent amount of my time standing
Starting point is 00:55:02 because I've not been able to stand for you know the past nine months at all i've just been stuck in this seat for a long time sounds terrible they never let you out yeah you shouldn't take that setting down i've got a standing desk here actually that i've had for a few years now but the office i'm in right now before we had it refurbished a year ago the desk had to be stuck in this corner just below a um an ethernet socket that would actually stop the desk from going up so it wasn't just stuck in one position for about a year a bit frustrating shop this has now got me out of the habit of using it as a standing desk so i keep having to remind myself oh yeah i can i can make a garden down i'm at a standing desk, which I got from a YouTube sponsor.
Starting point is 00:55:46 And I don't know the last time I had it in sitting mode. Because I, well, particularly for recording YouTube episodes, I feel like I'm not going to waste time. I get down here, I get things set up, I record, I carry on with my day. So I appreciate that part. Right. So Jason, speaking of your your desk so what have you been up to lately um you've been you've been releasing a lot of books right so i actually ordered your
Starting point is 00:56:11 uh c++ best practices book just last week so i just kind of started reading it that's that's pretty cool but like how's that going the the whole book thing i think i'm done with the updates for c++ 20 that i wanted to put in that book. Now, Manny, you're going to make me look up my sales figures because I am actually curious. And if you ordered it on Amazon, then you got a color printing, hopefully, because Amazon ended up making a cheaper color printing available. So I normalized instead of having two different versions, black and white and color, it's now just their low-cost color printing. For e-books, I've sold 4,829 copies so far. That's not that bad.
Starting point is 00:56:56 So that's my best practices book. But then I have seven puzzle books that I've published. And I've been doing kind of like soft launches on these things. I'll push, publish them on lean pub as eBooks and then wait for people to like buy them and then give me error reports, which are super easy to fix while it's still a print, uh, an eBook. And then once I feel pretty comfortable with it, then I'll push it off to Amazon for people who want the print version of it for the puzzle books. I'm like, they're designed to be written in so uh you know that's getting the print book probably makes a lot of sense yeah uh so i've been doing that yeah sorry
Starting point is 00:57:34 no i'm saying this puzzle book stuff sounds cool like i've seen you given giving them away at multiple conferences i've never actually had one in my hands but it sounds like a lot of fun i have given them... I gave some away at Phil's conference this year, in fact. So I have had them in my hands, but I need to pass on. They are... Yeah, so
Starting point is 00:57:56 there's that. And then I've been just spending so much time lately thinking about my topic for C++ on C, my keynote that I gave there. Thank you, Bill, for inviting me to be a keynote at your conference. Thank you for having me. The closing note, unfortunately, which meant I didn't get to enjoy the rest of the conference, but it's fine. I'm not complaining at all. But the topic was, what was the title?
Starting point is 00:58:26 Making C++ Fun, Safe, and Accessible. Yeah. And it's really like ultimately about how do we make programming accessible again? Let's just forget even the C++ topic. So I've just been spending so much time over the last year thinking about that for the six months leading up to your conference. And now the last six months again, like, how do we make programming fun and accessible again?
Starting point is 00:58:54 For us old people, you know, turning on your Commodore 64 and having a basic prompt, it kind of forced you to learn some programming. Have you come up with an answer? I have something that might be an answer. I don't know. I recently learned that all of the major graphing calculator brands have Python built in. So Casio, TI, and NumWorks, which is kind of a third party, you know, I mean, they're a much smaller company, all have Python, MicroPython, or CircuitP or circuit python or some derivative of it built into them and so i've spent the last couple of weeks basically just sitting there on a calculator programming and i'm actually at the moment don't tell anyone it's still a secret um working on my first not C++ programming book.
Starting point is 00:59:46 Oh, wow. That sounds interesting. Don't tell anyone. Yeah. I promise. But it's basically, I mean, it's 100% derived from the last 15 minutes of the talk that I gave at C++ on Seed this year.
Starting point is 01:00:00 So if anyone wants to go watch those last, I think it was 15 minutes, watch those last 15 minutes of the talk where I demonstrate what it might look like to make a truly accessible programming book where it doesn't even, there's no assumption that the reader of the book can even read necessarily at all. So there would be almost nothing to translate in the book. And so I've been thinking a lot about that that's impressive i have no idea if it'll work because i think you started your keynote the first five minutes you weren't saying anything yes for the first five minutes i didn't say anything at all in that keynote um and i was trying to get the point home that i think there's
Starting point is 01:00:41 a way to communicate programming concepts without using any words at all. And I'm going to try. We'll see what happens. Yeah. I'm very interested to see how that turns out. So am I. Don't worry, your secret is safe between just the four of us and all of our listeners. Yes, the few thousand people who have in the past listened to CBPcast. Let's hope some of them are still listening.
Starting point is 01:01:05 Yeah. past listen to cbpcast but let's hope some of them are still listening yeah so um your books seem to sound like they're doing pretty well but probably not quite enough to fully sustain you yet how's your training doing i know it took a bit of a hit during the pandemic but is it yeah it took a little bit of a hit during the pandemic for sure i and my contract work and people like hired me to do code reviews and stuff. So it all worked out fine. But now I'm kind of like in an awkward stage where I almost kind of feel like I'm restarting my training business again, because almost everyone else who did training moved to online offerings, and I chose not to do that. And so now I'm kind of trying to build up that backlog again, but at the moment it looks like I'm busy through March. So if you want CBOS Plus on-site training, it is a great way to get your company all back together in one place.
Starting point is 01:01:56 And you should come to me and have me come to your office. You had to hit first. Probably not first. On that note, this is not official at all, but I will mention that it's possible that I'll be giving a public talk in Amsterdam in the first week of February. So for our listeners, there should be ample time if you're in the Netherlands, Belgium, Luxembourg, northwestern Germany.
Starting point is 01:02:27 Is that at a meetup? Yes, possibly. Possibly. Possibly. It's almost 100% official, but not 100% official yet. So we can't quite put that in the show notes yet. No, but I think it's okay for me to mention it right now. And I'll just say as an aside, I love going to the Netherlands. It's easy for me.
Starting point is 01:02:46 We've been there a bunch of times. If you have a company in the Netherlands and you want training, I'm happy to come there. Well, we do have an office in the Netherlands and I was there actually recently and it's pretty cool. Yeah, I just looked at the location. It's right within inside the outermost canal ring. So it looks like it's a pretty accessible area. Alright.
Starting point is 01:03:08 So, I think we should probably wrap up. We've been talking for over an hour now. So, Rob and Jason, it was so great having you on the show today. Thank you so much for telling us about what you've been up to these days. No problem. That was a lot of fun.
Starting point is 01:03:24 Before we go, we do have a couple of announcements about what will actually been up to these days. No problem. That was a lot of fun. Before we go, we do have a couple of announcements about what will actually happen going forward. Phil, do you want to take us through the announcements? Yeah, so we are going to be restarting the show with some small modifications. So first of all, we're going to be every two weeks, at least for now.
Starting point is 01:03:42 That's mostly just so that we can make sure that we're going to commit to following through because we're both to be every two weeks, at least for now. That's mostly just so that we can make sure that we're going to commit to following through because we're both pretty busy. CPP Cast is now also on Mastodon as well as Twitter. That's still being set up at the moment. So we'll give you the actual username next time, I think. We'll put it on the website. It's always going to be on the website.
Starting point is 01:04:01 So when Twitter completely implodes, you've still got somewhere else to go. Now, on that note, we've also decided um at least for now not to carry on with the youtube channel or facebook but if you particularly feel really strongly about that do let us know and if we get enough complaints we'll consider bringing those back but um again we we felt for now that there's probably um not enough they're not complaints they're fan mail phil but it's our show now if we want complaints we'll get complaints now on that note we we do rely on all your feedback and suggestions but obviously that the show has been latent for a while so we need to get that some
Starting point is 01:04:45 momentum going again so do please write in with your your feedback comments suggestions to one of the methods that um timor is about to run through with us yeah thanks phil and thanks so much for listening as we chat about t++ 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 topic, we'd love to hear about that too. You can email all your thoughts
Starting point is 01:05:12 to feedback at cppcast.com. We'd also appreciate it if you can follow CppCast on Twitter or Mastodon and leave us a review on iTunes. You can also follow me at timur underscore audio and phil at phil underscore nash on Twitter or at mastodon at phil nash dot me on mastodon. And of course, you can find all that info and the show notes on the Postcard website at cppcast.com. 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.