CppCast - CoreCpp 2021
Episode Date: September 23, 2021Rob and Jason are joined by Amir Kirsh and Avi Lachmish from Incredibuild. They first discuss Idle, a new C++ framework, the September ISO mailing and an Algorithm Intuition Chart. Then they talk to A...mir and Avi about the recent CoreCpp conference, Bjarne's keynote and other talks from the conference. News Idle: an asynchronous and hot-reloadable C++ dynamic component framework September ISO Mailing Algorithm Intuition Chart Links Core Cpp Conference Bjarne Stroustrup Live on Core C++ Conference – Q&A Session Core C++ 2021: Bjarne Stroustrup - Thriving in a crowded and changing world Rust vs C++ and Is It Good for Enterprise Sponsors Use code JetBrainsForCppCast during checkout at JetBrains.com for a 25% discount
Transcript
Discussion (0)
Episode 318 of CppCast with guests Amir Kir offering a 25% discount for purchasing or renewing a yearly individual license on the C++ tool of your choice.
CLion, ReSharper, C++, or AppCode.
Use the coupon code JETBRAINS for CppCast during checkout at www.jetbrains.com. In this episode, we discuss C++ ISO papers and algorithm intuition.
Then we talk to Amir and Avi.
Amir and Avi talk to us about the Chorus of the Plus developers by C++ developers.
I'm your host, Rob Irving, joined by my co-host, Jason Turner.
Jason, how are you doing today?
I'm alright, Rob. How are you doing?
Doing good. I don't know about you, but I'm starting to get very excited for the movie Dune
coming out in exactly one month from recording.
I actually did not know when it was coming out. I mean, I've seen the original movie like a half dozen times and it's weird.
And then I just read all five books in the original trilogy.
I'm a very slow reader, but I started reading it a year ago.
And then when I heard the movie got delayed, I just like put it down for months and months and months and i finally started reading it again i'm committed
to finishing it before next month but uh yeah got some more reading to do i do find it slightly
annoying that the way the title is stylized in the new movie cover it looks like dunk it really
looks like d-u-n-c uh-huh yeah um but anyhow yeah anything else you want to talk about before we get going uh maybe you know just
a little plug for cbp con if you're still trying to decide whether or not you're coming it's in a
month of course we don't know what exactly the situation around the world is going to be we do
know that europeans are not going to be able to come to america yet because the biden administration
just said the first of november is when they plan to open up European travel.
So that's a week too late. Um, but, uh, you know, if you're still thinking about it,
you know, go ahead and make your decisions. Flying inside the U S seems to be pretty safe right now in Colorado is in a pretty good state besides being a pretty good state.
And if you did want to attend and you're outside of the U S you can definitely get those virtual
tickets still, right? Yeah. There's the virtual tickets. And also did want to attend and you're outside of the U.S., you can definitely get those virtual tickets still, right?
Yeah, there's the virtual tickets.
And also, since I haven't mentioned what talk I am giving, it was officially accepted.
Well, I am supposed to be teaching a class, which is going to be one of, I think, only two classes that's still going to be on-site.
Because I live here, so if people want to come to my on-site class, I'm going to put on an on-site class.
And that is
practical performance practices and it's kind of like my take on best practices but which like how
do you do that in the light of performance being a higher concern and then the talk that i'm giving
is your new mental model for constexpr and okay i don't think i really intended this but it's kind of like if you were to argue
that my rich code for tiny computer cbp con commodore 64 talk was part one and constexpr
all the things with ben dean was part two this is part three of of that unintentional very
unintentional series of talks but it directly ties into those other two.
Very cool. Okay. Well, at the top of every episode, I'd like to read a piece of feedback.
We got a lot of great feedback from last week's episode with Bob Nystrom talking about Dart and
his Crafting Interpreters book. This one is a tweet from Elliot and he wrote,
the episode has it all. Thank you for the concise explanation of dark, well articulated and very accessible crafting interpreters paperback ordered.
And Elliot did realize that he misspelled dart as dark and said, pardon the typo.
Dark will be the name of my experimental programming language.
But Bob actually pointed out dark is already a programming language.
Yeah, then we had a little side conversation
on Twitter there about maybe it requires
you to use their Dark Mode IDE.
Yeah.
Wild how many languages are out there.
Yeah, I know. I actually
at some point a few years ago,
someone made a comment
on CoffeeScript or whatever.
And I'm like, well, I've got ChaiScript. And they're like, oh, I knew that would come eventually. You copied so-and-. And I'm like, well, I've got ChaiScript.
And they're like, oh, I knew that would come eventually.
You copied so-and-so.
I'm like, actually, ChaiScript is three years older
than this other thing that you're referencing.
Whatever it was.
I don't remember the exact conversation now.
But yeah, if you can name a word,
there's probably a programming language for it.
Probably. Probably.
Okay, 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. Probably. Probably. Okay. 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 is
Amir Kirsch. Amir is a lecturer at
the Academic College of Tel Aviv and
dev advocate at Incredibuild. Amir
is also one of the organizers of the Core
CPP Conference and Meeting Group and
a member of the Israeli ISO C++ National Body.
Hi, Jason.
Hi, Tony.
Hi, Mir.
Also joining us is Avi Lakmish.
Avi is an expert in web and networking technologies, operating systems, and software development
methodologies.
Avi has extensive experience in C++ object-oriented analysis and design and distributed architecture.
He's also a member of the Israeli ISO C++ National Body, and Avi recently joined IncrediBuild
in his career path.
Avi, welcome to the show.
Thank you.
I'm excited to be here.
I'm curious, a question for both of you.
How large is the Israeli National Body at this point?
It's about, I think, between five to ten people.
Okay. Okay. It's five to ten people, I mean, in regular meetings, but I think that we have about 20 people
registered to the group, so the group is getting people from Israel who do C++ and have the expertise to influence or to interact on that.
And we have bi-weekly, two meetings a month, reviewing papers, talking about papers from the
mailing list. Very cool. One of those confusing English words there, bi-weekly or bi-monthly,
do you mean every other month or do you mean twice a month?
This is why I interpreted what I mean.
And we've covered the founding of the Israeli national body, I think, on CBPcast over the last couple of years or whatever.
I'm trying to remember, like, how old is it now?
It's relatively young, but seems to be moving along, right? Yeah, I think it was founded a bit before the Prague meeting.
That sounds right.
Yeah, yeah. They announced us there.
And Prague was the last meeting.
Last in-person meeting, yeah.
The idea was somehow raised, I think raised in the Core CPP conference on 2019.
I think Bryce pushed for it.
You should have an Israeli national body, and he did that quite well, probably.
So, Ibn Balevi and others took the glove, and here we are.
Mikhail Be'eri, Dan, yeah, a lot of people.
Sounds like something Bryce wouldce would do all right well uh amir and avi we got a couple news articles to discuss uh feel free to
comment on any of these and we'll start talking more about the recent course people's conference
and uh some other stuff okay yeah all right so this first one is a project on GitHub. This is called Idle, which is an asynchronous hot reloadable and highly reactive dynamic be a similar Java thing for being able to, uh, you know, modulately, you know, componentize your,
your code and be able to swap things in and out so much easier in Java with the JVM and
introspection, you can just pull stuff out of there, but it seems like it's pretty powerful
though. The, the author is, you know, definitely saying it definitely saying it's not production ready yet, but he's encouraging everyone to try it out.
It looks fancy.
It does look very fancy.
I feel like we should find the author of this project and get them on the show.
That would probably be a good interview, yeah.
Did you two have a chance to look at this one?
Yeah, I've just looked at the examples and read a bit about it. It's cool the way that it defines its dependencies
so it could understand what it needs to make sure that it's still up
while using a certain service that is dependent on another service.
Then you understand the environment that it runs in.
Other than that, there is a note that's saying that this is not ready yet
and you shouldn't use that in production.
So I haven't had the chance yet other than looking at the examples, doing with it anything else.
I guess to be fair, is any software ever really ready for production?
That's a good question.
Very true. Very true.
Okay, next thing we have is the September mailing for ISO C++ papers.
And obviously there's a lot going on here.
And I kind of want to just throw it over to Amir and Avi on this one
because you're both members of the ISO committee.
Anything we should be highlighting here?
Yeah, there are a few.
One of them that beat me a bit, which is the Lambda trailing return type.
The idea is that the trailing return type
doesn't take into consideration the capture.
So it uses the identifier before it is using the capture.
So there could be a mismatch between
what the body of the function understands about the identifier and the trailing return type.
And then weird stuff can happen.
You could decide that you would like to return a double when it's actually returning an integer.
And then a strange thing might happen.
You could do a metatemplate programming in the lambda itself.
And then a strange thing might happen. The best thing that can happen is that you won't be able to compile.
The worst thing that can happen is that you might really compile and run,
and a strange thing still can happen.
So currently, if I understand, on the trailing return type,
you cannot reference the captures at all.
And this change would let you say trailing return type,
decl type of capture 1
plus capture 2 or whatever.
Yeah, the idea
is that when you're
capturing by value, then
weird things might happen
because the default of lambda
is const, and therefore
the values
when they are used, they should be considered as const
and therefore the real things might might might happens as well other than just understanding a
different reducing type from from the from the type itself it's really an interesting yeah go
ahead yes sorry go ahead no no go ahead I think that this paper is related in the subject to the abbreviated lambda effort that is being pushed.
And in a way, C++ needs or would benefit from abbreviated lambda, but of course, only if it works as expected. So, you know,
the return value that you would get would be the same that you actually expect. So I'm not sure
that this touches the same issue, but I think the whole discussion around lambda today is related
to the question of abbreviated lambda. Okay.
I haven't looked at that.
I mean, I know that we got in C++23 more cases where you can leave off the parens for lambda, but I didn't know if the even more abbreviated lambda proposal had actually been progressing.
I have not followed that.
So there was a proposal for allowing to omit the return
keyword. So you just arrow the return value by equal greater, which would be an arrow to the
return value. But there are some issues with that. It's quite a long time out there, the idea of abbreviated lambda, and there are some
issues. So I'm not sure that it would go to 23. I use a lot of lambdas. I'd like to see that.
I actually saw a comment from someone on Twitter, and I don't know their full argument, but they
said that too much damage has been already done by the overuse of Lambdas.
And I'm like, you know what, I'll just go ahead and take credit for that because I've published like 35 videos on Lambdas.
Everybody's trying now to inherit Lambdas.
Ah, you know, that's a thing to do. Actually, I'm going to go ahead and give just a quick little teaser and say
in the talk that I was talking about
at the top of the show that I'm
going to be giving at CBPCon, I show
a use case for Lambdas
that I have never seen anyone
else use before.
So, I mean, I'm guessing I'm
not the first person to have done this, but it might
be something novel and new and interesting
to you, so just should watch that talk when it comes out.
Anyhow.
I'm also going to be at the CppCon giving a talk on C++ complexities.
So I think that this relates very well to C++ complexities in a way. And of course, there is always the question of, do we use the right,
the proper tools, or do we in some way abuse the tools? So this is a discussion. We will not open
it here. But C++ complexities is always something that C++ programmers like to talk about.
Oh, yeah. And yeah, we're kind of bad in the C++ world
of liking the creative solution,
which is not necessarily the best solution.
Or the simplest one.
Or the simplest one, yeah.
Yeah.
We talked about the mailing list,
and there is also the deducing this.
And deducing this is a very important paper, I think. I talked about that in one of the core C++
meetup meetings that we have. So I'm happy to see that it is progressing. I hope to see it,
because I think eventually it will reduce the amount of boilerplate code. And this is a very nice proposal.
So we'll probably see that one in C++23, do you think?
It seems quite mature and people like it.
So I don't see much opposition for that.
So I do think that it would come in.
I know also Ben Dean is going to be giving a talk on deducing this at CBPCon.
He's one of the authors on that paper.
Another thing, another interesting thing that was in the previous mailing list,
I see it on the July mailing list,
is a paper from our Israeli National body attendee, a member, Yechezkel
Bernat.
And in fact, he says that the main person on the proposal on the paper is his son, 16
years old, who actually found the issue with counted iterator.
So P2406 is talking about counted iterator,
which has some issues when you use ranges.
A very nice paper that shows the issues and proposes some solutions.
So there are several nice things here.
First, it comes from the user international body member
and with his son, 16 years old.
I think this is what we want to bring to C++.
And it touches an actual issue that should be treated.
I wonder if that's the youngest paper author
that there's been for an ISO paper.
Maybe you can bring him
to a next episode.
Wait, I had no
idea that counted iterator had been
merged into C++20.
Now I'm like, wait, what?
Alright, I'm sorry. I'm going to have to look into that some more.
It is being used
when you want to get the top X results from a view.
So you filter something and then you want to get X results from a view.
And then down beneath, it is using a counted iterator.
And counted iterator has a behavior that the spec itself is very strict about the definition of its behavior.
And the definition, in a way, creates some strange behavior when you try to filter something and top the 10 results, 10 first results.
And even if you have the 10 first results at the end, it will still go for the 11 one just to see that it doesn't have anything more.
And then you might get into an infinite loop, even though you already got what you wanted.
And this is what the paper presents.
Interesting.
Yeah.
Definitely.
Yeah.
So this was P2406.
Yeah.
I'll have to put a link to that one in the show notes
okay and then the last uh article we have today is uh it's actually like a table on algorithm
intuition uh chart on algorithm intuition and uh we certainly talked about this concept before
with uh connor and kate gregory um and this is based based on their talks where they talk about algorithm intuition.
And the author of this chart
basically tried to summarize
and categorize all the algorithms
so that they can be, I guess,
a little bit easier to learn
so that you could start having
your own algorithm intuition
when looking at your C++ code.
And just read over this and be like,
wait, I've never heard of that algorithm before.
There's so many.
Yeah, it's confusing.
Yeah, but
I mean, handy.
I've seen a lot of arguments lately about how
special the design
of the STL is compared to
other libraries and other languages
that we've got this compile time
type safe collection of
algorithms that we can apply to all of our containers. And so it's probably, you know,
it's an important part of the language to be familiar with, for sure. And I think largely
overlooked by the average C++ programmer. Yeah, nevertheless, there are a lot of other libraries
that gives fights to the STL while using different kinds of containers like upsell,
like boost that gives a better implementation sometimes for string or other containers that
might be interesting. On that note, and if you don't mind, just real quick, flipping back to the
last news thing, there was a C++23 proposal to add another like a replace data function to standard yeah yeah
and that one looked the the the the committee body votes were strongly in favor of it which
really surprised me because so many people already think that string is just way overdone that it
already has way too many methods already yeah resize and overwrite yeah that one
yeah uh i i think i understood the issue i don't remember it right now but uh the idea is that uh
the main idea is that i think that uh when you are uh resizing the buffer you are writing a
default value and then you are copying the data that you would like to copy so you need to use the append method and then you have you have to remember that
you still have space so each time you are appending something you you need to check it the
append function itself is using if every time you are appending a stuff to it. And that will do that in one operation.
It will also create the space and copy the data.
That's the main idea.
Okay.
Well, Amir, when we last had you on the show a couple months ago,
we definitely talked about the core C++ conference a bit.
And now the conference has been held.
And let's maybe start off with talking about that
and how the conference was.
How was it having an in-person conference?
It's kind of been a long time since any of us have seen this.
So we as organizers were a bit stressed.
I would say till the moment that we start the event.
But it was a great success.
People were very excited getting
into a physical environment, seeing each other.
So, and they did come.
We had to close the registration
because we wanted to have a limited amount of people in the rooms.
So we had some over registrations that we had to close and people asked if we can just
give them a spare ticket.
That's nice to have overbooking. And we, you know, COVID-wise,
we had antigen fast checks for everybody on the first day.
Yeah.
And I think that C++ programmers do believe in vaccinations.
So it goes together.
If you believe in C++, in a way you believe in vaccinations. I think 100% were vaccinated. And those that were not, they had to come. And of course, masks when you are in the room.
And it went fine.
It went fine.
You know, people got to being used to wear masks.
You know, we are back to normal in a way.
And I do believe CppCon is going to be the same success.
And that's an interesting note for those who, I don't think we've mentioned this,
you are actually required to be vaccinated or have some other medical documentation for CppCon.
So when you go to register for the conference, you have to submit a copy of your vaccination certificate, whatever that looks like okay and we we also had um bianna uh although yeah he
wouldn't be able to come physically um he did a talk uh a virtual talk an online talk which was
great also avidity i felt like he's in the room avi yeah me as well me as well me as well. Me as well, me as well. The only thing I was missing is
him signing me on some book.
We are mostly, you know,
we appreciate very much
Bjarne giving his time and
it is always a pleasure
hearing him talking about C++ and seeing
how smart the ideas that were
to begin with and
things that he saw.
You go back to videos of Bjarne from the 90s,
and you see that he's speaking about the same things,
but the change is that it is now in the language.
It's crazy.
It's so nice to see that his thoughts are coming into the language, you know,
periodically or gradually, And that's fascinating.
Yeah, there is a talk that he did, I think, in 1994 about concepts.
Go and listen and see how much similar concepts are today.
That's crazy.
What was that he said is the last thing left?
Oh, the operator dot. He said the operator dot was the last thing left that he wants.
I mean, he said that in the past,
and it doesn't look like we'll ever get it.
Yeah, I think that he mentioned that also in his lecture in Core CPP.
Yeah, but I do agree that it seems that this one is off the table.
Even though you can do very smart things with operator dot,
but it seems that it goes to other directions.
Do you want to talk about some of the other topics
Bjarne went into during his keynote?
One of the good things of having Bjarne with us
is having people from the audience asking questions,
and the questions were very good
on the progress of the language, on comparing
it to other languages like Rust and D. So, Bjarne said that he played with Rust a bit
and he prefers C++, naturally. So, I would say the same. But I do think that Rust is a very interesting language.
I think it is.
It has something with that.
And people who go to Rust, which are not C++ lovers, people do like it.
I see people that go to Rust and say, yeah, it's a nice language.
On the other hand, most people that come from C++ in a way say that, well, it's too complicated
and it's not actually solving the actual problems.
I think it goes back to Fred Brooks of essence and accident.
So it might maybe try to deal with the accident, but the essence is there and the essence
is you know programming is a difficult thing and there isn't any silver bullet
and rust is not a silver bullet yet in order to write probably a linked list in
rust you have to go to unsafe because you have, you know, a doubly linked list or something is there
not owned.
And people coming from Rust would say, yeah, but then this would be in the library.
And you as a programmer are in the safe mode.
But eventually there is a learning curve.
And I would see the C++ is going as you get the liberty and you have to write efficient code and safe code. On the other
end, Rust is going with the compiler or static analyzer would protect you, but in a way will also
narrow your options. And then if you want to do something which you cannot, and maybe you need it for optimization, then you have to go to unsafe.
So in a way, these are two opposite ways of doing eventually the same thing.
Yeah, I've heard anecdotes from people doing code reviews in the Rust world where they'll go in to
look at someone's code and the new Rust programmer will be like, well, I couldn't figure out that borrow checker thing, so I just put everything in unsafe.
Which, I mean, completely, like, clearly that's like number one best practice.
Don't do this in Rust, right?
But it's the kind of thing that, you know, people do in any programming language if they're given that escape patch.
Yeah, I have a short blog on Rust versus C++, so maybe I will put it in the chat.
Okay, sure.
Yeah, we can share that.
Share that in the show notes.
Yeah.
Want to wrap the discussion for just a moment to bring you a word from our sponsor.
C-Line is a smart cross-platform IDE for C and C++ by JetBrains. It understands all the
tricky parts of modern C++ and integrates with essential tools from the C++ ecosystem,
like CMake, Clang tools, unit testing frameworks, sanitizers, profilers, Doxygen, and many others.
C-Lion runs its code analysis to detect unused and unreachable code, dangling pointers,
missing typecasts, no matching function overloads,
and many other issues. They are detected instantly as you type and can be fixed with a touch of a
button while the IDE correctly handles the changes throughout the project. No matter what you're
involved in, embedded development, CUDA, or Qt, you'll find specialized support for it. You can
run debug your apps locally, remotely, or on a microcontroller, as well as benefit from the collaborative development service.
Download the trial version and learn more at jb.gg slash cppcast dash cline.
Use the coupon code jetbrains for cppcast during checkout for a 25% discount off the
price of a yearly individual license.
Well, let's start talking a little bit more about some
other conference talks. Avi,
you gave one on writing
a cache-friendly C++ hash, is that right?
Yeah, yeah, I did.
So generally, if
I need to conclude the one-hour
talk in one sentence,
you should always use
Vector.
It's usually the best case.
But the main idea is that no matter what type of program you are writing in,
at the end, the hardware is the one that runs it.
And the hardware is running with cache, and the cache is working in a certain way.
Then it has to have cache locality and cache temporary, that those are characteristics
that affect the data itself.
And it should affect the way that we are programming our critical path.
By that, I mean, we should think about our cache line, what it holds, and we should really
try to use our cache line to the best.
I mean, if we decided to load something into the cache line, we should use it.
We should use all the cache line if we can.
So we should lay out our memory.
We should think about the layout of our memory in the cache in order to write a good cache-friendly software.
That's in a nutshell.
Which relates to data-oriented versus object-oriented?
Yeah, in a bit.
The idea is that array of struct and struct of array,
you're handling the data in a struct
that is keeping all the types the same,
so the alignment is good.
You're using only
the data that needs to be used
so if you have let's say
a shape rectangle
and the circle
and you want to calculate
their size and some of them
are visible and some of them are not visible
then today if I'm using an object
oriented programming I would create
a shape which is an abstract class,
and then I will inherit it to create a circle
and a rectangle, and I will have a Boolean saying
if it's visible or not visible,
and think about the cache line in that manner.
First, when you're drawing, you're running with a four,
which has an if, if it's visible or not visible each and every time.
Then you're calling a virtual function, which is also a pointer.
Then you're chasing stuff in memory.
That means that it doesn't sit near your cache.
And you're using visible in the worst manner.
Think about it.
You're loading stuff into cache
when all you need to know
is if it's visible or not visible.
You're loading all the cache line itself
in order to create the object.
And more than that,
a Boolean is a one-bit value.
Think about how much space
do you consume in the cache itself.
Think about the cache sizes.
They are very small, okay?
And the cache line itself is very small.
So you need to be very careful if you're on a hot path.
If you're not on a hot path, that's not that bad.
But if you're on a hot path, then you should think about it.
All right.
So do you actually then recommend having, like Amir mentioned,
like data-oriented design kind of thing,
like a completely separate data structure that is,
or array that is just the visibility of the objects or something like that?
It depends.
As I said at the beginning,
I find,
yeah,
I find that oriented design weird.
I was burned to build stuff in an object oriented design.
That's the way I think.
Okay.
Like I'm thinking in C plus plus, that's the way I think. Like I'm thinking in C++, that's the way I think.
Using data-oriented design really took me to a place where I really needed it.
And if I really needed it, then even assembly is stuff that I've done in order to be fast.
Right.
And then you still can hide the data-oriented design with proper classes.
So you may approach a class which is Circle, maybe with static functions, but eventually
you can hide the data-oriented way of building things when you need it.
I mean, don't go there when, you know, this is not your bottleneck.
Yeah, and one more thing maybe.
Think about your code.
Your code is also something that comes into your caches.
So think about inline.
Inline is great.
It's replacing stuff in your, when it happens,
it replaces stuff in your code by using the data of the code itself, right?
So it doesn't jump to a function to understand what it needs to do.
So it's something good from the cache perspective.
But from the other hand, it really blows the instruction set,
which means it might happen where something needs to occur
and another instruction is blown out of cache set, which means it might happen where something needs to occur and
another instruction is blown out of
cache because there was
an inline. Inline might affect
the cache size itself as well,
if you have a lot of inlines.
It was a very good talk, by the way. I liked
it very much. If you go to listen
for it, it's on YouTube,
but I would say
beforehand, it's in Hebrew. i would say uh beforehand it's in hebrew yeah uh some of the
some of the lectures in cpp were given in hebrew because it was a local uh conference this this
year right uh because of covid um we very we hope very much that uh next year we will be back to
uh to english to uh international conference but but this one was with local attendees, so
some of the talks were in Hebrew, some in English.
Yeah, I was going to ask, so then some people chose to speak in English, then, it sounds
like, to present in English, I mean.
Yeah, yeah.
It was open for the presenter to choose.
I'm trying to remember if there was, I know the first year, of course, Ivos was when I was there,
there was a planned Hebrew track,
but then if I recall, the plan for Hebrew track then was abandoned
when they got more international attendees.
It was all English.
Okay.
I went to your workshop.
Probably it will be all English next year, hopefully.
We do hope that next year will be back to English and international audience.
Yeah, we all hope that it'll be back to international audience next year.
Yeah, definitely.
Any other highlights from the conference that you want to cover before we...
I can talk a bit about my talk on C++ complexities,
which I'm giving a very similar talk.
Usually, you know, there are some nuances.
After you give some talk, then you amend things.
But we discussed the complexities,
and I asked the audience,
what is complex for you in C++?
And there was a questionnaire.
And it is interesting to look at the answers.
And in the same questionnaire,
I asked about how many years are you in C++?
So we can see the difference between veterans and newcomers.
So newcomers point at R value and move semantics.
Veterans don't see that as an issue.
They just got into it.
Both veterans and newcomers agree that dealing with memory issues,
I mean, when you have memory smears or leaks,
this is the top complexity for many,
which I think rasters will just jump and say,
okay, here we are, come to Rust.
And I would say that, you know,
it's not that there is a silver bullet.
And the other interesting items,
well, one of the items, one of the top items
is handling long builds, which
is a good answer coming from
IncrediBuild. We have a solution
for that, happily.
And we didn't push this answer.
It was there
with many other possibilities
and it seems that long builds
is still a problem in the C++ arena.
But there are
solutions for that.
So if you want to check on CrediBuild, you're invited.
So on that topic, since it was a small local conference,
did you still have the vendor tables and all those things at the?
Yes, we had.
Yes, we had.
We had, and with local companies, I'm trying to recall whether the companies present.
Yeah, we had also international companies like, for example, GM.
GM has a lot of C++ and GM was there.
Hiring, I assume.
Hiring mostly, but also presenting.
You know, people like to present what they do.
Right.
For, I would call it soft I-ring.
Don't come to us today.
You are elsewhere.
But maybe in two years, in three years, you have to know that we are doing interesting stuff.
Right.
On that topic of Incredibuild, Amir, we talked about, you know, you joining the company last time we had you on.
But Avi, you also joined recently as well?
Yeah, I'm here like four months.
It's been a journey for me to look for my right job.
I'm very passionate about C++ and what I'm doing. and I was looking for something that combined my passion
and my thoughts about C++,
and Incredibly is very invested in C++.
It really, I think you heard about the product,
but nevertheless, it really handles greatly
in distributing microservices or microprocessors
out of build but not only out of build it take the whole ecosystem into account like testing like
static analysis tool and other stuff so that people, you know, programmers would consider doing all that in a short while.
The main idea, if I'm thinking, IncrediBuild exists like 20 years.
And I look for the history of IncrediBuild and the owners really thought that they could
distribute stuff while one core exists because build took an hour and they thought when there
would be four cores they will be out of business but guess what when there were four cores it would
take an hour and and so and so because of code bloating, because of other
things that we are doing on the software itself.
So it's combined my passion and I'm happy to be here.
And they're using very cool stuff to do that.
Very intelligent caching mechanism things
in the cloud, out of the cloud
very interesting stuff happening here
What is your actual role?
I don't think we mentioned that
I didn't
it's weird a bit
I'm a group manager
of many groups
Oh no, not a manager
I think this is why
he didn't want to mention that
he wants to be a C++
developer
but he is a manager
maybe that's the case
it's not official
I came here to build the next
generation of
IncrediBuild, that's the reason I joined
them
but dreams alone and reality alone generation of IncrediBuild. That's the reason I joined them.
But dreams alone and reality
alone,
I came in and
I've added
a few groups.
There are difficult tasks
and really interesting stuff
that we are doing here.
You came in
thinking,
I'm going to help build the next generation of IncrediBuild,
what does that look like?
What is the vision for IncrediBuild right now?
So the general vision is to do what they are doing,
but taking into consideration things like other systems other than builds,
that's not that easy as it sounds.
You need to understand stuff like
dependencies and other stuff to be able to do that i think the the thing i love most about
incredible is that it is transparent to the programmer it doesn't need to do anything into
his tools nothing other than installing a small agent and all the magic occurs without him doing anything.
He's using CMake, Make, whatever, whatever tool chain he has,
it should work.
And doing that for other things is a difficult task
if you want to achieve that in that transparent.
So think about dealing with cache.
Dealing with cache for building would mean, you know,
saving the object file, understanding independencies,
signed it in some way, and so and so.
But doing that for testing is a different task, right?
So you actually then, with IncrediBuilder,
do you currently support distributed execution of the test environment?
Or is that one of these future goals?
It really depends how you write your test.
If you're writing them in the correct manner, then yes.
But if you don't...
So the answer is that we actually have customers that use IncrediBuild to accelerate testing.
Intel does.
Intel does and other big companies do.
But in order to make it more transparent,
there is still some work to be done.
Nevertheless, it is working with tests.
So there are customers using acceleration forward testing
to the cloud or on-prem using CrediBuild.
I was just looking at someone else's test.
You had to execute the test from a particular hard-coded known directory
because it didn't take into account where you may have chosen to put the build directory,
for example, which CMake and CTest you can do.
But it's easy to do that kind of hard-coded thing, which I can imagine would
then get in the way of trying to distribute the execution of your test.
So the general idea is that we are virtualizing the process itself. We are not doing that on
the same machine, right? We are taking that process and creating that on another agent,
and that agent is talking to the initiator in order to understand the
dependencies so that he could load from there what it needs, if it's a file, if it's an
environment variable, and so, okay?
So, for example, I think if I can take it to build, if you go to a machine which has
an agent but doesn't have the proper version of the compiler, you would get it transparently with the credit build.
So it's really just, you know, like click about to build.
And for the build process, this is something that is being very transparent for other things uh can be done being done but there is still work to make it
transparent as uh the build process for c++ other things covet 19 pushed us to work on a low
bandwidth the networks and stuff like that that we hadn't had the chance yet and there are other
big tasks need to be achieved in order for that to be really transparent for what we want to call the next generation.
And there is always the challenge of supporting all different environments because customers come with different compilers, different operating systems, environments, etc.
And eventually they want the thing just to work.
And this is one of the challenges.
I wonder if we could maybe go back to C++ committee work for a moment.
Avi, how long have you been with the committee?
I'm there a bit before Prague.
Avi went to Prague.
I think that Avi can share the experience of being when C++20 was signed and released.
I was so afraid to talk there.
I can't tell you guys because everyone I knew were in the room.
The feeling is great.
I think that the committee is doing a great job.
I think that we could see that in C++,
if you take like a decade ago,
everybody would say that C++ was at least a bit declining.
And maybe we should use C Sharp
or Java or other languages at the time.
Or C++.net maybe.
Yeah, manage C++, yeah.
And other languages at that time.
And I think that today we could see that there are many features, a lot of stuff.
I'm doing that like for 25 years now.
And I'm loving C++.
I don't know.
I'm that geek. I've been know. I'm a dead geek.
I've been to the first CPPConf ever
with Bjorn Strauss-Trube and Herb Sutter.
There were, I think, 200 people there.
How many are going to be in Colorado now?
Oh.
In 2021, we don't know,
but if it had stayed on track, then it would have been something like 1300.
So think about that. Herb Sutter stood on the stage with Bjorn Strauss with a piano and sang us a song.
We are the champion or something like that. We will still build look it up that's uh that's interesting because
yeah i don't know the last time i saw her play the piano he would do that regularly at cbp con
in seattle would just randomly use one yeah yeah think about taking 3 000 people and and
or 30 000 people and and put them with a piano and Herb Sutter will
sing a song.
We have to ask him for that. The first CppCon
was in New York?
It was in Seattle, right?
No, it wasn't in Seattle. I don't remember
the place it was. I think maybe Washington,
maybe New York.
I don't remember.
I thought CppCon was always in
Bellevue before it went to Colorado.
It started from the Going Native conference.
It came out of that, but I wasn't there the first year or two.
2015 was my first year.
I missed the first one or two years.
So talking a bit about the ISO,
so when you want to release a new paper,
then you should submit that to the committee and the committee is dealing with it. So I wanted to
tell you a bit about how that's done. Okay. So there is a group called the WG21.
That's a technical name for the committee itself.
The committee converges three times a year for a week.
Each time, the most important day is Saturday.
That's the day that everybody votes for what's going in and what's not going in.
Each time, there is a new draft.
It depends if it's a draft for ETS or international standard.
And then it goes to the father committee so that it could be released as an international standard.
That's the general idea.
And beneath it, there are two main groups. There is the core group that deals with everything that is in the language.
And there is the library group that deals with everything that is in the library.
And beneath it, there are special groups that are dealing with special things like ranges.
And there are many, many groups.
So you could go and look for them.
So, and today,
since there are many, many papers,
the groups that start with the papers
are called incubators.
So we have two incubators,
one that are for the language
and the other one is for the library.
And my impression
from being in the room
with all those guys were amazing.
I think this is the way that you could influence
really about the language.
Really write a paper.
Don't just talk about it.
Even though I'm only talking about it.
But I'm really trying to influence.
I have many friends that are writing papers.
I'm trying to review them, trying to give them some country.
And it's a really interesting process.
And I think this is the reason that this language, it's like, how long does this language exist?
More than 20 years, right?
Do you know anything in technology that exists more than 20 years?
35, 36.
Yeah, so I think it's amazing.
It relates to something that Bjarne raised in his talk in CoreCPP,
that a change has to be made slowly and carefully.
And I think the committee is smart enough to review anything with great care,
to understand what is the purpose, how to go there,
or maybe there are other means to achieve the same goal.
So it's not that there is a good idea.
Let's rush for it.
Let's push it into the language.
Let's see what we want to achieve um other any
other maybe simpler uh ideas to achieve the same and what it might break which all is always a very
important question definitely we haven't asked this in a while but um what are your thoughts on
how the committee work has been going over the past year and a half plus now since Prague with the virtual meetings?
Yeah, it's much more complex.
And it's not me saying it, it's the committee saying that.
There was a question after Bjarne talked in Call of CPP about how do he sees C++23 and would it be affected by COVID
because there aren't any face-to-face meetings for the ISA committee.
And Manu said that, yeah, he thinks that it would slow down a bit C++23,
so less things would go in.
He would like to see more things, but this is how it goes right now. slow down a bit, C++23, so less things would go in.
You would like to see more things, but this is how it goes right now.
And I think the reason is quite clear.
It's much harder to push things when you have to, in a 20-people meeting in a Zoom, it's not the same as 20 people in the same room.
Are there any tentative plans yet for an in-person meeting?
Or is it still just TBD?
Well, Amir and Avi, it was great having you on the show today.
Are there any plans for CoreCVP 2022 yet?
We start talking about that right at the moment that we close
2021.
We want to see how
COVID goes on because
again, the plans are to
have an international conference like we had
in 2019.
So we have to wait a bit and see
how it goes. But I think that with the success
of the local conference
and the real demand for
it, people like it. People want to join. So we would probably either have a local conference
if we still have difficulties with an international one. But I do hope things should, you know,
at some end, have everybody vaccinated and going back to normal.
So I hope that we would have an international one.
Hear yourself out.
Yeah, hear yourself.
All right.
Well, thank you both for coming on the show today.
Thank you.
Thank you.
Thank you for having us.
Thank you.
Thank you.
It was a pleasure.
Bye-bye, guys.
Bye.
Thanks so much for listening in as we chat about C++.
We'd love to hear what you think of the podcast.
Please let us know if we're discussing the stuff you're interested in. Thanks so much for listening in as we chat about C++. We'd love to hear what you think of the podcast.
Please let us know if we're discussing the stuff you're interested in,
or if you have a suggestion for a topic, we'd love to hear about that too.
You can email all your thoughts to feedback at cppcast.com.
We'd also appreciate if you can like CppCast on Facebook and follow CppCast on Twitter.
You can also follow me at Rob W. Irving and Jason at Lefticus on Twitter.
We'd also like to thank all our patrons who help support the show through Patreon.
If you'd like to support us on Patreon, you can do so at patreon.com slash cppcast.
And of course, you can find all that info and the show notes on the podcast website at cppcast.com.
Theme music for this episode was provided by podcastthemes.com.