CppCast - Holiday Special with Phil Nash and Timur Doumler
Episode Date: December 23, 2022Rob 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)
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,
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.
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
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.
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
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
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.
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?
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.
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.
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.
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.
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.
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
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.
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
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.
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.
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,
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.
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
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,
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,
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?
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
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.
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
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?
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.
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.
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
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,
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
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
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
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.
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,
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,
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
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.
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.
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.
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
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,
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
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...
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.
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
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.
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
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,
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.
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
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.
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,
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.
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.
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
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
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
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
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
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?
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++.
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?
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.
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,
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
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?
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
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.
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,
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.
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
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.
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.
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.
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.
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%.
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.
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.
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
before.
Do you think that's
just from like
engineering students,
you know, learning
stuff?
This is based off of
what Google search
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
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
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?
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.
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,
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
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
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
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
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.
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.
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?
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,
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.
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
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++.
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
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.
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.
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
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.
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
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.
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
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.
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.
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
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
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
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.
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
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.
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
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.
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
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.
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
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
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?
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?
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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.