← Back
Scott Hanselman November 20, 2025 35m

C++ is Still Here, Still Powerful with Gabriel Dos Reis

Read full transcript 28 segments
  1. Hey friends, it's Scott. I want to take Hey friends, it's Scott. I want to take a moment in the middle of the show here a moment in the middle of the show here a moment in the middle of the show here and just thank our sponsor, Tupil. I'm and just thank our sponsor, Tupil. I'm and just thank our sponsor, Tupil. I'm chatting with Johnny Marlor from Tupal. chatting with Johnny Marlor from Tupal. chatting with Johnny Marlor from Tupal. You know, Johnny, why do most screen You know, Johnny, why do most screen You know, Johnny, why do most screen sharing tools suck so much for sharing tools suck so much for sharing tools suck so much for developers? Like business folks, they developers? Like business folks, they developers? Like business folks, they love a good Teams call or a Zoom call, love a good Teams call or a Zoom call, love a good Teams call or a Zoom call, but for programmers, it just doesn't but for programmers, it just doesn't but for programmers, it just doesn't feel the same. feel the same. feel the same. >> Yeah, I think it's, you know, business >> Yeah, I think it's, you know, business >> Yeah, I think it's, you know, business people are doing something completely people are doing something completely people are doing something completely different than developers. you know, different than developers. you know, different than developers. you know, they'll get on a call and they'll share they'll get on a call and they'll share they'll get on a call and they'll share slides or share a doc and just use it to slides or share a doc and just use it to slides or share a doc and just use it to talk, but you know, when we're talk, but you know, when we're talk, but you know, when we're developers, we're actually creating developers, we're actually creating developers, we're actually creating something together. So, it's really nice something together. So, it's really nice something together. So, it's really nice to have that tool that's specifically to have that tool that's specifically to have that tool that's specifically tailor made for that process. Um, I know tailor made for that process. Um, I know tailor made for that process. Um, I know if you're a programmer and you've done if you're a programmer and you've done if you're a programmer and you've done any pairing, we've all been there where, any pairing, we've all been there where, any pairing, we've all been there where, you know, you're trying to dictate, hey, you know, you're trying to dictate, hey, you know, you're trying to dictate, hey, no, change that function. No, not that no, change that function. No, not that no, change that function. No, not that line, that line, or you're trying to to line, that line, or you're trying to to line, that line, or you're trying to to verbalize a CLI command is space or dash verbalize a CLI command is space or dash verbalize a CLI command is space or dash or was it forward or backslash at, you or was it forward or backslash at, you or was it forward or backslash at, you know, when when I'm pairing, I need I know, when when I'm pairing, I need I know, when when I'm pairing, I need I don't know about you, but I need all my don't know about you, but I need all my don't know about you, but I need all my brain cells. Um, and I don't want to be brain cells. Um, and I don't want to be brain cells. Um, and I don't want to be wasting them like trying to verbalize wasting them like trying to verbalize wasting them like trying to verbalize that communication. So, um, Tupil just that communication. So, um, Tupil just that communication. So, um, Tupil just makes all that easy. Uh, you get you get makes all that easy. Uh, you get you get makes all that easy. Uh, you get you get one-click annotation tools. Um, you can one-click annotation tools. Um, you can one-click annotation tools. Um, you can share control by default. There's no share control by default. There's no share control by default. There's no hidden settings that you have to go hidden settings that you have to go hidden settings that you have to go through. And there's no like Chrome or through. And there's no like Chrome or through. And there's no like Chrome or like uh UI that's covering up your IDE.

  2. like uh UI that's covering up your IDE. like uh UI that's covering up your IDE. It's just it's just made for It's just it's just made for It's just it's just made for programming. And um I think once you programming. And um I think once you programming. And um I think once you once you try Tupal, it's it's really once you try Tupal, it's it's really once you try Tupal, it's it's really hard to go back to generic screen hard to go back to generic screen hard to go back to generic screen sharing tools. It's really hard to go sharing tools. It's really hard to go sharing tools. It's really hard to go back. Actually, that is super true. You back. Actually, that is super true. You back. Actually, that is super true. You can check it out at tupil.app. It is the can check it out at tupil.app. It is the can check it out at tupil.app. It is the best tailor made remote pair programming best tailor made remote pair programming best tailor made remote pair programming app for both MacOSS and Windows. app for both MacOSS and Windows. app for both MacOSS and Windows. Hi, I'm Scott Hanselman. This is another Hi, I'm Scott Hanselman. This is another Hi, I'm Scott Hanselman. This is another episode of Hansel Minutes. Today I have episode of Hansel Minutes. Today I have episode of Hansel Minutes. Today I have the distinct pleasure of chatting with the distinct pleasure of chatting with the distinct pleasure of chatting with Gabriel Dos Rees, Dr. Gabriel Doses, Gabriel Dos Rees, Dr. Gabriel Doses, Gabriel Dos Rees, Dr. Gabriel Doses, principal SD at Microsoft and C++ principal SD at Microsoft and C++ principal SD at Microsoft and C++ expert. How are you, sir? expert. How are you, sir? expert. How are you, sir? >> I'm doing pretty good, Scott. Thanks for >> I'm doing pretty good, Scott. Thanks for >> I'm doing pretty good, Scott. Thanks for inviting me on your on your show. inviting me on your on your show. inviting me on your on your show. >> Yeah, thanks for spending time with me. >> Yeah, thanks for spending time with me. >> Yeah, thanks for spending time with me. Uh, you have you've been an expert for Uh, you have you've been an expert for Uh, you have you've been an expert for the better part of 30 years in C++. I the better part of 30 years in C++. I the better part of 30 years in C++. I learned it in uh 1992 as part of my learned it in uh 1992 as part of my learned it in uh 1992 as part of my undergraduate. And um but honestly, I undergraduate. And um but honestly, I undergraduate. And um but honestly, I have to be honest, I haven't really used have to be honest, I haven't really used have to be honest, I haven't really used C++ since college. So I understand a lot C++ since college. So I understand a lot C++ since college. So I understand a lot has changed. It is not the language that has changed. It is not the language that has changed. It is not the language that I learned. I learned. I learned. >> Yeah, I think that is true. I I only >> Yeah, I think that is true. I I only >> Yeah, I think that is true. I I only started in 95. So you're way ahead started in 95. So you're way ahead started in 95. So you're way ahead [laughter] of me [laughter] of me [laughter] of me and by a series of coincidence, I became and by a series of coincidence, I became and by a series of coincidence, I became part of the uh C++ standards committee part of the uh C++ standards committee part of the uh C++ standards committee in 97.

  3. in 97. in 97. And uh yeah, the language has changed a And uh yeah, the language has changed a And uh yeah, the language has changed a lot since I learned in 95 or '90s and lot since I learned in 95 or '90s and lot since I learned in 95 or '90s and it's it's very different. it's it's very different. it's it's very different. >> How do you accidentally end up on the >> How do you accidentally end up on the >> How do you accidentally end up on the ISO C++ standards committee after only ISO C++ standards committee after only ISO C++ standards committee after only two years of spending time with the two years of spending time with the two years of spending time with the language? Oh. Uh, [laughter] language? Oh. Uh, [laughter] language? Oh. Uh, [laughter] well, my professors are no longer around well, my professors are no longer around well, my professors are no longer around here, so I could confess that, uh, I here, so I could confess that, uh, I here, so I could confess that, uh, I skipped the algebra classes and spent skipped the algebra classes and spent skipped the algebra classes and spent too much time in the computer room too much time in the computer room too much time in the computer room playing with, uh, GCC and trying to fix playing with, uh, GCC and trying to fix playing with, uh, GCC and trying to fix stuff. And I, um, I made the u this stuff. And I, um, I made the u this stuff. And I, um, I made the u this error thinking that a compiler is just a error thinking that a compiler is just a error thinking that a compiler is just a software and if it has bug, it could be software and if it has bug, it could be software and if it has bug, it could be fixed. And, and trying to fix it is what fixed. And, and trying to fix it is what fixed. And, and trying to fix it is what got me into the standards committee. So got me into the standards committee. So got me into the standards committee. So you tried to fix something and the next you tried to fix something and the next you tried to fix something and the next thing you know you're on a mailing list thing you know you're on a mailing list thing you know you're on a mailing list and the next thing you know the people and the next thing you know the people and the next thing you know the people on the mailing list say he sounds like on the mailing list say he sounds like on the mailing list say he sounds like Eddie knows what he's talking about come Eddie knows what he's talking about come Eddie knows what he's talking about come to our meeting. to our meeting. to our meeting. >> Yep. My first contribution to GCC was uh >> Yep. My first contribution to GCC was uh >> Yep. My first contribution to GCC was uh in 97 97 uh was the implementation of in 97 97 uh was the implementation of in 97 97 uh was the implementation of Valer numerical components and it has Valer numerical components and it has Valer numerical components and it has bunch of issues. So I reported them and bunch of issues. So I reported them and bunch of issues. So I reported them and I was told well the way you get them I was told well the way you get them I was told well the way you get them fixed is you join your national body. Uh fixed is you join your national body. Uh fixed is you join your national body. Uh I was in France at the time and that was I was in France at the time and that was I was in France at the time and that was after and I as well yeah come over here after and I as well yeah come over here after and I as well yeah come over here but you have to go to the meeting. So but you have to go to the meeting. So but you have to go to the meeting. So [laughter] [laughter] [laughter] >> now back in the day of course there >> now back in the day of course there >> now back in the day of course there wasn't git. We would send patch files wasn't git. We would send patch files wasn't git. We would send patch files around via email on the Usenet. Is that around via email on the Usenet. Is that around via email on the Usenet. Is that correct sir?

  4. correct sir? correct sir? >> Yeah it was correct. CVS uh is what >> Yeah it was correct. CVS uh is what >> Yeah it was correct. CVS uh is what we're we're using and uh yeah it's very we're we're using and uh yeah it's very we're we're using and uh yeah it's very different mail you know if you if you different mail you know if you if you different mail you know if you if you follow GCC development is the thing is follow GCC development is the thing is follow GCC development is the thing is still male. There is no Yeah. still male. There is no Yeah. still male. There is no Yeah. >> Yeah. I think I was using Elm or >> Yeah. I think I was using Elm or >> Yeah. I think I was using Elm or something. It was very a very different something. It was very a very different something. It was very a very different time. You you'd basically send patch time. You you'd basically send patch time. You you'd basically send patch files around basically diffs. files around basically diffs. files around basically diffs. >> Yes. >> Yes. >> Yes. >> And then you download the diff and you'd >> And then you download the diff and you'd >> And then you download the diff and you'd apply it to your local build and see if apply it to your local build and see if apply it to your local build and see if it worked. And then it was it was very it worked. And then it was it was very it worked. And then it was it was very line by line. It was very crafted uh line by line. It was very crafted uh line by line. It was very crafted uh time. time. time. >> Yes. And uh the uh you know the the >> Yes. And uh the uh you know the the >> Yes. And uh the uh you know the the comedy review that you got is actually comedy review that you got is actually comedy review that you got is actually on on the tips like that. on on the tips like that. on on the tips like that. Yes. Yes. Yes. >> Wow. And now you're at Microsoft. You've >> Wow. And now you're at Microsoft. You've >> Wow. And now you're at Microsoft. You've been at Microsoft almost uh 13 years, been at Microsoft almost uh 13 years, been at Microsoft almost uh 13 years, >> correct? Yes. >> correct? Yes. >> correct? Yes. >> Honestly, this might be a spicy >> Honestly, this might be a spicy >> Honestly, this might be a spicy question, but like how does someone who question, but like how does someone who question, but like how does someone who is in the free software foundation for is in the free software foundation for is in the free software foundation for 16 years end up working for like the at 16 years end up working for like the at 16 years end up working for like the at the time the evil empire? [laughter] the time the evil empire? [laughter] the time the evil empire? [laughter] >> Very good question. And and honestly, if >> Very good question. And and honestly, if >> Very good question. And and honestly, if you had uh asked me that question in you had uh asked me that question in you had uh asked me that question in 2002, oh would you work for Microsoft?

  5. 2002, oh would you work for Microsoft? 2002, oh would you work for Microsoft? I'll say hell no. And that was known as I'll say hell no. And that was known as I'll say hell no. And that was known as an opinion. Uh by 2013 an opinion. Uh by 2013 an opinion. Uh by 2013 uh I think the company has gone under a uh I think the company has gone under a uh I think the company has gone under a lot of changes and it was also around lot of changes and it was also around lot of changes and it was also around when Satia Nadella was took I mean Sach when Satia Nadella was took I mean Sach when Satia Nadella was took I mean Sach took over in 2014. and I joined in took over in 2014. and I joined in took over in 2014. and I joined in September but the changes in terms of September but the changes in terms of September but the changes in terms of you know openness to soft open software you know openness to soft open software you know openness to soft open software was already underway and uh given my was already underway and uh given my was already underway and uh given my interest at the time things just aligned interest at the time things just aligned interest at the time things just aligned and uh I have been having a very good and uh I have been having a very good and uh I have been having a very good time since then when I joined the the time since then when I joined the the time since then when I joined the the division really wanted to have a a division really wanted to have a a division really wanted to have a a standard conformant C++ compiler and I'm standard conformant C++ compiler and I'm standard conformant C++ compiler and I'm like yay counts me like yay counts me like yay counts me >> [laughter] >> [laughter] >> [laughter] >> So that was the thing though, that was >> So that was the thing though, that was >> So that was the thing though, that was the promise I think when Microsoft the promise I think when Microsoft the promise I think when Microsoft really joined the standards community really joined the standards community really joined the standards community and said we're not making the Microsoft and said we're not making the Microsoft and said we're not making the Microsoft C++ compiler, we're making the best most C++ compiler, we're making the best most C++ compiler, we're making the best most compliant C++ compiler. That sounds like compliant C++ compiler. That sounds like compliant C++ compiler. That sounds like that was an attractive thing for you.

  6. that was an attractive thing for you. that was an attractive thing for you. >> Yeah, it was. And and I will say one >> Yeah, it was. And and I will say one >> Yeah, it was. And and I will say one thing like since I joined in 2013 thing like since I joined in 2013 thing like since I joined in 2013 there has not been not a single there has not been not a single there has not been not a single Microsoft dialect of C++ put out and Microsoft dialect of C++ put out and Microsoft dialect of C++ put out and before I joined there were quite a you before I joined there were quite a you before I joined there were quite a you know a fewations but know a fewations but know a fewations but >> since I joined we got um you know C++ 17 >> since I joined we got um you know C++ 17 >> since I joined we got um you know C++ 17 conformance u you know 14 17 20 now the conformance u you know 14 17 20 now the conformance u you know 14 17 20 now the team is working on on 23 and we're very team is working on on 23 and we're very team is working on on 23 and we're very much engaged in the C++ standards and in much engaged in the C++ standards and in much engaged in the C++ standards and in the community we really want to have the the community we really want to have the the community we really want to have the best C++ tool set on Windows platform. best C++ tool set on Windows platform. best C++ tool set on Windows platform. >> Now when I mentioned I I learned in '92 >> Now when I mentioned I I learned in '92 >> Now when I mentioned I I learned in '92 93 like early early early days this is 93 like early early early days this is 93 like early early early days this is before the standard template library. before the standard template library. before the standard template library. >> Yes. >> Yes. >> Yes. >> So I was getting out of C++ right as the >> So I was getting out of C++ right as the >> So I was getting out of C++ right as the STL and iterators and the templates that STL and iterators and the templates that STL and iterators and the templates that we now know today were were were we now know today were were were we now know today were were were happening. Why do you think that people happening. Why do you think that people happening. Why do you think that people think of C++ as this old crusty static think of C++ as this old crusty static think of C++ as this old crusty static language when so much has happened? I language when so much has happened? I language when so much has happened? I mean there's literally been like 23 mean there's literally been like 23 mean there's literally been like 23 versions since I got out of it.

  7. versions since I got out of it. versions since I got out of it. >> So that's actually a very good question. >> So that's actually a very good question. >> So that's actually a very good question. Um I don't know if there is one single Um I don't know if there is one single Um I don't know if there is one single cause for that. You know, I think the cause for that. You know, I think the cause for that. You know, I think the first is C++ has tried very hard to be first is C++ has tried very hard to be first is C++ has tried very hard to be compatible with C compatible with C compatible with C >> and then the version that many people >> and then the version that many people >> and then the version that many people learn was now the version C with learn was now the version C with learn was now the version C with classes. If you press C with classes in classes. If you press C with classes in classes. If you press C with classes in the '9s or 2000s, they will still work the '9s or 2000s, they will still work the '9s or 2000s, they will still work today. [snorts] So, you know, that today. [snorts] So, you know, that today. [snorts] So, you know, that stability in terms of compatibility stability in terms of compatibility stability in terms of compatibility doesn't in itself sell us, hey, there is doesn't in itself sell us, hey, there is doesn't in itself sell us, hey, there is new thing, right? [laughter] new thing, right? [laughter] new thing, right? [laughter] when the summer library came in it was a when the summer library came in it was a when the summer library came in it was a complete change in terms of uh thinking complete change in terms of uh thinking complete change in terms of uh thinking like what you people call paradigm shift like what you people call paradigm shift like what you people call paradigm shift but because of this other aspect of C++ but because of this other aspect of C++ but because of this other aspect of C++ which is going to be compatible with which is going to be compatible with which is going to be compatible with what already exists there was not a lot what already exists there was not a lot what already exists there was not a lot of push to say hey go and rewrite your of push to say hey go and rewrite your of push to say hey go and rewrite your stuff you if you already had something stuff you if you already had something stuff you if you already had something that is working unless you have business that is working unless you have business that is working unless you have business incentives to modernize or to rewrite incentives to modernize or to rewrite incentives to modernize or to rewrite you know the language itself is not you know the language itself is not you know the language itself is not going to force you to hey you have to going to force you to hey you have to going to force you to hey you have to rewrite everything otherwise I'm not rewrite everything otherwise I'm not rewrite everything otherwise I'm not going to compile right so I think that going to compile right so I think that going to compile right so I think that contributed to um that fossilization of contributed to um that fossilization of contributed to um that fossilization of the idea that ah this is old and so the idea that ah this is old and so the idea that ah this is old and so forth and the other thing is that forth and the other thing is that forth and the other thing is that collectively some of people like me who collectively some of people like me who collectively some of people like me who go around and telling people what C++ is go around and telling people what C++ is go around and telling people what C++ is we do not we I don't think we have

  8. we do not we I don't think we have we do not we I don't think we have always done a good job at showcasing always done a good job at showcasing always done a good job at showcasing what modern C++ ++ is like we we a lot what modern C++ ++ is like we we a lot what modern C++ ++ is like we we a lot of people go around and give talk about of people go around and give talk about of people go around and give talk about what it looks like, what it feels like what it looks like, what it feels like what it looks like, what it feels like and so forth. But sometimes you know the and so forth. But sometimes you know the and so forth. But sometimes you know the the proof of the pudding is in the the proof of the pudding is in the the proof of the pudding is in the eating like we have to showcase really eating like we have to showcase really eating like we have to showcase really good no app killer that is written good no app killer that is written good no app killer that is written modern C++ and got people into there modern C++ and got people into there modern C++ and got people into there just like the STL itself did right the just like the STL itself did right the just like the STL itself did right the STL says hey this is how you do things STL says hey this is how you do things STL says hey this is how you do things it open people mind to new perspective it open people mind to new perspective it open people mind to new perspective we need something like that for the we need something like that for the we need something like that for the newer features newer features newer features >> yeah I think you're right I feel also >> yeah I think you're right I feel also >> yeah I think you're right I feel also that the that the that the reputation is not as much rooted in what reputation is not as much rooted in what reputation is not as much rooted in what is happening today and more in how it is happening today and more in how it is happening today and more in how it evolved because you're absolutely right. evolved because you're absolutely right. evolved because you're absolutely right. You nailed it. I learned C with classes. You nailed it. I learned C with classes. You nailed it. I learned C with classes. And then I said, "Oh, that's C with And then I said, "Oh, that's C with And then I said, "Oh, that's C with classes." And I've held that internal classes." And I've held that internal classes." And I've held that internal bias and all the KN&R style code and bias and all the KN&R style code and bias and all the KN&R style code and where I put my curly braces today in where I put my curly braces today in where I put my curly braces today in 2025. Uh, and that's great. You can 2025. Uh, and that's great. You can 2025. Uh, and that's great. You can still compile KN&R, like a 1989 KN&R still compile KN&R, like a 1989 KN&R still compile KN&R, like a 1989 KN&R style code, that'll compile today. But style code, that'll compile today. But style code, that'll compile today. But you're so you're carrying the weight of you're so you're carrying the weight of you're so you're carrying the weight of 40 years of backward compatibility and 40 years of backward compatibility and 40 years of backward compatibility and all the foot guns and everything while all the foot guns and everything while all the foot guns and everything while maybe rust and go they get to pretend maybe rust and go they get to pretend maybe rust and go they get to pretend that they just got made up fresh and that they just got made up fresh and that they just got made up fresh and what's happening is they're learning all what's happening is they're learning all what's happening is they're learning all the lessons of 40 years of C++ and then the lessons of 40 years of C++ and then the lessons of 40 years of C++ and then ignoring all the backwards ignoring all the backwards ignoring all the backwards compatibility.

  9. compatibility. compatibility. >> Yeah. Yeah. It's extremely hard to live >> Yeah. Yeah. It's extremely hard to live >> Yeah. Yeah. It's extremely hard to live with history like backward compatibility with history like backward compatibility with history like backward compatibility stability is a feature in itself. If I stability is a feature in itself. If I stability is a feature in itself. If I come to you every two years and say hey come to you every two years and say hey come to you every two years and say hey Scott I got a new fantastic way of Scott I got a new fantastic way of Scott I got a new fantastic way of writing and you have to throw away your writing and you have to throw away your writing and you have to throw away your previous code which was working because previous code which was working because previous code which was working because I have this new thing. I think at some I have this new thing. I think at some I have this new thing. I think at some point you'll like I'm done [laughter] point you'll like I'm done [laughter] point you'll like I'm done [laughter] right but if I come to you and say hey I right but if I come to you and say hey I right but if I come to you and say hey I have new stuff for you uh I will still have new stuff for you uh I will still have new stuff for you uh I will still make sure what you had before is working make sure what you had before is working make sure what you had before is working because your business depends on it but because your business depends on it but because your business depends on it but when you have an opportunity to upgrade when you have an opportunity to upgrade when you have an opportunity to upgrade this is how you can do it then the whole this is how you can do it then the whole this is how you can do it then the whole thing becomes you know yes I'll take thing becomes you know yes I'll take thing becomes you know yes I'll take that then you prioritize based on what that then you prioritize based on what that then you prioritize based on what your customers are asking and you know your customers are asking and you know your customers are asking and you know sometimes you get a first in function sometimes you get a first in function sometimes you get a first in function like these days memory safety is uh it's like these days memory safety is uh it's like these days memory safety is uh it's a big thing. So you know now there is a a big thing. So you know now there is a a big thing. So you know now there is a forcing function to go back and forcing function to go back and forcing function to go back and re-examine like take a hard look at how re-examine like take a hard look at how re-examine like take a hard look at how you're writing your code and here is a you're writing your code and here is a you're writing your code and here is a different way of expressing the same different way of expressing the same different way of expressing the same ideas that are devoid of those food gums ideas that are devoid of those food gums ideas that are devoid of those food gums and traps and so forth. So it becomes and traps and so forth. So it becomes and traps and so forth. So it becomes okay do I rewrite in go rust or java c okay do I rewrite in go rust or java c okay do I rewrite in go rust or java c or can I take an incremental or can I take an incremental or can I take an incremental uh renovation of the house if I can so uh renovation of the house if I can so uh renovation of the house if I can so you know speak you know I'm still you know speak you know I'm still you know speak you know I'm still servicing my customers but I'm making it servicing my customers but I'm making it servicing my customers but I'm making it better and safer.

  10. better and safer. better and safer. >> Let me try this analogy and let me tell >> Let me try this analogy and let me tell >> Let me try this analogy and let me tell what you think. So you know certainly what you think. So you know certainly what you think. So you know certainly you speak C++ and you speak C++ over you speak C++ and you speak C++ over you speak C++ and you speak C++ over time. time. time. >> Yes. [clears throat] So you speak both >> Yes. [clears throat] So you speak both >> Yes. [clears throat] So you speak both the C++ that I learned the C++ that I learned the C++ that I learned >> Mhm. >> Mhm. >> Mhm. >> and you speak we'll just pick a number >> and you speak we'll just pick a number >> and you speak we'll just pick a number C++ 17 C++ 17 C++ 17 >> Mhm. >> Mhm. >> Mhm. >> as well as 23 and then future 26. So for >> as well as 23 and then future 26. So for >> as well as 23 and then future 26. So for you the language is not just I know C++ you the language is not just I know C++ you the language is not just I know C++ but I'm an expert and there's a temporal but I'm an expert and there's a temporal but I'm an expert and there's a temporal line. line. line. >> Correct. >> Correct. >> Correct. >> Now what how many human languages do you >> Now what how many human languages do you >> Now what how many human languages do you speak? I know that you took your PhD in speak? I know that you took your PhD in speak? I know that you took your PhD in France. France. France. >> Yes. So I was born in Togo uh West >> Yes. So I was born in Togo uh West >> Yes. So I was born in Togo uh West Africa and my native language is a so Africa and my native language is a so Africa and my native language is a so when I talk to my mom and and my family when I talk to my mom and and my family when I talk to my mom and and my family we speak a we speak a we speak a >> okay >> okay >> okay >> but when I talk to my friends in France >> but when I talk to my friends in France >> but when I talk to my friends in France speak French my wife speak French and of speak French my wife speak French and of speak French my wife speak French and of course I immigrated to the US so you course I immigrated to the US so you course I immigrated to the US so you know with most of my colleagues I speak know with most of my colleagues I speak know with most of my colleagues I speak English um probably three languages and English um probably three languages and English um probably three languages and my daughter got me interested in my daughter got me interested in my daughter got me interested in Japanese which I'm learning is very on Japanese which I'm learning is very on Japanese which I'm learning is very on interestingly it shares some similarity interestingly it shares some similarity interestingly it shares some similarity with my native language. So [laughter] with my native language. So [laughter] with my native language. So [laughter] there is that and of course then we have there is that and of course then we have there is that and of course then we have the computer languages uh which is not the computer languages uh which is not the computer languages uh which is not human languages but again it is all human languages but again it is all human languages but again it is all about [snorts] expressing ideas with about [snorts] expressing ideas with about [snorts] expressing ideas with different ways of looking at things.

  11. different ways of looking at things. different ways of looking at things. >> Mhm. Okay. So then if you grew up in >> Mhm. Okay. So then if you grew up in >> Mhm. Okay. So then if you grew up in Togo speaking you said it was e Togo speaking you said it was e Togo speaking you said it was e >> Yes. Ew. Yes. >> Yes. Ew. Yes. >> Yes. Ew. Yes. >> Ew. Eve. I'm assuming that the a you >> Ew. Eve. I'm assuming that the a you >> Ew. Eve. I'm assuming that the a you learned of the 80s is not the a of the learned of the 80s is not the a of the learned of the 80s is not the a of the modern time. modern time. modern time. >> Absolutely. Last time I went back and I >> Absolutely. Last time I went back and I >> Absolutely. Last time I went back and I was having quite few difficulty the was having quite few difficulty the was having quite few difficulty the first few days you know speaking first few days you know speaking first few days you know speaking colloquial and things have evolved and colloquial and things have evolved and colloquial and things have evolved and you know. you know. you know. >> Exactly. So there's like ev 14 and a 26 >> Exactly. So there's like ev 14 and a 26 >> Exactly. So there's like ev 14 and a 26 are like not the same language. are like not the same language. are like not the same language. >> Yes. Exactly. >> Yes. Exactly. >> Yes. Exactly. >> Right. And like my wife uh lived in >> Right. And like my wife uh lived in >> Right. And like my wife uh lived in Paris and she speaks French and when we Paris and she speaks French and when we Paris and she speaks French and when we go to Canada, she discovers that they go to Canada, she discovers that they go to Canada, she discovers that they are not as appreciative of her 1990s are not as appreciative of her 1990s are not as appreciative of her 1990s Parisian French Parisian French Parisian French >> and they would very much prefer that she >> and they would very much prefer that she >> and they would very much prefer that she speaks, you know, the way, you know, a speaks, you know, the way, you know, a speaks, you know, the way, you know, a proper Quebec wa. proper Quebec wa. proper Quebec wa. >> Exactly. >> Exactly. >> Exactly. >> So I feel like we don't talk when when >> So I feel like we don't talk when when >> So I feel like we don't talk when when we talk about knowing a language, we we talk about knowing a language, we we talk about knowing a language, we don't talk about the temporal aspects of don't talk about the temporal aspects of don't talk about the temporal aspects of it. You know, your French may be modern, it. You know, your French may be modern, it. You know, your French may be modern, but it may be more suited to your but it may be more suited to your but it may be more suited to your conversation with your spouse and the conversation with your spouse and the conversation with your spouse and the time that you spend in France rather time that you spend in France rather time that you spend in France rather than modern slang French.

  12. than modern slang French. than modern slang French. >> Absolutely. Absolutely. [clears throat] >> Absolutely. Absolutely. [clears throat] >> Absolutely. Absolutely. [clears throat] So that analogy works languages. So that analogy works languages. So that analogy works languages. >> Exactly. Yeah. When my wife goes back to >> Exactly. Yeah. When my wife goes back to >> Exactly. Yeah. When my wife goes back to Zimbabwe, they'll tell her she speaks Zimbabwe, they'll tell her she speaks Zimbabwe, they'll tell her she speaks like an old auntie and they don't know like an old auntie and they don't know like an old auntie and they don't know like she doesn't know the street Zulu, like she doesn't know the street Zulu, like she doesn't know the street Zulu, the street end that that they speak. the street end that that they speak. the street end that that they speak. >> Do you have trouble holding all the >> Do you have trouble holding all the >> Do you have trouble holding all the C++es in your brain? because C++ seems C++es in your brain? because C++ seems C++es in your brain? because C++ seems to reinvent itself every 3 years. to reinvent itself every 3 years. to reinvent itself every 3 years. >> It it does sometimes. Yes, it is >> It it does sometimes. Yes, it is >> It it does sometimes. Yes, it is difficult. So, you know, to give you a a difficult. So, you know, to give you a a difficult. So, you know, to give you a a concrete example, the the product I work concrete example, the the product I work concrete example, the the product I work on on daily basis, the MSVC tool set, on on daily basis, the MSVC tool set, on on daily basis, the MSVC tool set, >> there are some comments there that date >> there are some comments there that date >> there are some comments there that date from the 80s. from the 80s. from the 80s. >> Oh, seriously? >> Oh, seriously? >> Oh, seriously? [laughter] Well, you'll just be looking [laughter] Well, you'll just be looking [laughter] Well, you'll just be looking around and you'll bump into our comments around and you'll bump into our comments around and you'll bump into our comments from the from the from the >> and and the team is also using the >> and and the team is also using the >> and and the team is also using the latest, you know, features of of C++. latest, you know, features of of C++. latest, you know, features of of C++. So, this temporal, you know, language So, this temporal, you know, language So, this temporal, you know, language we're talking about, my team's already we're talking about, my team's already we're talking about, my team's already practicing that. So, when we go in and practicing that. So, when we go in and practicing that. So, when we go in and we find bugs, we need to fix bugs. Then we find bugs, we need to fix bugs. Then we find bugs, we need to fix bugs. Then they have to go, oh, why did they write they have to go, oh, why did they write they have to go, oh, why did they write this way? Oh, this is the way we used to this way? Oh, this is the way we used to this way? Oh, this is the way we used to express things, right? So, I have to do express things, right? So, I have to do express things, right? So, I have to do some kind of reverse engineering. then some kind of reverse engineering. then some kind of reverse engineering. then have to walk that idea that was have to walk that idea that was have to walk that idea that was expressed in certain ways through time expressed in certain ways through time expressed in certain ways through time to what it is today. Capture that wisdom to what it is today. Capture that wisdom to what it is today. Capture that wisdom and then kind of write a you know a doc and then kind of write a you know a doc and then kind of write a you know a doc and you know try to and you know try to and you know try to have the team absorb that thing through have the team absorb that thing through have the team absorb that thing through code review or just like uh postmodern

  13. code review or just like uh postmodern code review or just like uh postmodern you know summary hey this is what you know summary hey this is what you know summary hey this is what happened here this is how we we we did happened here this is how we we we did happened here this is how we we we did it and and so forth. I think we need to it and and so forth. I think we need to it and and so forth. I think we need to do a lot more of that to the public. Not do a lot more of that to the public. Not do a lot more of that to the public. Not just like keeping the in the team, but just like keeping the in the team, but just like keeping the in the team, but as actually disperse that wisdom to the as actually disperse that wisdom to the as actually disperse that wisdom to the rest of the community to help everybody rest of the community to help everybody rest of the community to help everybody else like move forward with these else like move forward with these else like move forward with these knowledge that we accumulate over time. knowledge that we accumulate over time. knowledge that we accumulate over time. >> Yeah. Yeah. >> Yeah. Yeah. >> Yeah. Yeah. >> Hey friends, it's Scott. I love thanking >> Hey friends, it's Scott. I love thanking >> Hey friends, it's Scott. I love thanking our sponsors because they make cancel our sponsors because they make cancel our sponsors because they make cancel minutes possible. I want to introduce minutes possible. I want to introduce minutes possible. I want to introduce you to TL Draw. This is freaking cool, you to TL Draw. This is freaking cool, you to TL Draw. This is freaking cool, right? Have you ever wanted to build an right? Have you ever wanted to build an right? Have you ever wanted to build an app that kind of works like Miro or app that kind of works like Miro or app that kind of works like Miro or Figma? It's got a zoomable infinite Figma? It's got a zoomable infinite Figma? It's got a zoomable infinite canvas. It's multiplayer. It's really canvas. It's multiplayer. It's really canvas. It's multiplayer. It's really good. And you want to build it in React good. And you want to build it in React good. And you want to build it in React with normal React components on the with normal React components on the with normal React components on the canvas. TL Draw. It's the world's first canvas. TL Draw. It's the world's first canvas. TL Draw. It's the world's first best and only SDK for building infinite best and only SDK for building infinite best and only SDK for building infinite canvas apps in React. Takes care of all canvas apps in React. Takes care of all canvas apps in React. Takes care of all the canvas complexities. The camera, the the canvas complexities. The camera, the the canvas complexities. The camera, the selection, the undo, the redo, so that selection, the undo, the redo, so that selection, the undo, the redo, so that you can focus on building the features you can focus on building the features you can focus on building the features that matter to your users. Okay, it's that matter to your users. Okay, it's that matter to your users. Okay, it's really fantastic. It's easy to do.

  14. really fantastic. It's easy to do. really fantastic. It's easy to do. There's plenties of examples and starter There's plenties of examples and starter There's plenties of examples and starter kits. Uh there's a whole kit. You can kits. Uh there's a whole kit. You can kits. Uh there's a whole kit. You can even use AI to create things on the even use AI to create things on the even use AI to create things on the canvas. Check it out. tlddraw.dev/hancel canvas. Check it out. tlddraw.dev/hancel canvas. Check it out. tlddraw.dev/hancel minutes. And you can just run npmcreate minutes. And you can just run npmcreate minutes. And you can just run npmcreate tlddraw. Spin up a starter kit. Try it tlddraw. Spin up a starter kit. Try it tlddraw. Spin up a starter kit. Try it out. It's got a multiplayer backend that out. It's got a multiplayer backend that out. It's got a multiplayer backend that works great. You can also self-host works great. You can also self-host works great. You can also self-host that. I love this stuff. It's just it's that. I love this stuff. It's just it's that. I love this stuff. It's just it's normal website things. I'm a old school normal website things. I'm a old school normal website things. I'm a old school website person. This is just a React website person. This is just a React website person. This is just a React component. It can do anything on the component. It can do anything on the component. It can do anything on the canvas that you want to do. HTML, CSS, canvas that you want to do. HTML, CSS, canvas that you want to do. HTML, CSS, SVG, normal web stuff. It's really great SVG, normal web stuff. It's really great SVG, normal web stuff. It's really great for interactive components, rich for interactive components, rich for interactive components, rich content, text editors. content, text editors. content, text editors. tlddraw.dev/hancelman. It's check them out. And you were a It's check them out. And you were a professor at Texas&M for a number of professor at Texas&M for a number of professor at Texas&M for a number of years. years. years. >> Yes. >> Yes. >> Yes. >> Um, were you teaching C++ at that time? >> Um, were you teaching C++ at that time? >> Um, were you teaching C++ at that time? >> So when I was at&m, I was uh working in >> So when I was at&m, I was uh working in >> So when I was at&m, I was uh working in the sim grass behind trust. So if the sim grass behind trust. So if the sim grass behind trust. So if anybody had to cheat C++ that was BI. anybody had to cheat C++ that was BI. anybody had to cheat C++ that was BI. >> Oh okay. >> Oh okay. >> Oh okay. >> So >> So >> So >> you were Bren Strup's colleague.

  15. >> you were Bren Strup's colleague. >> you were Bren Strup's colleague. >> Oh yes. Yes we B and I have been uh Btop >> Oh yes. Yes we B and I have been uh Btop >> Oh yes. Yes we B and I have been uh Btop and I have been collaborating and I have been collaborating and I have been collaborating closely since 2002. closely since 2002. closely since 2002. >> Oh wow. and we you know authored a few >> Oh wow. and we you know authored a few >> Oh wow. and we you know authored a few papers together and many C++ key papers together and many C++ key papers together and many C++ key features like concept con expert and features like concept con expert and features like concept con expert and some other stuff like data structures some other stuff like data structures some other stuff like data structures like in IPR it's internal representation like in IPR it's internal representation like in IPR it's internal representation that is a project that I you know I that is a project that I you know I that is a project that I you know I started with with so uh back at&m I was started with with so uh back at&m I was started with with so uh back at&m I was teaching Java and Haskell teaching Java and Haskell teaching Java and Haskell [laughter] [laughter] [laughter] yes yes yes those were so for undergrad I was those were so for undergrad I was those were so for undergrad I was teaching teaching teaching Java and Haskell and the for the Java and Haskell and the for the Java and Haskell and the for the graduates I was teaching uh code analys graduates I was teaching uh code analys graduates I was teaching uh code analys static analysis uh language design and static analysis uh language design and static analysis uh language design and compiler construction. compiler construction. compiler construction. >> Mhm. >> Mhm. >> Mhm. >> And and C++ was banning. [laughter] >> And and C++ was banning. [laughter] >> And and C++ was banning. [laughter] >> Yeah. >> Yeah. >> Yeah. >> Okay. When when have you have you ever >> Okay. When when have you have you ever >> Okay. When when have you have you ever taught C++ other I know you speak at taught C++ other I know you speak at taught C++ other I know you speak at conferences? conferences? conferences? >> I yeah I teach C++. So you know to give >> I yeah I teach C++. So you know to give >> I yeah I teach C++. So you know to give you a concrete example and quite a few you a concrete example and quite a few you a concrete example and quite a few times times times >> uh industries in France would actually >> uh industries in France would actually >> uh industries in France would actually ask me over summer to come over and and ask me over summer to come over and and ask me over summer to come over and and teach people who are already practicing teach people who are already practicing teach people who are already practicing like they're professional they they they like they're professional they they they like they're professional they they they want to update their knowledge to want to update their knowledge to want to update their knowledge to respect you know advancement and yeah I respect you know advancement and yeah I respect you know advancement and yeah I would go and and and teach that no would go and and and teach that no would go and and and teach that no >> so when you teach it remembering that >> so when you teach it remembering that >> so when you teach it remembering that that some of the people who are that some of the people who are that some of the people who are listening to the show and myself are listening to the show and myself are listening to the show and myself are still C++ classes as people do you teach

  16. still C++ classes as people do you teach still C++ classes as people do you teach kind of the generations like there's the kind of the generations like there's the kind of the generations like there's the C subset there's the object orientation C subset there's the object orientation C subset there's the object orientation layer there's the template layer there's layer there's the template layer there's layer there's the template layer there's the functional layer and then there's the functional layer and then there's the functional layer and then there's the compile time meta layer or do you the compile time meta layer or do you the compile time meta layer or do you just drop them into modern C++ just drop them into modern C++ just drop them into modern C++ >> I I tend to structure my teaching around >> I I tend to structure my teaching around >> I I tend to structure my teaching around problems that I consider you know problems that I consider you know problems that I consider you know temporary contemporary right yes there temporary contemporary right yes there temporary contemporary right yes there is the historical view of the language is the historical view of the language is the historical view of the language like you know behind the cir classes and like you know behind the cir classes and like you know behind the cir classes and that is interesting If you're you know that is interesting If you're you know that is interesting If you're you know doing archaeology or doing archaeology or doing archaeology or >> history [clears throat] >> history [clears throat] >> history [clears throat] of C++ which are really interesting of C++ which are really interesting of C++ which are really interesting topics in themselves right but if your topics in themselves right but if your topics in themselves right but if your job is to get something done and job is to get something done and job is to get something done and engineer not just program I I make a engineer not just program I I make a engineer not just program I I make a distinction between programming and distinction between programming and distinction between programming and engineering right so when you're doing engineering right so when you're doing engineering right so when you're doing engineering you're not trying to be to engineering you're not trying to be to engineering you're not trying to be to have the cutest uh you know solutions have the cutest uh you know solutions have the cutest uh you know solutions possible you you're trying to have possible you you're trying to have possible you you're trying to have something that is solid that can sustain something that is solid that can sustain something that is solid that can sustain the 10 the the test of time over say the 10 the the test of time over say the 10 the the test of time over say five 10 years because you don't have the five 10 years because you don't have the five 10 years because you don't have the luxury of going every six months and luxury of going every six months and luxury of going every six months and update to the new thing you you want the update to the new thing you you want the update to the new thing you you want the program to be dull like if if it is too program to be dull like if if it is too program to be dull like if if it is too exciting no you've lost everybody exciting no you've lost everybody exciting no you've lost everybody [laughter] [laughter] [laughter] you want to keep it dull and and robust you want to keep it dull and and robust you want to keep it dull and and robust so that is engineering that's what you so that is engineering that's what you so that is engineering that's what you want to do so I I'll take just a couple want to do so I I'll take just a couple want to do so I I'll take just a couple of problems from the domain and it's of problems from the domain and it's of problems from the domain and it's Well, here is what we have. How do we Well, here is what we have. How do we Well, here is what we have. How do we express constraint? Right? So, usually

  17. express constraint? Right? So, usually express constraint? Right? So, usually engineering is you have bunch of engineering is you have bunch of engineering is you have bunch of constraints. They they tend to be constraints. They they tend to be constraints. They they tend to be intention and then you try to find a intention and then you try to find a intention and then you try to find a path that gives you something that is path that gives you something that is path that gives you something that is robust and that you can teach to the robust and that you can teach to the robust and that you can teach to the next generation because if you're next generation because if you're next generation because if you're successful, you're probably going to get successful, you're probably going to get successful, you're probably going to get promoted or you're going to get help promoted or you're going to get help promoted or you're going to get help from someone. And if you require the from someone. And if you require the from someone. And if you require the person to that's going to help you to be person to that's going to help you to be person to that's going to help you to be at least as smart and as cute as you at least as smart and as cute as you at least as smart and as cute as you are, maybe they're smart or cuter and are, maybe they're smart or cuter and are, maybe they're smart or cuter and it'll get thrown over you, it'll get thrown over you, it'll get thrown over you, right? So you want to make it accessible right? So you want to make it accessible right? So you want to make it accessible to the mass to the mass to the mass >> and that is what I I consider the the >> and that is what I I consider the the >> and that is what I I consider the the good part of programming you know good part of programming you know good part of programming you know engineering program and then expressing engineering program and then expressing engineering program and then expressing those ideas in C++. So those ideas in C++. So those ideas in C++. So >> uh these days I'll say yeah let's start >> uh these days I'll say yeah let's start >> uh these days I'll say yeah let's start with con expert by default because we with con expert by default because we with con expert by default because we know that if you declare a global know that if you declare a global know that if you declare a global variable you shouldn't have many of variable you shouldn't have many of variable you shouldn't have many of those but if you did and then you have those but if you did and then you have those but if you did and then you have to rely on runtime initialization you to rely on runtime initialization you to rely on runtime initialization you know if guns are there so what we want know if guns are there so what we want know if guns are there so what we want to say is well if it is constant I want to say is well if it is constant I want to say is well if it is constant I want to use conexture to ensure that if I to use conexture to ensure that if I to use conexture to ensure that if I ever accidentally make a dynamic ever accidentally make a dynamic ever accidentally make a dynamic initialization the compiler will tell me initialization the compiler will tell me initialization the compiler will tell me so I'm getting assistance from from the so I'm getting assistance from from the so I'm getting assistance from from the compiler compiler compiler Back in the 80s we all doing template Back in the 80s we all doing template Back in the 80s we all doing template method programming let me show you how method programming let me show you how method programming let me show you how cute I am and so forth but that doesn't cute I am and so forth but that doesn't cute I am and so forth but that doesn't scale if you have a conext function you scale if you have a conext function you scale if you have a conext function you all you want to do is raise the runtime all you want to do is raise the runtime all you want to do is raise the runtime computation to compile time so you want

  18. computation to compile time so you want computation to compile time so you want to express with the same notation to to express with the same notation to to express with the same notation to make it easy for people to to to access make it easy for people to to to access make it easy for people to to to access and so those I teach along those lines and so those I teach along those lines and so those I teach along those lines >> let me ask this question and hopefully >> let me ask this question and hopefully >> let me ask this question and hopefully it's not inappropriate because I like it's not inappropriate because I like it's not inappropriate because I like that you said that programming is not that you said that programming is not that you said that programming is not software engineering. I literally was in software engineering. I literally was in software engineering. I literally was in a Mark Renovich paper recently and that a Mark Renovich paper recently and that a Mark Renovich paper recently and that line sits exactly there like programming line sits exactly there like programming line sits exactly there like programming is a thing. Software engineering is a is a thing. Software engineering is a is a thing. Software engineering is a different thing different thing different thing >> and in fact when I went to school I had >> and in fact when I went to school I had >> and in fact when I went to school I had to choose between computer science and to choose between computer science and to choose between computer science and software engineering has a degree software engineering has a degree software engineering has a degree >> and software engineering was the >> and software engineering was the >> and software engineering was the practice of the shipping which is practice of the shipping which is practice of the shipping which is different than computer science. But is different than computer science. But is different than computer science. But is it fair to say that the tooling and the it fair to say that the tooling and the it fair to say that the tooling and the build ecosystem and the lack of an build ecosystem and the lack of an build ecosystem and the lack of an official package manager official package manager official package manager is famously difficult? There's different is famously difficult? There's different is famously difficult? There's different AIs. There's different multiple AIs. There's different multiple AIs. There's different multiple compilers. There's different header compilers. There's different header compilers. There's different header inclusion models. inclusion models. inclusion models. If you want things to be dull, wouldn't If you want things to be dull, wouldn't If you want things to be dull, wouldn't C++ bless a package manager and try to C++ bless a package manager and try to C++ bless a package manager and try to solve some of those issues to make solve some of those issues to make solve some of those issues to make things more dull?

  19. things more dull? things more dull? >> Yeah. So you're absolutely correct that >> Yeah. So you're absolutely correct that >> Yeah. So you're absolutely correct that um um um an area that has been neglected by the an area that has been neglected by the an area that has been neglected by the um C++ community and committee is um C++ community and committee is um C++ community and committee is tooling aspect like package management tooling aspect like package management tooling aspect like package management and build systems and editors and and and build systems and editors and and and build systems and editors and and all those kind of stuff right and that all those kind of stuff right and that all those kind of stuff right and that has done two things in one rear it has has done two things in one rear it has has done two things in one rear it has allowed about allowed about allowed about you know the flourishing of different you know the flourishing of different you know the flourishing of different ideas like today we have VS code Visual ideas like today we have VS code Visual ideas like today we have VS code Visual Studio we have C lion and so people goes Studio we have C lion and so people goes Studio we have C lion and so people goes in different directions try to explore in different directions try to explore in different directions try to explore ideas and and that way we we don't ideas and and that way we we don't ideas and and that way we we don't suffer from you know you know suffer from you know you know suffer from you know you know monoculture one way of thinking on the monoculture one way of thinking on the monoculture one way of thinking on the other hand it has fractured the other hand it has fractured the other hand it has fractured the community make it much uh easier community make it much uh easier community make it much uh easier it It it it has fractured community it It it it has fractured community it It it it has fractured community making it much more difficult to advance making it much more difficult to advance making it much more difficult to advance things like programming should be dull.

  20. things like programming should be dull. things like programming should be dull. Like if today if I want to Like if today if I want to Like if today if I want to start with a um start with a um start with a um if a a a beginner and and shoot some if a a a beginner and and shoot some if a a a beginner and and shoot some graphics it's much more difficult than graphics it's much more difficult than graphics it's much more difficult than you need to be with Java just you know you need to be with Java just you know you need to be with Java just you know have package downloads done. In C++ it's have package downloads done. In C++ it's have package downloads done. In C++ it's a little bit more difficult. So I agree. a little bit more difficult. So I agree. a little bit more difficult. So I agree. So it feels like you're saying that the So it feels like you're saying that the So it feels like you're saying that the language evolved but the ecosystem which language evolved but the ecosystem which language evolved but the ecosystem which is not the language may be a little is not the language may be a little is not the language may be a little rough around the edges and in a managed rough around the edges and in a managed rough around the edges and in a managed ecosystem managed by maybe a bigger ecosystem managed by maybe a bigger ecosystem managed by maybe a bigger community or a company Python node community or a company Python node community or a company Python node rust.net a new developer might have a rust.net a new developer might have a rust.net a new developer might have a little bit less you know rough around little bit less you know rough around little bit less you know rough around the edges but C++ is very popular maybe the edges but C++ is very popular maybe the edges but C++ is very popular maybe the ecosystem could use a little love the ecosystem could use a little love the ecosystem could use a little love and you could come up with a build and you could come up with a build and you could come up with a build manager. manager. manager. >> I agree you're right on point. So when I >> I agree you're right on point. So when I >> I agree you're right on point. So when I uh designed a module system for C++ and uh designed a module system for C++ and uh designed a module system for C++ and and 20. So this problem we had before and 20. So this problem we had before and 20. So this problem we had before everybody was dealing with them but now everybody was dealing with them but now everybody was dealing with them but now with modules it became in your face and with modules it became in your face and with modules it became in your face and one of the thing that I asked Herb Ser one of the thing that I asked Herb Ser one of the thing that I asked Herb Ser when he was running the C++ committee when he was running the C++ committee when he was running the C++ committee was to create a study group dedicated to was to create a study group dedicated to was to create a study group dedicated to tooling. So we have you know somehow the tooling. So we have you know somehow the tooling. So we have you know somehow the committee has not acknowledged hey build committee has not acknowledged hey build committee has not acknowledged hey build systems exist. [laughter] systems exist. [laughter] systems exist. [laughter] So we have been doing a lot of work to So we have been doing a lot of work to So we have been doing a lot of work to kind of harmonize the various ways of kind of harmonize the various ways of kind of harmonize the various ways of invoking the compiler, setting up build invoking the compiler, setting up build invoking the compiler, setting up build systems and building modules and and so systems and building modules and and so systems and building modules and and so forth. So I'm actually very happy with forth. So I'm actually very happy with forth. So I'm actually very happy with that outcome that with a new major

  21. that outcome that with a new major that outcome that with a new major feature in the language we now have to feature in the language we now have to feature in the language we now have to tackle heads on these decades old tackle heads on these decades old tackle heads on these decades old problem that we had uh neglected. problem that we had uh neglected. problem that we had uh neglected. >> Yeah. And now another series of things >> Yeah. And now another series of things >> Yeah. And now another series of things that have been neglected or at least the that have been neglected or at least the that have been neglected or at least the community thinks have been neglected is community thinks have been neglected is community thinks have been neglected is like safety profiles. The all the like safety profiles. The all the like safety profiles. The all the classes of bugs that have that would classes of bugs that have that would classes of bugs that have that would have the news have the hacker news have the news have the hacker news have the news have the hacker news >> believe that everyone is rushing to rust >> believe that everyone is rushing to rust >> believe that everyone is rushing to rust because it's just safer. It's just because it's just safer. It's just because it's just safer. It's just better. C++ 26 which is in flight right better. C++ 26 which is in flight right better. C++ 26 which is in flight right now promises to basically solve an now promises to basically solve an now promises to basically solve an entire class of bugs around bounds and entire class of bugs around bounds and entire class of bugs around bounds and type and lifetime and arithmetic. type and lifetime and arithmetic. type and lifetime and arithmetic. >> Yes. So that that was an area where uh >> Yes. So that that was an area where uh >> Yes. So that that was an area where uh bianis and and I you know collaborated bianis and and I you know collaborated bianis and and I you know collaborated again and with some uh help from from again and with some uh help from from again and with some uh help from from herb s. So the the basic idea is that it herb s. So the the basic idea is that it herb s. So the the basic idea is that it is possible to write memory safe is possible to write memory safe is possible to write memory safe programs in C++. So it is possible but programs in C++. So it is possible but programs in C++. So it is possible but what is actually issue is not the what is actually issue is not the what is actually issue is not the possibility. It is not proof of possibility. It is not proof of possibility. It is not proof of existence. It is the scale. How easy is existence. It is the scale. How easy is existence. It is the scale. How easy is it by default to write memory safe it by default to write memory safe it by default to write memory safe programs? I think that is a real problem programs? I think that is a real problem programs? I think that is a real problem that we need to tackle and that is what that we need to tackle and that is what that we need to tackle and that is what B and I have been tackling. Again, the B and I have been tackling. Again, the B and I have been tackling. Again, the idea is evolution. You can do revolution idea is evolution. You can do revolution idea is evolution. You can do revolution by just throwing everything out or you by just throwing everything out or you by just throwing everything out or you can have the thing that is working and can have the thing that is working and can have the thing that is working and upgrade in place and C++ profiles are upgrade in place and C++ profiles are upgrade in place and C++ profiles are one way of getting there and I actually

  22. one way of getting there and I actually one way of getting there and I actually believe is a very good way of doing it. believe is a very good way of doing it. believe is a very good way of doing it. Unfortunately uh we were not able B and Unfortunately uh we were not able B and Unfortunately uh we were not able B and I were not able to convince the C++ I were not able to convince the C++ I were not able to convince the C++ committee to get profiles into C++ 26. committee to get profiles into C++ 26. committee to get profiles into C++ 26. >> Oh >> Oh >> Oh >> we are we pursuing that aspect parallel >> we are we pursuing that aspect parallel >> we are we pursuing that aspect parallel to C++ 26. Right now there are some to C++ 26. Right now there are some to C++ 26. Right now there are some other features that have been considered other features that have been considered other features that have been considered like contract that if done properly like contract that if done properly like contract that if done properly would allow you to express the would allow you to express the would allow you to express the requirements and guarantees of a requirements and guarantees of a requirements and guarantees of a function. What does a function requires function. What does a function requires function. What does a function requires of its argument once execution is done of its argument once execution is done of its argument once execution is done successfully? What does it guarantee? If successfully? What does it guarantee? If successfully? What does it guarantee? If you can express those thing very simply you can express those thing very simply you can express those thing very simply then you can take advantage of code then you can take advantage of code then you can take advantage of code analysis like whether it is static or analysis like whether it is static or analysis like whether it is static or runtime instrumentation to actually runtime instrumentation to actually runtime instrumentation to actually provide more guarantee or mitigation provide more guarantee or mitigation provide more guarantee or mitigation measures right unfortunately there are measures right unfortunately there are measures right unfortunately there are still you know aspect of that feature still you know aspect of that feature still you know aspect of that feature that are not really there and we are that are not really there and we are that are not really there and we are trying to fix them or at least move them trying to fix them or at least move them trying to fix them or at least move them into a parallel track that will be into a parallel track that will be into a parallel track that will be released at the same time as C++ 26. So released at the same time as C++ 26. So released at the same time as C++ 26. So essentially you can think of it like you essentially you can think of it like you essentially you can think of it like you have core C++ 26 and then you have these have core C++ 26 and then you have these have core C++ 26 and then you have these other things that come with it on the other things that come with it on the other things that come with it on the side that you can use in practice to side that you can use in practice to side that you can use in practice to have a better experience with C++.

  23. have a better experience with C++. have a better experience with C++. >> Mhm. If if someone were to get started >> Mhm. If if someone were to get started >> Mhm. If if someone were to get started now in C++ they still go to the books now in C++ they still go to the books now in C++ they still go to the books and they find a lot of old books with a and they find a lot of old books with a and they find a lot of old books with a lot of old samples. lot of old samples. lot of old samples. >> Yes. I I I personally haven't found the >> Yes. I I I personally haven't found the >> Yes. I I I personally haven't found the great starter C++ book for the 2020s, great starter C++ book for the 2020s, great starter C++ book for the 2020s, but you can build that up by watching but you can build that up by watching but you can build that up by watching YouTubetubes. You've been presenting at YouTubetubes. You've been presenting at YouTubetubes. You've been presenting at CPPCON for years. Like there's a ton of CPPCON for years. Like there's a ton of CPPCON for years. Like there's a ton of readings and reference, but it doesn't readings and reference, but it doesn't readings and reference, but it doesn't feel like unless I'm missing a book that feel like unless I'm missing a book that feel like unless I'm missing a book that there's a welcome to modern 2020 plus there's a welcome to modern 2020 plus there's a welcome to modern 2020 plus C++. So actually bianisrop C++. So actually bianisrop C++. So actually bianisrop um wrote an updated uh a book called a a um wrote an updated uh a book called a a um wrote an updated uh a book called a a tour of C++ I think in the second tour of C++ I think in the second tour of C++ I think in the second edition which talks about uh C++ 2023. edition which talks about uh C++ 2023. edition which talks about uh C++ 2023. As a matter of fact, the old hello world As a matter of fact, the old hello world As a matter of fact, the old hello world program now start with import module program now start with import module program now start with import module stood and in main, you know, C out and stood and in main, you know, C out and stood and in main, you know, C out and print, right? So, it it's really trying print, right? So, it it's really trying print, right? So, it it's really trying to cheat you right out of the gate the to cheat you right out of the gate the to cheat you right out of the gate the modern C++ contemporary C++ and modern C++ contemporary C++ and modern C++ contemporary C++ and >> contemporary that's the word.

  24. >> contemporary that's the word. >> contemporary that's the word. Contemporary, idiomatic modern C++. Contemporary, idiomatic modern C++. Contemporary, idiomatic modern C++. Yeah. Yeah. Yeah. >> Because that's what powers AAA games, >> Because that's what powers AAA games, >> Because that's what powers AAA games, right? That's what powers big stuff. right? That's what powers big stuff. right? That's what powers big stuff. Yeah, I will, you know, I'll send you Yeah, I will, you know, I'll send you Yeah, I will, you know, I'll send you the link to that to that book. You know, the link to that to that book. You know, the link to that to that book. You know, I I don't own any stock in in the sale, I I don't own any stock in in the sale, I I don't own any stock in in the sale, but I think like you mentioned it will but I think like you mentioned it will but I think like you mentioned it will be it is a very good resource for people be it is a very good resource for people be it is a very good resource for people starting to program in C++. It is not starting to program in C++. It is not starting to program in C++. It is not for complete beginners in programming. for complete beginners in programming. for complete beginners in programming. But if you have some knowledge in But if you have some knowledge in But if you have some knowledge in programming, it is a good book for programming, it is a good book for programming, it is a good book for someone starting with programming in someone starting with programming in someone starting with programming in C++. And if you already know C++, it's a C++. And if you already know C++, it's a C++. And if you already know C++, it's a good refresher that tells you, well, good refresher that tells you, well, good refresher that tells you, well, this is how we write things these days. this is how we write things these days. this is how we write things these days. >> Yeah, it feels like because we've only >> Yeah, it feels like because we've only >> Yeah, it feels like because we've only just kind of met and spent time together just kind of met and spent time together just kind of met and spent time together that you attack things with a very that you attack things with a very that you attack things with a very formal formal formal mathematical mathematical mathematical perspective. Your your your your perspective. Your your your your perspective. Your your your your background certainly your PhD is in background certainly your PhD is in background certainly your PhD is in mathematics. All right. How much does mathematics. All right. How much does mathematics. All right. How much does math and the formality of a proof math and the formality of a proof math and the formality of a proof >> leak into your work pushing the >> leak into your work pushing the >> leak into your work pushing the ecosystem forward in your research?

  25. ecosystem forward in your research? ecosystem forward in your research? >> It's everywhere. >> It's everywhere. >> It's everywhere. So for example, when I did uh conex for So for example, when I did uh conex for So for example, when I did uh conex for C++ 11, there was a lot of skepticism C++ 11, there was a lot of skepticism C++ 11, there was a lot of skepticism like some people was like oh it can't be like some people was like oh it can't be like some people was like oh it can't be done. Then I showed implementation. It done. Then I showed implementation. It done. Then I showed implementation. It was like oh the implementation is unound was like oh the implementation is unound was like oh the implementation is unound and I have to show a proof mathematical and I have to show a proof mathematical and I have to show a proof mathematical proof that well it's actually sound. And proof that well it's actually sound. And proof that well it's actually sound. And that that is what it's very hard. It is that that is what it's very hard. It is that that is what it's very hard. It is easy to argue with colors like I don't easy to argue with colors like I don't easy to argue with colors like I don't like red green but it's [snorts] harder like red green but it's [snorts] harder like red green but it's [snorts] harder to argue with mathematical facts and to argue with mathematical facts and to argue with mathematical facts and logic. So I let math you know permit logic. So I let math you know permit logic. So I let math you know permit everything I do. It's also a way to keep everything I do. It's also a way to keep everything I do. It's also a way to keep us honest. When I'm doing now when I was us honest. When I'm doing now when I was us honest. When I'm doing now when I was doing modules for example we needed to doing modules for example we needed to doing modules for example we needed to formalize the language semantics as formalize the language semantics as formalize the language semantics as everybody knows and I'll say that B will everybody knows and I'll say that B will everybody knows and I'll say that B will say that C++ is a very complex language. say that C++ is a very complex language. say that C++ is a very complex language. So how do you take off that? Keep it So how do you take off that? Keep it So how do you take off that? Keep it like structure small. If you don't have like structure small. If you don't have like structure small. If you don't have the math there to keep you honest, you the math there to keep you honest, you the math there to keep you honest, you don't have solid ground to move on. So don't have solid ground to move on. So don't have solid ground to move on. So it is there. I don't have it. And also I it is there. I don't have it. And also I it is there. I don't have it. And also I don't try to have people get a degree in don't try to have people get a degree in don't try to have people get a degree in advanced degree in abstract algebra advanced degree in abstract algebra advanced degree in abstract algebra before I can talk to them. That is not a before I can talk to them. That is not a before I can talk to them. That is not a point. It's it's it's there as a tool.

  26. point. It's it's it's there as a tool. point. It's it's it's there as a tool. Just like a language itself is a tool to Just like a language itself is a tool to Just like a language itself is a tool to write programs. The math is a tool to write programs. The math is a tool to write programs. The math is a tool to keep me honest in in engineering. keep me honest in in engineering. keep me honest in in engineering. [snorts] [snorts] [snorts] >> And and you said that you were teaching >> And and you said that you were teaching >> And and you said that you were teaching in other languages. in other languages. in other languages. How this is your language though. This How this is your language though. This How this is your language though. This is the one I assume you dream in, right? is the one I assume you dream in, right? is the one I assume you dream in, right? You don't you don't have you ever like You don't you don't have you ever like You don't you don't have you ever like thought about cheating on this language thought about cheating on this language thought about cheating on this language and trying another language out or do and trying another language out or do and trying another language out or do you always keep coming back to you always keep coming back to you always keep coming back to >> this language? Well, I I got my >> this language? Well, I I got my >> this language? Well, I I got my education in the French system and so my education in the French system and so my education in the French system and so my first language was actually Pascal. you first language was actually Pascal. you first language was actually Pascal. you know we both know Andrew Stober so you know we both know Andrew Stober so you know we both know Andrew Stober so you know I I learned his stuff know I I learned his stuff know I I learned his stuff >> and you did Turbo Pascal as well so >> and you did Turbo Pascal as well so >> and you did Turbo Pascal as well so 100%. 100%. 100%. >> Yeah. So there is no way you can at the >> Yeah. So there is no way you can at the >> Yeah. So there is no way you can at the time you could graduate from the French time you could graduate from the French time you could graduate from the French system without knowing camel and later system without knowing camel and later system without knowing camel and later it became Okamel and the inventor of it became Okamel and the inventor of it became Okamel and the inventor of Okamel Zavila. I actually collaborated Okamel Zavila. I actually collaborated Okamel Zavila. I actually collaborated with him for a long period of time and with him for a long period of time and with him for a long period of time and one of the thing we did for example is one of the thing we did for example is one of the thing we did for example is to have a a a mechanized mathematical to have a a a mechanized mathematical to have a a a mechanized mathematical proof that uh this thing that B invented proof that uh this thing that B invented proof that uh this thing that B invented resource acquisition is initialization.

  27. resource acquisition is initialization. resource acquisition is initialization. So essentially this protocol where you So essentially this protocol where you So essentially this protocol where you acquire resource in constructor and then acquire resource in constructor and then acquire resource in constructor and then you release them destructor to ensure you release them destructor to ensure you release them destructor to ensure that you don't have leak of that. So that you don't have leak of that. So that you don't have leak of that. So Zavier and one of his students Tahina Zavier and one of his students Tahina Zavier and one of his students Tahina who is now actually at Microsoft we who is now actually at Microsoft we who is now actually at Microsoft we worked to provide a mathematical proof worked to provide a mathematical proof worked to provide a mathematical proof that this is a sound protocol. that this is a sound protocol. that this is a sound protocol. So I I speak C++ as a native language So I I speak C++ as a native language So I I speak C++ as a native language but you know uh Haskell, Java, but you know uh Haskell, Java, but you know uh Haskell, Java, which is the proof assistant uh language which is the proof assistant uh language which is the proof assistant uh language those are languages that I'm also fluent those are languages that I'm also fluent those are languages that I'm also fluent in. in. in. >> Fantastic. So you recommend though that >> Fantastic. So you recommend though that >> Fantastic. So you recommend though that we people don't sleep on C++. It's a we people don't sleep on C++. It's a we people don't sleep on C++. It's a good time to learn these these good time to learn these these good time to learn these these languages. We're not old. languages. We're not old. languages. We're not old. >> Yeah. If you want to be a professional >> Yeah. If you want to be a professional >> Yeah. If you want to be a professional software engineer, just learning one software engineer, just learning one software engineer, just learning one language is not good. You you need to language is not good. You you need to language is not good. You you need to know at least two or three different know at least two or three different know at least two or three different languages. Not C and C++. Let's say C++ languages. Not C and C++. Let's say C++ languages. Not C and C++. Let's say C++ and Haskell. Why? Because they're and Haskell. Why? Because they're and Haskell. Why? Because they're completely different paradigm. But what completely different paradigm. But what completely different paradigm. But what they do is that they help you see ideas they do is that they help you see ideas they do is that they help you see ideas in different ways and in retrospect in different ways and in retrospect in different ways and in retrospect enriches the way you conceive of enriches the way you conceive of enriches the way you conceive of software.

  28. software. software. Very exciting. Well, thank you so much Very exciting. Well, thank you so much Very exciting. Well, thank you so much for spending time with me today. for spending time with me today. for spending time with me today. >> Thank you very much, Scott. It was a >> Thank you very much, Scott. It was a >> Thank you very much, Scott. It was a real pleasure. real pleasure. real pleasure. >> I'm glad. We've been chatting with Dr. >> I'm glad. We've been chatting with Dr. >> I'm glad. We've been chatting with Dr. Gabrielle Dos Ree, learning all about Gabrielle Dos Ree, learning all about Gabrielle Dos Ree, learning all about C++, modern C++ in 2025 and beyond. This C++, modern C++ in 2025 and beyond. This C++, modern C++ in 2025 and beyond. This has been another episode of Hansel has been another episode of Hansel has been another episode of Hansel Minutes, and we'll see you again next Minutes, and we'll see you again next Minutes, and we'll see you again next week.

Summary

This transcript discusses the inefficiencies of generic screen-sharing tools for developers compared to specialized solutions like Tupil. The conversation highlights how Tupil offers tailored features for programming collaboration, such as one-click annotations and shared control, making it a superior choice for remote pair programming. The practical takeaway is that developers should leverage tools specifically designed for their workflow to enhance productivity and reduce communication friction, with Tupil.app recommended as a prime example.

View original episode ↗