CppCast - Defer is better than Destructors

Episode Date: April 30, 2021

Rob and Jason are joined by JeanHeyd Meneide. They first discuss alternative operators in C++, upcoming virtual conferences and papers in the April ISO mailing. Then they talk to JeanHeyd about his wo...rk on the C and C++ committees, including embed, defer and more. News Just discovered C++ has keywords 'and'/'or'/'not' etc. Pure Virtual C++ April Mailing Links Defer Mechanism for C: The Movie p1967 Preprocessor embed - Binary Resource Inclusion p0052 Generic Scope Guard and RAII Wrapper for the Standard Library No Us Without You - elifdef and elifndef CoSy Tech Con Sponsors Incredibuild

Transcript
Discussion (0)
Starting point is 00:00:00 Episode 297 of CppCast with guest Jean-Huidh Manid recorded April 28th, 2021. Today's episode is sponsored by Incredibuild. If you're like me and don't like waiting for long C++ builds, tests, and analysis results, then you should check out my friends at Incredibuild. Because expert developers don't wait. In this episode, we discuss alternative operator keywords and more ISO papers. Then we talk to Jean-Huidh Manid. Jean-Huidh talks to us about his work on the C and C++ developers.
Starting point is 00:01:17 I'm your host, Rob Irving, joined by my co-host, Jason Turner. Jason, how are you doing today? I'm all right, Rob. How are you doing? Doing all right. I realize we haven't talked about conferences in a while, but C++ Now is coming up soon, right, Jason? It's like next week. Yes, it's next week.
Starting point is 00:01:33 I should know that. Because it turns out I'm speaking at it now. It turns out you're going to be speaking at it. What are you going to be talking about? The title of the talk is The Worst Best Practices, and it's kind of um well okay i'll go ahead and give a little sneak peek here so that the premise of the talk was going to be that i would talk about you know just the process of writing a book in the 2020s and what that looks
Starting point is 00:01:58 like self-publishing and whatever and then what kind of uh controversies or whatever that I might have brought up by publishing a book on best practices. Interestingly, it's kind of turned into a little bit of like a 15-year retrospective because I realized as I was starting to write the notes for the talk that my first notes writing down things that ended up in this book were 15 years ago. Oh, wow. It just makes me feel old. So in a way, the book is 15 years in the making. And are listeners still able to go get virtual tickets for C++ Now? Oh, yeah.
Starting point is 00:02:36 They definitely still want people to sign up. Okay. So that's cppnow.org, I believe. Yeah. Okay. Well, at the top of every episode, I'll let you read a piece of feedback. This week, we got an email from Rory saying,
Starting point is 00:02:52 love the podcast, one of my favorites. I saw this post recently, and I'll link to that in the show notes, regarding modernizing C++ support in the OpenJDK VM, which has some interesting notes on the specific features they feel would be beneficial to permit in the code base from recent C++ support in the OpenJDK VM, which has some interesting notes on the specific features they feel would be beneficial to permit in the code base from recent C++ standard iterations. I thought it may be interesting at some point
Starting point is 00:03:11 to hear from one of the devs on the project, which is one of the most widely used and deployed runtimes written in C++. That is interesting. I thought this could be a good topic for a show. We did do one show about Java a while ago, but Java from the perspective of this Java VM written in C++ and specifically the JDK, the Java Native Development Kit. I think that's what they're talking about, right? JDK, Java Development Kit, yes.
Starting point is 00:03:41 Yeah, yeah. And their support for C I think, could be an interesting topic. Yeah, well, okay, now I just made myself sound old again. But OpenJDK has its own whole history because there wasn't an officially licensed Sun version of the Java virtual machine for Linux back in the mid-90s when it first came out. So there became an effort at the same time. I'm pretty sure OpenJDK actually goes back that far, back to 97. That sounds right. I did not know that.
Starting point is 00:04:11 Okay. Well, we'd love to hear your thoughts about the show. You can always reach out to us on Facebook, Twitter, or email at feedback at cppcast.com. And don't forget to leave us a review on iTunes or subscribe on YouTube. Joining us today is Jahneed Manid. Jahneed is a student at Columbia University in New York.
Starting point is 00:04:26 Most of their programming is for fun and as a hobby, even if their largest open source contribution, Sol2, is used across many industries. They are currently working towards earning their own nickname, climbing the academic ladder, while spending as much time as possible contributing to C++ standardization and development. Their newest and biggest project
Starting point is 00:04:42 is Unicode for C++. They also very much love dogs and hope to have his own in a year or so. They also like TWRP's Feel Pretty Good from the album Together Through Time. Shanheed, welcome back. Hey again. I think this is the third time I'm here. I think so.
Starting point is 00:04:58 If you're including the time you guest hosted. Oh yeah. Wow, I've been on here a lot. Who's the record holder at the moment? I believe it's still Sy, I think. Has he been there like six times? Something like that. I could look it up real quick.
Starting point is 00:05:13 But I believe Sy Brand has been on the most. Yeah, six. Six episodes. They've got a good record. Yeah. All right. Well, Jean-Huid, we've got a couple news articles to discuss. Feel free to comment on any of these, and we'll start talking more about what you've been up to lately okay
Starting point is 00:05:29 all right awesome okay so this first one is a post that was on the cpp subreddit um just discovered c++ has keywords for end or not etc and that is like the word and spelled out, which you can use instead of the common and operator. And the code sample for this like really kind of hurts your eyes. I definitely didn't know this was something you could do. What do you think about this? So, um, so I know about it. And I am aware of the keywords. I've kind of decided not to use them at the moment. But I think that's mostly because MSVC beat them out of me because all their compilers just work normally with them. But with MSVC, if you don't have the permissive flag or whatever,
Starting point is 00:06:17 you have to include a header to get them. Right. So it's absolutely a pain in the half to use with MSVC. Again, most new products default, obviously, after MIS-Syvan and all other stuff. But other products don't. And so people kind of complained when I did use them, even just in Jest a couple of times.
Starting point is 00:06:36 So unfortunately, I wasn't able to really get used to them so much. I kind of, again, I trained myself out of them, which is a little bit sad. Because in some cases, they do make things nice, especially when you're working with templates and you're like composing the gigantic conditionals that go into like a template. I mean, you just have like a little, you know,
Starting point is 00:06:55 exclamation point in some places to negate stuff. And it's like, it's completely lost in the line noise. So just having not space is like a really good visual indicator, like, okay, I'm negating this thing in my, you know, four or five lines of template shenanigans. Yeah, five lines of Sphenae, you've gone too far. Yeah, I mean, that's what we'd like to say.
Starting point is 00:07:16 But then you look in the standard and like, you know, the constraint structure is like, is not a array and is not, you know, it does not decay to an element of the base class type. I was like, oh my god. So yeah, some of us take that advice hard, but the rest of us not so much. I actually know one team that uses this exclusively. They don't use the traditional operators. Oh, wow. What is their reasoning for that? I would say they would say readability okay actually um but then every compiler implements it in a way that's not in my opinion quite right and so if you look at the first uh comment on the reddit discussion my class and other and you just put like an r value
Starting point is 00:08:02 reference by using the and keyword there and like every compiler allows that and it's not quite right somehow and so that's my feeling on it is like nah okay never mind yeah yeah i think what was the first the first comment after that one is thanks now i hate it yeah yeah yeah that'll that'll definitely do it um i'm assuming that the team you're referring to, Jason, probably would not write that code, but they're using it for actual logical and. Yes. But I mean, would it really be C++
Starting point is 00:08:32 if there wasn't a fun way to shoot yourself in the foot with it or write something crazy with it, right? Yeah, yeah. Next thing we have on the topic of virtual C++ conferences, pure virtual C++. The signup is now live and that's going on next week. So if you haven't already signed up,
Starting point is 00:08:52 you should check it out. I guess that does overlap with C++ now. I guess so. I don't know. This is just a single day. This is May 3rd. Yeah, it does overlap. Yeah, it's plus. Okay. Okay. And C++ now is, that's what, three or four days? Yeah, it does overlap. Okay. And C++ Now is three or four days? Yeah, it's the
Starting point is 00:09:07 second through the fifth. It's a five-day conference. It's usually five days with I don't know. I don't know what the schedule looks like. It's usually just like a week for the business week. That week is when it lasts.
Starting point is 00:09:24 But yeah. Sorry. Yeah, but I'm kind of excited about a pre-emergency i think i'm definitely excited about uh uh daniela engert's talk the uh the secrets the three secret spices of cs plus modules um because i i so so i have uh i don't know how to use modules properly i mean, so I've seen Daniela give some of the talk before, and I've seen like build improvements, other things that can come from modules, but I think that this talk is probably a more improved version of that, because the last time she gave this talk, she was
Starting point is 00:09:54 basically fighting with, what was it, all three compilers that had incomplete implementations in each modules, and they each were incomplete in completely different ways, so you had to tailor your code for each different one. But basically, I think this will be a much more improved talk. And so I think I'm interested in watching that one
Starting point is 00:10:15 so I can learn a little bit more about it. Also because I need to work the hatred of modules out of my system steadily and slowly. I ran into some unfortunate things about modules and the way they interact with the preprocessor when it comes to std embed. And so my life was just, the whole proposal was thrown into limbo
Starting point is 00:10:35 because I had to figure out how to make this phase four hash depends thing work with std embed, and it's kind of a mess, and so I got to figure it out, which is a little bit unfortunate, but that's where's a fascinating sorry go ahead jason fascinating overlap for me from a c++ weekly perspective because like once every 10 days i have someone ask me when am i going to do an episode about modules and i'm like i don't know after the compiler support it and i
Starting point is 00:11:01 know what i'm talking about you know right but then also i just had someone recently say that i really need to do an episode on stood in bed so oh oh well um is stood in bed is going to take a little bit longer um so you know you want to do an episode that that quickly uh but um you you will be able to you should hopefully be able to do an episode on Clash Embed, which is the preprocessor version, which isn't quite as powerful as Stood Embed, right? So Stood Embed, you can use a const of out time, you can use it like recursively, you know, because it's just a normal const of out function,
Starting point is 00:11:36 you can use it recursively. At compile time, you can basically implement like a C compiler in, you know, C++ const of out using this kind of thing, right? Clash Embed is a preprocessor thing. You can't react to the fact that the preprocessor included it and then hash embed something else, so you can't get that recursive ability anymore. We also remove the ability to specify types with hash embed,
Starting point is 00:11:59 so all you get out are just blobs of basically a bunch of numbers. The way it works is that it of, are basically a bunch of numbers. The way it works is that it basically dumps out a bunch of numbers that go from zero to whatever the UCAR max is supposed to be. Which is maybe 0, 2, 5, 5 on all normal, regular, sane systems. So, you know,
Starting point is 00:12:17 and that's just how, and that's just kind of what it does. So it's very simple in that way. But again, you don't get the due types it's not const of value you can't react to things so there's a lot of room i think left on the table for std embed um but i think hash embed is like a very good a very good thing for like quick crixes um and just people who just like i listen i need data array and i need it right here and i just need to splat all these numbers i need to compile it or not, you know, spend five gigabytes of RAM trunking through this array,
Starting point is 00:12:46 this gigantic array that I wrote, right? So that's good. But it is a string literal or an array literal. No, that's not a good word. Yeah, it is. So no, the way it's, it literally just actually dumps out
Starting point is 00:13:01 numbers now, so it doesn't include the curly braces, so it's literally just, it's supposed to behave. So it doesn't include the curly braces. So it's supposed to behave like a comma-delimited list of numbers, right? So a naive implementation could do the wrong thing where they just kind of vomit out the numbers in the spot and say, I'm done. But most of the implementations have had some amount of optimization put into them. For example, my experimental implementation uses a built-in that sits in an array and expands to the right thing, and it's really fast, and obviously it's cutting edge, and there's a bunch of numbers on the
Starting point is 00:13:30 GitHub page, github.com slash the phd slash embed or whatever. But it literally just acts as if it dumps out a bunch of numbers, and that's how it works. So can I use this on any compiler that's currently shipping? No, not yet. But good news is that I synchronized with both C and C++. So I think it'll take a little bit longer to get in C++, but C is interested, and it's actually getting pretty close to acceptance. It might actually get accepted either next meeting or the meeting after. So it'll be in C23. And the good thing about that, it means that Microsoft can't escape anymore,
Starting point is 00:14:03 and they can't keep pretending that they're 64,000 or 65,000 bytes or whatever limit for string literals is good enough. And we'll actually have a way to put large data files in MSVC without waiting a million years for it to finish. And that's actually like 99% of why I'm standardizing this, because MSVC didn't fix their string literals processing. So that's it. That's why I'm standardized. It's because MSVC didn't fix their processing. So that's it. That's why we're here. And so now in my vengeance, it's not only going to be in C++, but it's also BNC. So that, you know, anytime they
Starting point is 00:14:33 implement the next standard, it's going to be there and they can't escape. That's hilarious. Okay. And then the last thing we have is just the collection of papers for WG21 for April. A couple new ones here. I didn't read through some of these in too much detail, but I did see a couple interesting titles, like Constexpr Class.
Starting point is 00:14:56 I thought that one might interest you, Jason. I missed that one. I missed that one. I usually just search these things for Constexpr. It's 2350 by Andreas Fertig. Fertig. Fertig, yeah. 2350.
Starting point is 00:15:13 Yeah. Are you familiar with that one, John Heade? A little bit. So I saw some of the discussion that kind of led to its creation. But basically, I believe the idea here is that you can essentially mark a class as constexpr, and then rather than going through and marking every single member function constexpr, it just assumes that it's constexpr. Everything inside is constexpr.
Starting point is 00:15:33 So you basically say this class is constexpr, everything inside is supposed to be constexpr, right? And it helps catch class of errors where you forget to constexpr something. And there's been implementations that have shipped stuff, and they're like, oops, we forgot to constexpr this thing now. I guess we have to wait until the next update to get a properly constexpr variant or whatever else. So, yeah.
Starting point is 00:15:54 I think it's helpful. I think it's good to just make things easier and not have people suddenly dropping constexpr on the floor. It also kind of signals intent better. So if you forget constexpr on a single method, someone's like, did you mean to forget it there?
Starting point is 00:16:10 Was that intentional? But if you just put it on the class and it's like, okay, everything in here is supposed to be constexpr, that makes sense, right? So I think it's a good thing. I think it'll be great. Yeah, I think the only thing that this proposal doesn't do is it doesn't allow you to backdoor your way out of it.
Starting point is 00:16:28 So if you put constexpr on the class, you can't mark individual methods as, oh, by the way, no, I don't want the constexpr here. You need the no constexpr keyword, so you put no constexpr in front of the... Yeah, in front of the math.
Starting point is 00:16:44 So there's a tiny amount of precedent for this. Some people have already proposed like a constexpr with parentheses and a Boolean, and then you can kind of like do static compile time not to say whether it should be constexpr or not. It was rejected, but I think maybe with this proposal, there might be some need for it. I do think that there might be some cases or classes
Starting point is 00:17:04 where most of the thing is compile time, but you want to specifically say, this thing, though, is not a compile time method. Like, I have a caching method or something, right? And that works off a runtime cache that I'll never be able to access at compile time. This method can't be constexpr, right? So I think those kinds of cases will be a little bit important.
Starting point is 00:17:23 I haven't told the author this, but, you know, maybe I can can can, you know, just talk to the author and they can and see if they how they warm up to that kind of idea. But, yeah, it's I think it's a good paper. It's a good paper. Yeah, I totally forgotten that I had seen this discussion on Twitter. He was soliciting feedback for what the layout should look like for the paper. I mean, where where theexpr keyword should go, specifically. Yeah. Any other interesting papers either of you want to bring up in the April mailing?
Starting point is 00:17:53 Well, there's another one from Andreas that I did see, which was making unique pointer constexpr, which in my opinion is like a huge oversight from C++20 because if you've got constexpr vector and constexpr string, you can make unique pointer constexpr. That should have just been done. But anyhow.
Starting point is 00:18:12 Yeah, so that one's got to get in too. You know, that's like for obvious reason, that'd be a great update. That'd be a great thing to have. So I'm looking forward to that one, definitely. Yeah, but I think, I mean, I put a paper in there, but it's just an old rehash of a paper that I had
Starting point is 00:18:28 for, what is it, Reconstructible Ranges? I think I talked about that a couple of times before and wrote a lot of blog posts about it. But basically, it's a paper just if you take a range apart into its iterators, you should be able to put it back together, or you should be able and do some cool stuff with it. That paper is back in the in the fray
Starting point is 00:18:48 now maybe for c++ 23 oh and that's right uh so out pointer i was wondering about out pointer yeah yeah so so out pointers in this mailing because it actually got through lwg review um so it's going to be in c++ 23 so you'll be able to take smart pointers and have them interact with uh c style functions that take like double pointer output pointer parameters and stuff like that, and it'll just make them magically work. Oh. So that's going to be approved for C++23. I was hoping that the paper would come along with Isabella Muerte's retained pointer, the intrusive pointer style kind of pointer. But unfortunately, that's got to do
Starting point is 00:19:26 that's got to spend some more time in an lwg lewg and stuff so uh library evolution work group the the design group before it goes to the wording group um but yeah i'm super glad that out pointer made it and it was a very long time coming um and i'm actually kind of really glad that's in this is one of those small things that i've like i don't think is a big deal a lot of people don't think is a big deal. A lot of people don't think it's a big deal, but it turns out that a lot of people keep re-implementing it over and over again. And it turns out that there's some performance optimizations that only the standard library can do that I've actually been doing in my implementation,
Starting point is 00:19:55 but through UB type hunting. So I reach into your unique pointer, and I catch it to a struct that has the pointer and the leader, and I rip out the pointer from it and then throw it in the out pointer, which is pretty illegal, but it works. So I'm... It's not illegal
Starting point is 00:20:13 to type on the same initial sequence. That's the same initial sequence rule should allow that, right? So sort of, right? I don't actually know if the struct I'm using matches what's compiled. Like,
Starting point is 00:20:28 so basically I have like a bunch of stuff for like, is this lib C plus plus do this? There's lipstick C plus plus do this. If it's Microsoft do this. So it's pretty illegal. They can change it at any time. Right. It's not guaranteed to work.
Starting point is 00:20:39 I don't think they will because you know, ABI stability and all other stuff, but you know, it's, I'm, it works on, it works on very shaky and tenuous ground. And if the compiler decided to be mean about it, they could ruin my day. So I'm just glad it's in the standard now and I don't have to keep chipping radical undefined behavior to people,
Starting point is 00:20:59 which is great. Okay, so should we break the ABI or not? Yes. I want to go on such a bad rant about ABI, but we will not get to any other part of the show if we start talking about APIs. I will completely refrain from doing that. But to sideways answer your question,
Starting point is 00:21:21 yes, you should break ABI, which means, yes, that my outpoint for implementation that I'll have out in public would break sometimes right i'm perfectly okay with accepting that breakage if that means we don't you know ruin things for a lot of other people and ruin things and i think more insidious ways than i think people realize but again i i'm gonna resisting the urge to rant so eventually yeah a little rant uh well then uh to distract you i'll ask you your opinion on one other thing in this mailing, and that's the if const eval to get rid of the if is constant evaluated. Yes.
Starting point is 00:21:53 So I was actually pretty against if std is constant evaluated, like the spelling of if and then no constant instead is constant evaluated. I think that was a huge mistake. Almost universally, everybody who reflexively uses it pipes out if constexpr std is constant evaluated. And that's just objectively the wrong thing to do, but it feels so right. It feels like exactly what you should be doing. But it's objectively the worst thing you can do with that feature
Starting point is 00:22:20 because what it says is if evaluated at constexpr time, this condition, right? So the condition has to be evaluated at compile time. So st says is if evaluated at constexpr time this condition right so the condition has to be evaluated at compile time so stood is constant evaluated will always return through so if you say put slow code in the constant valve path that's that's constexpr friendly right like you just tank the the the the runtime of your algorithm forever but and because it's constexpr that is a subset of valid c right? So you will never notice that your brand, that you're always taking the wrong branch. If you write that code,
Starting point is 00:22:49 unless you just notice a massive performance degradation, degradation or something. Right. So it's very painful to, to have a thing. So if constant value removes that, because it's just, if constant value,
Starting point is 00:23:00 and it's very clear that you want to switch on the fact that it's compiled time. I've softened my objections to std is constant evaluated a little bit because some people have done interesting things like this. So they have an if statement, they say std is constant evaluated, and then they add a bunch of other conditions for other things that should be true along with the constant evaluation. And so people develop complex expressions for that.
Starting point is 00:23:22 And I think that some of that is a little bit necessary, especially because of the way if constexpr, if consteval, and some of that stuff works. Like if you use an if block, it introduces a new scope. And sometimes you want to share some code. And if you have to put it in like an if block, an if constexpr block or whatever, and you introduce a new variable,
Starting point is 00:23:38 like you can't like really write over it or set stuff. And so I think that there's still some room for if std is constant evaluated and some other stuff, but at least we have if constant eval now, so at least we can drive most people who will just be doing the basic is this compile time or not switch to use if constant eval and do the right thing.
Starting point is 00:23:58 And the people who have more complex conditions can drop down to a lower level of abstraction, the std is constant evaluated evaluated and make complex stuff happen. That's an interesting point because I was kind of wondering if this would effectively deprecate is constant evaluated. Yeah, I think for the most part it kind of does. But there again, there's some of those advanced use cases where you need an expression that can be slotted into an if statement or something else. There might be cases where, need an expression that can be slotted into an if statement or something else. There might
Starting point is 00:24:26 be cases where, for example, you want to base the note. Well, no, that doesn't work. There are some cases where you want to be able to mix that expression in with other things that aren't evaluated at compile time. And also one of what a little bit of code duplication. Instead of having an if-const-eval,
Starting point is 00:24:42 which makes a new scope, and then you have to fill everything in there, you can kind of mix things a little bit, which I think is okay. Right. Yeah. Okay. Well, Jean-Huid, I know you're always a very busy person. What have you been up to lately that you want to talk about? Where should we start?
Starting point is 00:24:59 Maybe what you've been up to with the C standard committee? We talked a little bit about embed already. Yes. So the C standards committee is making amazing progress. Um, at least amazing from my perspective, because I went in there, I was like,
Starting point is 00:25:10 nothing's going to change. I'm going to spend like five years here and nothing's going to happen. We'll get, we'll like, we'll like fix some, you be in some libraries somewhere. And then like, that'll be what we're doing.
Starting point is 00:25:18 But no, the C committee is pleasantly surprised me in that they are very hungry for fixes to a lot of their problems. Right. So they were receptive to embed. Um, they were receptive to a lot of different other papers. They're even talking about a defer feature for C. And I'm not sure if it'll make it for C23, but I'm actually really excited about that. What was the feature? Sorry. It's a defer feature. So it's not exactly like goes defer. It's basically kind of like destruct. It's like destructors for C, right?
Starting point is 00:25:46 So you make a defer block and you basically say all the stuff in this defer block gets executed at the end of the scope, right? In its simplest form. And so it essentially does, it's basically like a destructor, right? When the lifetime of the defer block ends, you run all the statements in the defer, right?
Starting point is 00:26:02 So you do an F open and then you put your F close in the defer and right? So you do an F open, and then you put your F clause in the defer, and then whether you go to or whether you return or whether you just jump out of the scope or whatever else, that defer code is run. Yeah, like a destructor for a function, effectively, is what it kind of sounds like. Basically, but it's scope-based.
Starting point is 00:26:18 So you can have a defer inside of an if clause, and when you exit that if clause, then that's when it engages when you enter the if clause, and it fires when you exit that if clause, then that's when it engages when you enter the if clause, and it fires when you leave the if clause. So it's very much like the destructor. Can we get a proof of clause too? I hope so, but right now we're focusing on doing it just for C, because
Starting point is 00:26:36 I think C needs it most. And the person who's pushed the paper, Robert Secord, has spent a lot of time working with a lot of people trying to make it happen. He has presentations on it. He's working really hard on it. I actually do think it's... a lot of people kind of trying to make it happen. He gave presentations on it. He's working really hard on it. I actually do think it's a lot of people think that it's just destructors for C, but it's actually literally fundamental than destructors. So destructors are always paired with constructor, and they're a general purpose-undue mechanism, as Scott Myers said.
Starting point is 00:27:01 But destructors also carry with them some baggage, especially when it comes to the standard library. The reason we don't have, or one of the reasons we don't have ScopeGuard, that thing that Peter Sommerle was working on for a million years, that was the realization of, what is it, Andre Alexandrescu. Yeah.
Starting point is 00:27:19 It was his idea for, like, if there's a transaction and something happens, roll back the action, right? And so that was basically, that was modeled off of using his idea for like if there's a transaction and something happens roll back the action right um and so that was basically that was modeled off using constructors and destructs right so constructors set up the action and then based on conditions fire any number of these you know transaction failed or the block exited normally so it's okay or the block exit was an exception so do this instead right that kind of thing um and so p Sommelak created this paper, I think P0052, that was ScopeGuard.
Starting point is 00:27:48 That was what the paper was about. But fundamentally, that paper doesn't work with the standard library because every single type in the standard library must have a no-accept destructor. If anything is destroyed in the standard library, it doesn't throw an exception. We take this so far that even for things like file buff or threads or whatever else,
Starting point is 00:28:06 any exception that happens in the structure, we just swallow it and throw it away. Every single standard library does this, right? And even in some place in the wording, we say, if an error happens while the structure is going on, just swallow it and just throw it in the trash. Students made me aware of this because apparently close can
Starting point is 00:28:22 fail, which I had never considered that file close, not F close, but like, uh, uh, O F stream close could fail. Like it might not have enough space to write to it. And if you're just relying on the destructor as I do, then you completely miss that an error may have happened when the, when the file is closed. Yes, exactly. And so one of the reasons why ScopeGuard couldn't make it into the standard is because we would have to fundamentally reevaluate what is the stable tag? Res.on.exception or whatever. But basically that says no standard library type will have a throwing destructor.
Starting point is 00:29:03 Every single destructor will be non-no-except. I'm sorry, will be no-except. And we will never have a non-no-ex throwing destructor. Every single destructor will be non-no-except. I'm sorry, will be no-except. And we will never have a non-no-except destructor. And the single thing about ScopeGuard is that we're running arbitrary functions and some of them can throw and it's desirable to react to that, right? Especially if you have nested ScopeGuard
Starting point is 00:29:20 where you're testing if something upstream failed, then yes, even if this scope guard failed, the next one should be able to catch it and do something about it, right? But the way the standard library works is that every single type inside the standard library can't throw. So you come up to this very strong barrier between the rules of C++ standard library and this very useful functionality. And the reality of the matter is that you really can't have it in a C++ standard library that goes full in on not having any kind of throwing destructor.
Starting point is 00:29:54 So the only way to have this feature is to actually have the deferred feature that C is working on right now. Because the language doesn't particularly care if you throw or not in destructor, that's just whatever. But if an object throws, if a standard library object throws, that's a big problem, right? So by having defer in
Starting point is 00:30:11 the language, you can get around the fact that the standard library can't handle this kind of thing. And so now you can write a defer clause that does all the things that Andre Alexandrestou had envisioned with ScopeGuard without needing the class spoiler plate and having to create this type that holds it on this Lambda for a million years.
Starting point is 00:30:30 You can just have the first statement do it instead. And so that's actually a huge win that I don't think a lot of C++ people realize is there for people who want to do better transactional programming, better guaranteed if somebody throws an exception or whatever kinds of programming without having to roll their own scope guard or whatever that entails. And so I think that a first statement actually has immense value to C++, not just C. And so that's what I mean by it's not just destructors,
Starting point is 00:31:03 because again, destructors have this connotation that they're always no except, right? And of course, you can't pass arbitrary information to destructors unless you toss it into the constructor of the object, right? And then you have to hold it and stuff like that. But defer can do it much more efficiently, right? Because just again, this is a scope-based statement.
Starting point is 00:31:19 So I think that actually has a lot of room. I'm actually very excited to see where it goes for C. I expect that C will get it first, and then slowly we'll have to start whittling out the C++ committee and be like, no, listen, this defer thing is actually really cool. It's not just destructors. It's actually a more general-purpose undo mechanism than what Scott Myers had said was a general-purpose undo mechanism, constructors and destructors, way back when. So I think it'll take a while to warm these people up to it, know that's what i'm talking about on cfp cassey you know the idea
Starting point is 00:31:48 in people's heads and like uh defer is a good thing for c++ yeah yeah that kind of thing um but you know i have questions yes like when you're in the defer block are is that is it is the the previous scope is it still visible to? Do you have access to those? You must, because otherwise you couldn't call fclose, for example. Yes. So you have access to everything in the previous scope. So it's basically like you can just refer to everything there. And it works.
Starting point is 00:32:18 You can also, if you want to be safer about it, you can capture a lambda and capture the variables by value and then pull things in that way to make things safer. And there's also another thing that's actually exciting about it. You can capture a lambda and capture the variables by value and then pull things in that way to make things safer. And C is also another thing that's actually exciting. C is working on getting lambdas, which is you know, that is a big thing.
Starting point is 00:32:35 But I think it's a very big deal for C because a lot of higher level programming in C is basically done with extensions like either nested functions or I think I learned that Orlan C has a special wide closure type or a double underscore closure keyword that you can annotate with function pointers to make a closure type that contains both the function and like more data and stuff. So it's, I learned a lot being part of the C committee and being the product editor. But yeah, they're, they're getting lambdas. And, you know, so that thing might help with
Starting point is 00:33:05 lifetime and other stuff that comes up with how defer works. But I think that because defer is locally scoped, you can't eject a defer into a higher scope, right? So fundamentally, you're going to be running to defer with all the variables still, all the
Starting point is 00:33:21 variables that you referenced there. So you would have to allocate a variable, delete it, and then run the defer like a smaller scope, but in order to like make that kind of, right. So it's, it's still safe, but obviously you still run the problems of if I capture something by reference or by, by pointer in some other scope, then obviously you can represent and defer and then blow something up.
Starting point is 00:33:42 But it's, it has the same kind of properties of that. You know it always deletes stuff at the innermost scope and you can represent and defer and then blow something up. But it has the same kind of properties of that, you know, it always deletes off the innermost scope and you can't like, you know, accidentally refer to something that might, that by normal by value rules would have blown up by now. Right. Okay. Yeah, that's what I was wondering is if the destructor of an object
Starting point is 00:34:04 were to throw an exception and then I was going exception, and then I pop into my defer block, how do I know which object threw that exception in its destructor, and what happens if I try to access that? But it sounds like that would prevent... Now, again, they haven't really hammered out these details because, again, in C, there's no destructor. Everything, like, object lifetime ends when you leave the scope. Defer is before you leave the scope. So for them, everything's kosher. I think in C++, you'd have to have the discussion of when exactly does defer run. My preference would be before destructors
Starting point is 00:34:39 are called because you want to, you know, you want to be able to help this thing still. Yeah, I think it would have to be. Like, either that or you'd have to figure out a way of, like, you know, you want to be able to access things still. Yeah, I think it would have to be. Yeah. Yeah. Like either that or you'd have to figure out a way of like, you'd have to weave, you'd have to say that the first statement triggers in the order of declaration, right? So the same way that destructors are done in reverse order, right?
Starting point is 00:34:57 You would do the reverse order of destructors and then whatever the first statements happen to interleave with those, right? In that kind of order. So if you declare one variable, do a defer statement, declare another variable, right. You delete the second variable first, then you call it defer. Then you do the first variable, right. Like in that kind of order.
Starting point is 00:35:13 So you can maybe do it, you can maybe do it like that. But again, that's like, that's probably, that's, that's probably the best way of doing it, I think. But, you know, so basically anything that you could refer to and defer would be anything that comes above it right and by that logic like everything above it has a lifetime that is longer than the first
Starting point is 00:35:32 statement right right because again because things are always destroyed in reverse order so anything declared after it would be destroyed would destroy itself for the defer block runs and you can't refer to anything after you know the first statement so it's it has the same kind of rules as the the first statement so it's it has the same kind of rules as the destructor right so it kind of starts to feel like if a knit blocks where
Starting point is 00:35:50 when you show someone if a knit they don't expect that the else block would have visibility to the thing that was in the infinite statement and then if you nest them and nest them and nest them you know like if a knit if a knit whatever whatever then by the time you get down to the fourth statement you actually have visibility to all of the previous init blocks. People don't expect that, but once you understand how it was structured, then it makes sense. And I kind of feel like what you just described
Starting point is 00:36:13 feels the same and would make sense once you, you know, maybe you wouldn't get it immediately, but then you'd be like, okay, I see what's happening here with the interleaving. Yeah. So that's what's been going on in Sealand. I'm also, I'm actually working really hard. They added a new annex to C for binary floating points.
Starting point is 00:36:32 So they added a whole new extension for binary floating point, and they also cleaned up a lot of the math in C. So they are now basically, I believe, almost perfectly conformant. There's some differences, but they're almost basically conformant with IEEE, the new floating point IEEE standard, the 2019 or 2021.
Starting point is 00:36:52 And so basically, they're all, they have all the functions, they have all the binary floating point functions, and I have to integrate that NXX into the C standard, and that's what I'm doing right now, on top of all the other papers that got accepted. So I'm desperately beating the late tech up.
Starting point is 00:37:09 God, I hate late tech so bad. It's not fun. It is absolutely not fun, but it's what we have. And I'm actually pretty grateful that it is late tech because before it was some like froth and a mix of some other stuff, which is like some like half dead file format. J yen's gustad um who's also you know spent a lot of time on c committee a lot a lot more before i showed up um who is the one who's proposing lambdas and a bunch of other like
Starting point is 00:37:34 revolutionary even the null pointer constant they're bringing that into c um so it's it's actually getting really spicy in there um um but uh yen's gustad was the one who was the editor before me and he did a lot of work to translate everything to LaTeX. And as much as I complain about the LaTeX experience, like I, there's some little, like little parts that are left in the old froth for like the, for, for, for the way the old standard was. And I'm like, I'm so glad I never have to touch. I never had to touch any of that because it just looks like all, it looks like it's all
Starting point is 00:38:03 a nightmare. Um, so many thanks to Jens Gosted for that one. But yeah, I'm not having fun with LaTeX. I'm really not. I don't know if it would be useful at all, but I would just share that there's been this WYSIWYG
Starting point is 00:38:17 LaTeX editor that's been around for like 20 years that's not very well known called Lyx. Lyx? If you haven't seen it i i mean i haven't tried to use it in like 15 years so i can't even comment on whether or not it's useful right now but uh just thought i'd throw that out there okay yeah definitely i mean right now i'm using like vs code and just like uh and just a bunch of like shell commands i can't even run it in windows right now i mean i'm actually trying to i'm trying to improve the build system so that I can build on both Windows and Linux,
Starting point is 00:38:48 but right now it's all WSL2 land. It's all VS Code with just running raw commands and hoping the thing builds and getting a million spews of overfull HBox. Yes, overfull HBox. At least thousands of those errors. It's just not a good time. I'm sorry, I have to ask a question about what you said you're integrating. What the heck is binary floating point?
Starting point is 00:39:10 So binary, there's a binary floating point and decimal floating point. So they added extensions for both binary floating point and decimal floating point, which basically is just two different versions of handling floating point numbers. So like literally 1010.10. Yeah, some of that, and then also a decimal version of that so um for and the the format isn't exactly hammered in stone the i think
Starting point is 00:39:33 implementation i'm still trying to understand all of it right and this is what this is why i'm taking so long to edit the things i'm like need to make sure that i'm putting everything in properly and not like oops i accidentally changed the meaning of what they meant by binding floating point um but it's it's it's basically basically there are two different storage formats. Binary floating point is the stuff you're already used to and what you get when your floats and doubles today. It's a binary storage format. Decimal floating point is closer to what you would expect
Starting point is 00:39:57 from your arbitrary digit precision libraries. So some of those storage formats um they don't support arbitrary digit uh floating point obviously but um you know they support you know very strong forms of of decimal floating point and uh uh that's basically what i've been dipping my hands into and i'm learning way too much about floating point errors and other stuff that i need to make sure is um make sure it's on'm, I'm actually terrified of submitting the draft because I know that I'm going to mess something up and like the, and so there's a whole group body of the whole C floating point group. And I'm going to have to like report to them like, so how badly did I do? Um, but you know, I mean, thankfully it's
Starting point is 00:40:38 not too hard, right? Basically most of it is just copy pasting verbatim and making sure that I get the typesetting correct. Um, but you know, again, in, in typesetting an entire annex of the C standard, it's it's, it's something. So it's been taking me a while. Also the, the diff, the diff engine is busted. So I have to fix that too. So there's a lot to do. There's a lot to do.
Starting point is 00:40:58 Are you glad you volunteered for this editing job? Yes. With reservations. Yes, with reservations. Yes, with reservations. But I am happy because I am getting a chance to revamp the paper process for C.
Starting point is 00:41:16 So W21 has its paper system, right? You can finally now submit papers online and you get these P numbers and they're not tied to the ISO system. C is still tied to the ISO system. C is still tied to the ISO system. So you have to submit a paper to the convener or to the, what is it? I forget Daniel Pocosh's full title. But you basically submit it to either the convener or Daniel Pocosh and that's how you get a paper number and it goes through the ISO system. So they literally send like an email or request to ISO. ISO approves that request and then you get back
Starting point is 00:41:48 a chunk of paper numbers and you start handing them out, right? And that process can sometimes take an exorbitantly long amount of time. ISO is even complaining that we're asking for way too many papers. So like we do need a new paper system. So I'm actually working on that. And I actually, for the next C-mailing, I'm hoping to actually write a paper, write one of the last N-numbered papers that is how to submit a paper into the new system. And I think it's pretty cool. And the good news about this is that
Starting point is 00:42:13 instead of kind of having things like WG21 link as like separate services, it'll kind of be built into the infrastructure of WG14. So I think, you know, it's going to be good. I don't have to do this stuff as a product editor, but I think it's still worthwhile to kind of give a place for people to easily submit their papers because I've gotten way too many emails. But if you're like, how do I submit a paper?
Starting point is 00:42:33 And it's like, oh, well, you have to go through this very grueling process. Good luck. Um, and, and I'd like that to not be the case anymore. So, um, I'm working a little bit on that and hopefully, you know, in the next mailing, I'll be submitting that paper that basically says this, how we do papers from now on. Here's the website. Here's where you upload stuff.
Starting point is 00:42:48 Let me know if things are broken. And then we can finally just migrate ourselves off of the always publishing on through ISO, which I think will be great. Yeah. But yeah, that's basically everything I'm doing with the C committee. I want to have the discussion for just a moment
Starting point is 00:43:04 to bring you a word from our sponsor. As C++ coders, I think you can say we've gotten used to waiting. Waiting for code to be compiled, tested, and even analyzed. My friends at Incredibuild have been working decades to help developers like you and I code more and wait less.
Starting point is 00:43:19 Because expert developers don't wait. With Incredibuild's acceleration platform, I've easily gotten up to 10x speedup on real-world projects right out of the box. What I like most is how easy it is to use. Their virtualized distributed processing technology turbocharges product development with just a lightweight IncrediBuild agent. No need to install any build tools or source code, turning every host in your network into a supercomputer. It radically shortens compute times for a huge scope of applications, compilations, testing, graphics, and much more.
Starting point is 00:43:48 It's like having a bunch more HPCs and developers without adding a bunch more HPCs or developers. Go to incredibuild.com slash cppcast to start your free trial today. That's incredibuild.com slash cppcast to start your free trial today. That's a lot, bud. To bring it back to C++,
Starting point is 00:44:05 I know when you were on in November, we talked about the C++ and C working group. I don't remember what you called it, study group. How's that been going, the interaction? Yeah, the liaison group. It's actually been pretty positive. So Aaron Bauman's been chairing that one and holding the reins on that one.
Starting point is 00:44:23 So they're going through a lot of different papers, right? So they're talking about assert. They're talking about, you know, make sure lambdas are in sync. I think the biggest topic now is actually something that actually appeared in the latest mailing, the multidimensional subscript operator. So that one allows you to basically define
Starting point is 00:44:39 a subscript operator that takes multiple arguments, right? So basically they just, instead of restricting it to one argument, you can pass in zero to many, right? It's variatic. And that generated a little bit of liaison discussion where people were kind of, kind of the C people were a little bit grumbly
Starting point is 00:44:54 that we were taking space from the C arrays in that, you know, we were only, we were defining this new syntax that had this idea that you could pass multiple arguments to arrays. And so that generated a little bit of grumble. And so some papers might show up there for the liaison group. But the liaison group has also been tackling other issues in C and C++. So secure clear, I think, was talked about a little bit in the liaison group, which is a function
Starting point is 00:45:28 that basically is supposed to securely clear a block of memory and a couple other things that were also discussed in the group. And I think it's going pretty well. Oh, one of the other things that I actually wrote a blog post about was the LFDEF and LFNDEF, the preprocessor directives. So that was approved for C last meeting, which I'm super stoked about. I'm so glad that we finally plugged that hole. So if you've ever used this preprocessor, right, and you've typed in ifdef and you've done something, then you want to type LFDEF and you want to type something.
Starting point is 00:46:00 That LFDEF is illegal. You can't write that because it's not part of the grammar. It was never part of the grammar, right? So though it's like a a natural thing that you would just expect to work it doesn't um so c last meeting plug that hole right and i and i wrote how um in the blog post and you can read the blog post i'll just give a quick summary um i basically wrote how we were we were kind of doing the the thing that we often do in in the committee in c and c plus plus where we're like this is a nice feature but you can just write l if and then defined and then the thing and yeah right so so why do we have to introduce this new these new tokens and these new preprocess things we don't need it we can do the other way in fact if we if we were being consistent
Starting point is 00:46:41 we would delete if def and just have if defined because that's more powerful, right? And we got on that bender for a little bit. But one of the things that actually makes, I think, LF-def and LF-def fascinating is that this is one of those things that, like, it's very simple, and so you think most people would be like, why would you care about it? But it turns out a lot of people care. In fact, we got an email from a senior embedded developer
Starting point is 00:47:07 who's been at his job for well over a decade and a half who's like, yes, please put this in. Like, I am sick of running into this problem. Please put it in. Like, if you can, do anything to make sure that this makes it into the standard. Do it. And so we got a bunch of emails like that.
Starting point is 00:47:23 And so it was like oh okay this is this is a kind of a win for us right like you know so even though it seems like something like it would be better if it would help like heck it would be better if we deleted if def and just went with if defined um this is one of those things where it's like okay well we have if def and it saves people some time maybe it's actually worth having the feature in you know the language um and so that actually ended up turning the tides of the discussion and making it so that it was overwhelming that there was overwhelming support for it um and i think it was and it is one of those things where i was like it it's it's it often feels like when we're
Starting point is 00:47:59 standardizing stuff we're like detached from the community and we were never beholden to anyone and we're just like you know big huge, super crazy theoretical standards people that don't think about other people. But it's actually important that you do reach out to us because we are grounded by what you say. If a bunch of senior embedded developers reach out to us and say, yes, please put it in, that's a very strong rule to do the right thing. And so having that kind of support is actually pretty important, right? So I guess there's just a little bit of propaganda to say, email your friendly, you know, proposal author if you're, you know, you're a stake, like, you are a stakeholder in this, right? You ultimately end up working with the C standard, right? So, like, yeah, some of us do a lot of work to put the proposals out and do the work, right?
Starting point is 00:48:42 But, like, even just a small email, even just a small amount of user feedback does turn the tides for good. So, you know, I think that's kind of a good thing that came out of that situation, that that user feedback does, there is a connection between the committee and the end user, right? It's not just a committee sitting in some lofty tower being like, all right, I think today is the day we're going to introduce some undefined behavior today. That's how we'll see how the peasants deal with that oh all right you know it's we're we're a little more rational than that i think so you know i think that's that would be a little bit better um but yeah so that also showed up in the in in both c and c++ and i think it also got approved for c++ as well so i'm sorry it made it through the
Starting point is 00:49:23 evolution group in c++ it got approved by the design group well. So I'm sorry, it made it through the evolution group in C++. It got approved by the design group. So now it has to go through the wording group. And this is also kind of why I like the C committee a little bit better. Once your paper gets approved, it's in, right? There's no like multi-tiered stages, you know, groups, you know,
Starting point is 00:49:36 go through the incubator first, then have a discussion, and then we'd have a vote and the plenary. And there's like, no, we take the paper. Is it good enough to accept right now? Yes. Okay. It's in.
Starting point is 00:49:46 No. Okay. You need to go back and work. Right. And it's very actionable feedback. It's a very direct way of working on stuff. You can't ever get lost between groups or something or not know what's going on. So I think in that way, it's nicer.
Starting point is 00:49:58 But it's also probably due to our size, right? Like we average 20, 25 people a meeting, 30 people a meeting. You can talk to everybody. You can have time during the meeting week to talk to everybody and you won't miss out. So, um, you know, I think that's, that's kind of a good thing. Yeah. Was there any concern that some of these things like lambdas and deferred and whatever are going to make the language no longer simple and easy to implement and the things that people like to say about C? Yeah, so there is some concern that there actually is there actually is a lot of concern that that these things are difficult. But I think that a lot of people have recognized
Starting point is 00:50:33 that we're already that for all the things that people say C is simple about C is actually not that simple. And also that C already has a lot of this, right? So like nested functions, our GC extension that's implemented by half people. Again, Borland has the double underscore closure keyword in there, right? There's a bunch of other like statement expressions and being able to decay those to closures and function pointers and stuff. We already have that stuff. People have been basically compensating for C for a very long time, right? And so a lot of people realize that, okay, so we're asking for this Lambda feature,
Starting point is 00:51:09 but it's not really any different from what we've been literally implementing in our compilers, except everybody does it differently with suddenly different semantics, with suddenly different bugs and broken things. So maybe it's better if we actually just standardize on something
Starting point is 00:51:20 that does a good job of it, that's been proven to do a good job from many other languages to get it right. Now, there's other things about lambdas that are pretty scary, right? So with the lambdas, there's the simple lambdas proposal, there's lambdas with closures, and then there's a level three, the boss level of lambdas,
Starting point is 00:51:38 which is lambdas with auto. So I worked on getting TypeFuf into C, and that's going to hopefully get in this year. But Jens Gustav has been working on getting auto into the language. And so that's auto for type deduction. But then he also proposed auto for lambda. So if you have a bunch of lambda parameters and you sprinkle them with auto, it looks like you'll be able to basically have templates, but by the backdoor. So you can't name the templates.
Starting point is 00:52:04 You can't name the types. You can't do anything with it, but it's kind of templates, right? And so what sees, apparently, what Yen's and other people in C are trying to do is they're basically trying to have templates, but without any of the type baggage, right? So, you know, you have these lambdas, these polymorphic lambdas that can do these things, that can kind of support type generic programming, but without introducing the entirety of the template system, right? So how do you mangle polymorphic lambda? Well, it's up to the compiler, right? The compiler can make a decision, right? So instead of enforcing a lot of these decisions that kind of came with the whole Turing complete
Starting point is 00:52:37 template system, they're hoping to just kind of have this one thing, this one polymorphic lambda thing that you can do that will kind of serve the purpose of what most of lambdas do. And I used it myself to I prototyped a vector. I prototyped a vector in C using polymorphic lambdas, and it's actually pretty amazing. So I can have a single
Starting point is 00:52:57 vec of int or vec of whatever structure, and I can ship that to these polymorphic lambdas that I basically have a bunch of them in the global namespace, like vec insert and vec whatever. And I don't have to make vec int insert, I don't have to make vec double insert, I don't have to duplicate the code at all. The polymorphic lambda will just do the same thing for all of them, right? So I can effectively have a decent container library, right? The thing that people have been yearning for for like 30 years and see,
Starting point is 00:53:25 you can have a decent container library without the templates, just using these polymorphic lambdas and stuff, right? So it's actually pretty exciting. I hope that people do look into it a little bit more. Right now, what people have to do is they have to do crazy amounts of macro generic programming
Starting point is 00:53:40 and it's horrible and a lot of people hate it. But I think that that this actually has some potential for like really giving people like a very good way of having reusable code and generic code and c that actually scales up to to some degree right and again we're not you know uh lambdas you know they're not real function things right so you they don't have like mangling you don't have have to worry about how I put them in my binary. It's all up to the compiler, and you can't observe it anyway. So it feels like
Starting point is 00:54:10 we're getting a lot of the benefits of templates in a C-ish way that doesn't allow the whole template system to come in and wreak havoc on what C's identity is supposed to be, right? But even if we don't get polymorphic lambdas, just getting simple lambdas
Starting point is 00:54:25 where you can name parameters normally and it decays to a function pointer and you can size of it and you can set to a void star and pass it as the void star argument to a callback and do all that shenanigans, I think is already top notch. So I'm actually happy.
Starting point is 00:54:39 I'm kind of happy about the direction that that's going in. Yeah. Awesome. Yeah, sounds exciting. Well, uh, we're starting to run low on time.
Starting point is 00:54:47 Uh, a lot of interesting stuff is happening in the C committee, but I know one thing you announced on your blog that we definitely want to talk about is, uh, that you announced you're working on a new conference. Is that right? Yes,
Starting point is 00:54:57 I am working on a new conference. Um, we, I've actually been working on it really, really hard. Um, we've got sponsors, we've got music,
Starting point is 00:55:05 we've got, uh We've got artists working. Yeah, music. Because, again, it's going to be an online conference, so we actually have our own music and stuff like that, and people are working on that. We have artists working around the clock. So this is slightly privileged information that seems to be CAC exclusive. But it's unfortunately not the happiest of news
Starting point is 00:55:23 because we are going to be postponing the conference I think until October 2022 the original goal was to have it October 2021 and that's what we're shooting for but we that was that's like that's a hyper aggressive timeline and I mean we've been working on it for like since what since December of last year so you're hoping for an in-person conference is that one reason why no no no not an interesting conference no no i mean we don't have the resources for that just quite yet um but we we realized that if we held an online an online conference especially our inaugural conference um that we have so many ideas for things we want to
Starting point is 00:55:58 do that we would kind of run ourselves into the ground preparing for it by uh uh for october 2021 right and even though it sounds like a very far time away um and even though we have sponsors who have who signed up and many thanks to them and and we have many trainers and speakers some some really high hitting and and huge hitting classes um that i was really excited about personally um i think that it's that that shepherd and and all of us are kind of making the right call to delay it a little bit because i think like i think the best way to capture it is that we have not stopped having ideas for things to do since December.
Starting point is 00:56:32 And we have been pursuing every single one of them, and they're all turning out great. And we're kind of a little bit in trepidation that we will end up in a situation where we have all these great ideas and we don't present it as best as we can, especially for our first conference. And so I think Shepard and the rest of Shepard's Oasis is definitely making the right call saying that it's probably a good idea to postpone it until October 2022, when we can definitely do it way better than we are right now.
Starting point is 00:57:04 And so it's going to be basically postponed to October 22, which is sad because we just settled on the date, October 2021, like a month and a half ago or so. So we were excited. I had the submission system ready to go. I coded it myself, and actually I coded it in Rust, which was pretty cool. Don't tell NC programmers that I used C++ and C it was great but you know
Starting point is 00:57:28 I was actually really excited about the whole thing but I do think I agree with them in that we would do a much better job I think if we if we take our time and just definitely ship it out the door in 2022 rather than 2021
Starting point is 00:57:44 plus I mean people are going through the vaccination. Certain parts of the world are still not fully there yet. Other people are still trying to figure it out. I think by October, we'd have a lot of it figured out. But at the same time, I think a lot of people would have a lot of online exhaustion, constantly having to be at things online and stuff like that. I think that waiting the year is also just a good thing for that as well, because I think a lot of people,
Starting point is 00:58:08 I know that this is good, especially because we, we covered live captioning. We already had live captions scoped out and covered. We had a bunch of other like accessibility features scoped out and covered. So I think a lot of the people who are, who have disability will be kind of disappointed that we're pushing it
Starting point is 00:58:23 back to 2022, but I think our commerce will be even better for that, and we're going to have even more features for them and more ways for them to participate as well, which is another decision factoring into this for us, because we want to make sure that it's an accessible commerce. We want to do it a little bit differently than everybody else.
Starting point is 00:58:38 Obviously, we're trying to pay our speakers as well so that they actually feel like they're not just showing up for clout, but they're actually showing up because we value their time. You're you're just for the exposure yeah i've seen this on like uh clients from hell or whatever you know people die from exposure right yeah exactly right but so we we have a lot of like we have a lot of like things that we're trying to execute on um and we just think it would be a much better conference if we wait until 2022, right? Thankfully, cash and everything wasn't really that much of a concern.
Starting point is 00:59:13 We were doing very good on all that stuff. So I think hopefully the sponsors will still be interested in a 2022 conference. Hopefully, they'll kind of carry that energy of supporting a new conference that focuses on an inclusive environment that's welcoming to everybody, that gives you the tools and everything that you need to learn and has great trainings and everything else so i'm hoping that that is going to be good but yeah i personally i mean i'm still a little bit disappointed right i wanted to hit hard with a 2021 conference but uh you know the the pragmatic decision should be should be made you know so yeah okay well we'll definitely have to talk more about it as we do get closer to that uh october 2022 date then okay yeah definitely um i'm gonna be going
Starting point is 00:59:51 on like a you know i was actually already planning to do like a whirlwind tour of like talking at a bunch of yeah uh places to to advertise the conference but now i mean for now i mean i guess i can still go to those places and just kind of talk about all the c and c++ stuff i'm doing which i'm actually i've somewhat secured a this little bit hush-hush, but I've somewhat secured a deal to start working on some. This is a public podcast, just to make sure. Yeah, no, no, no. Everything I'm saying, it can be said in public, but I'm going to be, people are going to start noticing some commits coming from places that are going to be improving various things related to freestanding and related to embedded development that haven't quite been done before. And I've been talking big game about,
Starting point is 01:00:29 I can write a vector in two weeks and stuff like that. I think people are going to start seeing the fruits of that appearing in places that they can actually publicly access and very soon. But I can't say more. It's all hush-hush. But you're going to start seeing some serious improvements and embedded developers are going to start seeing things that that people um like me and other people are taking their concerns seriously and that you know all the
Starting point is 01:00:53 the hooting and hollering they've been doing uh has not been in vain um and so you know again you you heard it here first so you know make sure you listen to CP Casting and get the exclusive deets only here with Rob and Jason. Alright, well I think that's a great note to end it on. Thanks so much for coming on again today, Jean-Huid. Absolutely my pleasure. That was great, Austin, thank you. Thanks so much for listening in as we
Starting point is 01:01:17 chat about C++. We'd love to hear what you think of the podcast. Please let us know if we're discussing the stuff you're interested in or if you have a suggestion for a topic, we'd love to hear about that too. You can email all your thoughts to feedback at cppcast.com. We'd also appreciate if you can like CppCast on Facebook and follow CppCast on Twitter. You can also follow me at Rob W. Irving and Jason at Lefticus on Twitter. We'd also like to thank all our patrons who help support the show through Patreon. If you'd like to support all our patrons who help support the show through Patreon.
Starting point is 01:01:45 If you'd like to support us on Patreon, you can do so at patreon.com slash cppcast. And of course, you can find all that info and the show notes on the podcast website at cppcast.com. Theme music for this episode is provided by podcastthemes.com.

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