CppCast - Rapperswil Trip Report

Episode Date: June 15, 2018

Rob and Jason discuss the Rapperswil trip report and other C++ news. News What's next for Visual Studio Visual Studio Roadmap Build the future of the web with WebAssembly and more (Google I/O... '18) WebAssembly Physics and DOM objects "Core Coroutines" proposal Microsoft Buys GitHub: The Linux Foundation's Reaction Links @robwirving @lefticus Sponsors Backtrace Patreon CppCast Patreon Listener Survey CppCast Listener Survey

Transcript
Discussion (0)
Starting point is 00:00:00 Episode 154 of CppCast recorded June 11th, 2018. In this episode, Jason and I discuss some Visual Studio and WebAssembly news. Then we talk about the Wrappersville ISO C++ developers. I'm your host, Rob Irving. Joined by my co-host, Jason Turner. Jason, how are you doing today? I am all right, Rob. You know, we keep saying the only podcast for cds plus developers are we just going to leave that in there indefinitely i think you know we
Starting point is 00:01:32 talked to john and phil and they they said that they'll they're fine with us sticking with it and they'll call yeah they will the other only podcast or something like that yeah right yeah we could say the original or the favorite or oh that's a little mean to call ourselves the favorite i think that's meaner than saying the only yeah we'll have to think more about changing it to the original that might work yeah yeah well whatever yeah well at the top of our episode i'd like to read a piece of feedback uh this week we got a tweet from todd saying nice episode on vc package interested in doing an episode on spack pm and you know we've talked about vc package a couple times obviously last week's episode on it and we've talked about conan several times i have not heard of SPAC. Have you, Jason?
Starting point is 00:02:25 I have not heard of SPAC at all. And in fact, I am attempting to look it up right now. Their website is SPAC.io. Okay. It says it's a flexible package manager that supports multiple versions, configurations, platforms, and compilers. Python, R, C, C++, or Fortran. Oh, it's not just C++ Oh, interesting, okay
Starting point is 00:02:48 Yeah, that is interesting Yeah, we'll have to look into this one a little bit more and maybe we will try to get them on the show Yeah, could be interesting Well, we'd love to hear your thoughts about the show as well You can always reach out to us on Facebook, Twitter twitter or email us at feedback at cpcast.com and don't forget to leave us a review on itunes so uh we were going to have a guest on today who was at the rapper swill iso c++ meeting unfortunately uh he was feeling a little under the weather and couldn't make it.
Starting point is 00:03:27 But we wanted to make sure we got an episode this week. So we have a couple of news articles to discuss, but we also have this very thorough trip report on Reddit, C++, from Bryce Lallback and also Nevin Lieber, I think, worked on this. And a third person who I don't recognize. Uh, so yeah, we will go over some news and, uh, we'll talk about this report. I'm sorry. We don't have a guest who is there to talk about it with us, but, uh, yeah, it should be an interesting conversation. I hope. And we'll see what happens.
Starting point is 00:03:59 It might be a little bit short episodes. We'll just have to fill it with random things like I am right now. Okay. be a little bit short episodes we'll just have to fill it with random things like i am right now okay well uh the first thing i have is uh a post on the visual studio blog and uh there's not too much meat in this article but it's basically saying the next visual studio version will be visual studio 2019 uh which makes sense i think we would have heard about it by now if they were going to do a 2018 release. So yeah, the next big version will probably be like summer or fall next year. They're not putting down an actual date yet. They're not really saying a whole lot about the release in general. Although the one thing that i found to be really interesting was they linked to this other website where you can see on the visual studio roadmap and currently the roadmap is just
Starting point is 00:04:54 referencing uh you know 2018 q2 and q3 which will still be the 2017 release. But I wasn't aware that they gave us this much information ahead of time before. And just to highlight some of the things that are in this roadmap for the rest of this year, 2018 Q3, for C++, they have one feature labeled See Just My Code in the debugger in C++, and Use Step Back in the debugger in C++, and use step back in the debugger for C++. So the step back part, I'm not sure if that's like full reverse debugging
Starting point is 00:05:32 or if it's just, I don't know, kind of a lighter version of that, but it sounds cool. Yeah, I'm not sure about either one of those, but I think I saw something, like i think i saw some preview of this step backward in the debugger reverse debugging stuff for c++ in a recently released but i could be misremembering something also well that one says q3 so i don't think it would be out yet unless you were looking at a preview yeah i might have been looking at a preview of the next release of visual studio you know it's interesting, this upcoming Visual Studio 2019,
Starting point is 00:06:09 in a way, like, I don't know how to say this without sounding like I'm trying to be rude or anything, but in a way, I don't care, but I will clarify, and that is because they have been making such good updates to 2017. Every quarter, we're getting significant updates to the c++ stuff in my mind that could have just continued indefinitely like why do why do we need a whole new visual studio release but you know they have their plans yeah i also wanted to point out that they say on here that like you might start noticing all of the commits that we're doing to github leading up to this release, basically.
Starting point is 00:06:46 Yeah, so in addition to just looking at that roadmap, you can actually just stalk them on GitHub and see what they're up to, which is kind of cool. Yeah. So the next thing I have, and this was like a month ago, actually, but it just was reposted on SQL subreddit. And I saw it. And this is from Google IO, which had their conference last year. And I've never been to IO. But I'd imagine most of the content at IO is kind of focused on Android and focused on
Starting point is 00:07:19 web development, JavaScript and stuff like that. But they did a session called Build the Future of the Web with WebAssembly. And I thought it was a really great session. We talked about WebAssembly a while back with JF Bastion. And Google is highlighting kind of the current state of WebAssembly. And they showed some demos of actual companies making products on the web using WebAssembly which I thought was really cool and these are like real deal applications like AutoCAD which has been a really powerful desktop application for years has you know ported the app onto web assembly and they had a really interesting story because they talked about how they had kind of tried doing a web
Starting point is 00:08:12 version of autocad a couple times and they like first tried it with flash and that didn't really go too far and and then they tried making like a you know full port in pure JavaScript. And they kind of got a basic viewer and realized, hey, we're going to have to rewrite a ton of code from C++ to JavaScript if we want to do this. And it's going to take forever and be really unperformant. So now they have WebAssembly. And it's a really great story. And the application looks fantastic. I've heard that WebAssembly is like just maybe 20...
Starting point is 00:08:50 No, what's the word I'm looking for? It's like 75% the speed of native or something like that. It's pretty darn close to native or better than that. For a web application, that's huge compared to JavaScript performance out of math. Yeah, well, yeah. Although the JavaScript interpreters these days And for a web application, that's huge compared to JavaScript performance out of Amazon. Yeah, although the JavaScript interpreters these days are just insane. I mean, we've had other guests on that have talked about this, like how WebAssembly or Asm.js and taking advantage of the optimizing compiler that C++ has and just being able to execute much more dense code as itself, much faster than native JavaScript in many cases.
Starting point is 00:09:30 Yeah. And I thought it was really interesting how the other application they showed was able to mix WebAssembly with JavaScript. I think they said some parts of their ui was react js i'm not too familiar with that but i guess i hear a lot on twitter um but it was react jsu i and then you had like i think it was a like a design tool and then you had a work surface which was all in web assembly and that wasn't even like a port of an application that was a completely new application that they or maybe it was it was a port of a mac
Starting point is 00:10:10 application but but anyway it was uh another really impressive piece of work with web assembly it's an interesting world we're entering into here yeah and if you're interested in learning a little more obviously i recommend watching the talk but they also put out this link to where you can see a kind of quick demo of WebAssembly in action with this hourglass thing that's, I guess, using actual physics to calculate the, you know, granules of sand going down the hourglass. It was kind of cool. Huh. Yeah, that is pretty neat yeah okay next one um and this was posted a couple days ago i'm not sure if this was i guess it was presented at uh rapper's will but this is a paper called corco routines i didn't really see this referenced in
Starting point is 00:11:01 the um the mainstream report paper we're going to discuss have you uh no i don't think so yeah but anyway the this paper is titled core coroutines making coroutines simpler faster and more general and you know i i'm not sure how i feel about this one i mean coroutines they're supposed to make it into C++20. And I guess this paper is trying to change the syntax and change a couple things about how coroutines would work. I'll be honest, I don't like their alternative syntax. You don't like the arrow operators everywhere kind of thing? Yeah, so they're saying instead of co-await it would replace it with
Starting point is 00:11:46 uh square back square brackets with an arrow in it and i don't know i like i wish it was just a wait but i like co-await more than these brackets i think well yeah and a wait they risk that being too conflicting with existing code co-await will probably conflict with some existing code. Spelling it this, as they put it, spelling it this way with this operator, yeah, it probably has very little overlap with existing things. And it's like, it's weird to see this operator overload
Starting point is 00:12:19 and partially down halfway through the paper. So that's like operator open square bracket less than minus closed square bracket you're like yeah but i don't know i i haven't spent any time with co-routines yet to feel like i have an opinion strongly on this but i know we've heard bjarne say in the past that like anytime a new feature gets added to the language people want the syntax to be really verbose because it's a new thing and then after a couple of years of using it everyone's looking away for a way to have the the syntax more terse so it's an interesting at least let's you know the idea of can we jump out of the gate with this more terse syntax. And, I mean, we see this happening with concepts over and over again, too. Yeah.
Starting point is 00:13:10 I don't know. I just feel like I'm fine with Co-O-Weight. I haven't used it much, so I wouldn't say I have a strong opinion. But, I don't know. I just like a simple keyword more than these extra characters. I don't know. Well, okay, let's clarify. You say you haven't used it much.
Starting point is 00:13:31 No. Have you used coroutines? No. I mean, I'm familiar with the await syntax from other languages, and maybe that's why I also like co-await, because it's more familiar to me from seeing it in other languages. Right. Which is maybe a reason to stick with that
Starting point is 00:13:47 so that someone coming from another language like c sharp and c++ would kind of recognize the keyword that kind of functions the same way yeah but this does have an interesting kind of syntax it's like oh well this thing yields a value to this thing which yields a value to this thing, which yields a value to this thing. I mean, it kind of looks like a thing. Okay, next one. And this is not really C++ related, but it's kind of interesting in general to most programmers, I think. I saw a lot of people talking about it on the internet last week. Microsoft bought GitHub.
Starting point is 00:14:24 Yes. Yeah. a lot of people talking about it on the internet last week um microsoft bought github yes yeah um and the article i have here is actually uh the linux foundation's response to that news and i i know there there seemed to be some people who were kind of freaking out over microsoft buying github i saw there was some news about you know git lab and alternative getting a lot of traffic of people moving their repositories and i actually use git lab too and it's a perfectly good tool but i think the people who are freaking out are uh and wanting to move from github to gitLab are jumping the gun a little bit. I don't really think that's necessary.
Starting point is 00:15:08 And it seems that the Linux Foundation is basically saying that they agree, that they think this is a good move and they're not really worried about Microsoft doing anything bad with people's source code or anything like that. And I feel like a little bit of competition is never bad. So in a way, this is,
Starting point is 00:15:26 for the people who are jumping ship to GitLab or to other services, at least it's giving a shot in the arm to the other services, which will help them compete a little bit more and keep everyone on their toes. Yeah, absolutely. But yeah. Yeah, I think Microsoft has good intentions. I mean, they've done so much open source work
Starting point is 00:15:44 over the past few years you know if this happened like 10 years ago people might be more uh valid in their concern but uh microsoft has i think earned a lot of goodwill from the open source community lately yeah a lot of their projects are like typescript almost completely open source i believe and yeah yeah okay so uh we want to talk more about the wrapper swill iso c++ meeting as we said obviously we weren't there but uh we have a nice trip report to look at and it looks like the biggest uh new item that happened last week was contracts made it into the c++20 draft? Yeah, that's fascinating to me because I thought from the last hypothetical roadmap
Starting point is 00:16:31 that we saw that we didn't expect contracts to necessarily end up until 23, or at least I thought it said that 20 was an optimistic goal and 23 was the realistic goal. Maybe I'm reading, I remembering that backward, but either way it's in. Yeah.
Starting point is 00:16:50 And I'm actually interesting. The paper that was linked to hasn't been updated since 2016. Yeah, that is interesting. I wonder what changed to get it in if the paper is the same. Maybe it was just enough community consensus that it was necessary. So have you spent any time looking at contracts?
Starting point is 00:17:09 I did spend some time looking at the paper. I'm not sure if it's something I'm going to use, but it certainly looks like it would be very helpful for library developers. I became convinced to train... my schedule's been busy. The last training that I did, the students there,
Starting point is 00:17:34 very concerned about code quality and security of code. And it seems they would be very interested in this and as i uh started thinking about it and talking about it with them like i became convinced that this is probably the main thing that's going to affect real c plus like i say real c plus plus developers the you know nominative c plus plus developer around the world because you can can specify, like, okay, this function expects a value that's less than two, and at the end of it, it guarantees, let's see, expects, what's the other keyword?
Starting point is 00:18:17 Ensures that whatever the state is of something will still be true at the end. And these, you know, it's going to be up to the compilers, I think, to what the various different ways are that they can be compiled and enforcement for them. There we go, three levels of contracts, default, audit, and axiom. But it may or may not add runtime overhead, and I don't know. I think it's a good add-in to the language, personally.
Starting point is 00:18:44 I'm glad to see that we've got it in. What is that default axiom in audit? Okay, so that's whether there's runtime checking or audit means this check is expensive. Do you know more about that? I do not. Okay. But you can control what is checked
Starting point is 00:19:02 and what is done in response to a violation. Yeah, so if I remember correctly here... Oh, it's saying... Yeah, go ahead. Go ahead. It's saying, default, the cost of runtime checking is assumed to be small, or at least not expensive. Audit, a check that is more comprehensive than default,
Starting point is 00:19:21 the cost of runtime checking is assumed to be large compared to executing the function. And axiom is a formal comment for humans and static analyzers. There's no runtime cost because the predicate is not evaluated at runtime. And then when you compile, you have three different options. You can say that your contracts are off, so it adds no runtime overhead at all. Default says the contracts are checked, and audit says default and audit contracts are checked. Okay, so maybe something you might want to do
Starting point is 00:19:54 is have a debug version where you're going to have all your checks in place and hope that your QA team would run into anything. Right, yeah, so default would build an audit mode saying all checks are executed regardless of the cost, and then your release build might be built in default mode that says only the non-expensive ones are checked at runtime. Or if you had, like, you know like you know you're saying no i need super
Starting point is 00:20:26 performance but i need to make sure that my ci does the right thing then your continuous integration build in default mode and then in your release build with them disabled or something like that but either way it's more code documentation and hypothetically information that the compiler can optimize around okay right i mean hypothetically i don't believe that's any kind of a guarantee in here but if you say in my contract this value is never going to be greater than four or less than zero then perhaps the compiler could emit different code in those cases right right hypothetically and correct me if i'm wrong but it looks like if any of these conditions are not met you just get an immediate program termination it should be the same as an assert i believe okay okay let's see uh you can do uh you can
Starting point is 00:21:21 also have a violation handler it looks like i like. I definitely need to spend more time looking at this. But more ways to document our code and more ways to put guarantees about what our code is doing. I'm cool with that. Definitely a good thing. Okay, next. The next item is standard library concepts. So I guess we already have concepts going in for C++20. So this paper
Starting point is 00:21:48 is to make sure the standard library is implemented with them. Yeah, that sounds right. Because I know concepts had to be done in multiple stages, they had to get approved first, and then the standard library had to be applied to them. And then when then they're going to talk about more terse syntax and those kinds of things right and we're still waiting to see if any of the terse or syntaxes go in or not i believe yeah at this point i think i'll be surprised if that makes it into c++ 20 but who knows okay uh did you read about this one much? The class non-type template parameters? Ah, that is at the top of my to-do list to make sure I fully understand what's going on in here. But I mean, currently a template parameter can be, um, uh, any primitive thing. It can be a bool, an int or a size T or whatever, um, or a type. And I believe the main point of this is just to extend it so that instead of just primitive things it can be anything that meets certain requirements here
Starting point is 00:22:52 must be equality comparable which relies on our spaceship operator must have us basically a spaceship operator let's see all of their bases and non-static data members recursively have a non-user-provided operator spaceship returning a type that is implicitly convertible and contain no references. Yeah. Okay. I wanted to interrupt this discussion for just a moment
Starting point is 00:23:19 to bring you a word from our sponsors. Backtrace is a debugging platform that improves software quality, reliability, and support by bringing deep introspection and automation throughout the software error lifecycle. Spend less time debugging and reduce your mean time to resolution by using the first and only platform to combine symbolic debugging, error aggregation, and state analysis. At the time of error, Backtrace jumps into action, capturing detailed dumps of application and environmental state. Backtrace then performs automated analysis on process memory and executable code to classify errors and highlight important signals such as heap corruption, malware, and much more.
Starting point is 00:23:54 This data is aggregated and archived in a centralized object store, providing your team a single system to investigate errors across your environments. Join industry leaders like Fastly, Message Systems, and AppNexus that use Bactrace to modernize across your environments. Join industry leaders like Fastly, Message Systems, and AppNexus that use Backtrace to modernize their debugging infrastructure. It's free to try, minutes to set up, fully featured with no commitment necessary. Check them out at backtrace.io.cppcast. Okay, and the next one that they're adding to C++20 is going to be feature test macros. And, yeah.
Starting point is 00:24:25 I want that. Yeah, so this is just going to be you can add some macro to say, you know, I have SFINAE or something like that. So if you want to block off some code to use SFINAE or use some other, like, older piece of code, then you can do that. And this is another one, which seems like it'd be great for a library developers who've been waiting to move their users to a new version.
Starting point is 00:24:52 Now you could just use macros and then start moving your code forward. Right? Yeah. And GCC and clang have supported this pre standardization of it for a while. So in Chai script, like I wrote some code that was like, well, if, um, uh, standardization of it for a while so in chai script like i wrote some code that was like well if um uh deduction guides are supported then do this otherwise do this old thing
Starting point is 00:25:12 basically right and actually that's not quite right but whatever close enough um for the sake of this discussion it's close enough and uh i i go to test the code and it's not compiling on visual studio and i cannot figure out why not and then i have to go and research and visual studio was not going to officially support it until it was in the standard so in visual studio i had to do something that's like if visual studio and the compiler version is greater than this, then do this, otherwise test the feature macro. So, yes, I am happy to see the feature testing macros be official now. It does come up in the real code.
Starting point is 00:25:55 Yeah, it's one of those ones that I'm surprised wasn't in there earlier. I don't know what the holdup was, honestly, on it, but I'm glad to see that it made it through. Yeah. Okay, conditional explicit uh i'm not sure if i understand this one do you understand this one jason i do okay i think understand it yes all right um i'm going to double check yeah that's what i thought
Starting point is 00:26:22 okay so right now a function can be conditionally noexcept. Okay, you can say noexcept at the end of the function declaration and put in parens some compile time constant expression that would determine whether or not that function should be noexcept. With conditional explicit up at the front of like your conversion operator or your single parameter constructor or whatever you can say explicit as most things should be explicit that are that are otherwise add an implicit conversion and have in there some boolean condition that checks at compile time whether or not that explicit is true there i honestly i don't know why it's necessary because i don't know why like i don't fully understand why some things are conditionally explicit in the standard currently and you can find them in pair tuple and variant and optional specifically. All of those types have conditionally explicit constructors. But I don't see the reason for it.
Starting point is 00:27:32 I don't see the reason for conditionally explicit. I'm just like, make everything explicit. Explicit should be our default. I'm tired of implicit conversions. And it's another syntax thing for me to have to teach. Yeah. Okay. versions and it's another syntax thing for me to have to teach yeah okay uh so we have a couple other things that are added these ones seems like there might not be as much to talk about um oh come on the next one's awesome okay virtual calls and constant expressions yes virtual calls and constant expressions
Starting point is 00:28:03 virtual functions can be constexpr now. Oh yeah. That is awesome. This is, this is fascinating. I'm, I, I've thought for a long time that final methods should be constexpr because you have,
Starting point is 00:28:18 I mean, it's impossible for the thing to go past that point. So why not at least allow the final to be constexpr but now we can do things with like hypothetically runtime dispatch that happens at compile time and a constexpr context based on what the type of the object pointer was that was passed to the thing um i mean you know i'm all in favor of more constexpr things yes this is leading you closer to constexpr all the things oh it is very close at this point yeah yeah okay yes the next ones now i'm not sure where we're going with the rest of it yeah so atomic ref i didn't read too much into that one uh shift left and shift right algorithms um i think I briefly looked at that one and it's kind of doing the same thing as move and move backward
Starting point is 00:29:12 in simpler syntax. Yeah, okay. Yeah. They're removing some facilities that were deprecated in C++17. What are these? Ispow2, some facilities that were deprecated in C++17. What are these? IsPow2, Seal2, Floor2? I believe those are binary versions of these things. Oh, okay.
Starting point is 00:29:37 Yeah, well, integral powers of two. It's all things that are powers of two. And I read a comment on those here in this Reddit discussion about like, oh, I'm so glad to see POW2, SEAL2, and FLOR2 because anyone who does X has to reimplement these every time. And I'm like, I've never seen these functions before. I have no idea what their utility is, but I'll take your word for it. There is one, bitcast. Okay. okay so reinterpret cast not a hundred percent of the time but nearly a hundred percent of the time is used incorrectly in a way that invokes undefined behavior technically okay bit cast
Starting point is 00:30:15 is a defined way of doing these things i have a blob of data i want to cast it to some other type let the compiler do the most efficient thing that it knows that it can do in a not ub way that's awesome because currently to get around this we have to do things like mem copy from a data stream into a struct which is almost certainly going to be optimized away by the compiler but in this way yeah this should be good okay and jf is the author of it yeah i i feel like i remember talking about big cast earlier with uh maybe not with jf but talking about one of his articles earlier that sounds really familiar to me now yeah okay so now he's kind of in this trip report going over individual uh progress made in the different working groups so one of the things i wanted to highlight
Starting point is 00:31:08 was the uh executors okay um they you know i think you know we're talking about the optimistic versus conservative estimate i think it was definitely being put into C++23 as the conservative estimate last trip report. But they're now saying it is at least going to make it into a TS in C++20 and could quite potentially make it into C++ 20, the standard, the IS, because they're going to have an additional meeting to try and kind of hash out the remaining issues with executors, right? That's what it seems. I mean, and that's a big deal because we need executors to get networking.
Starting point is 00:32:04 Right, right. There's, I think, a that's a big deal because we need executors to get networking. Right, right. There's, I think, a whole bunch of other features that are kind of dependent on getting executors in. Yeah, executors and the updates to the, excuse me, networking and the updates to futures for sure. Right, right. And a better future or something, yeah. People did a lot of puns around the updates to futures,
Starting point is 00:32:24 and I'm terrible at them so yeah i i hope this additional meeting they're going to have goes well because if we get executors into c++ 20 then that kind of will hopefully push up the schedule for everything else like networking yeah now um the sad note for a lot of people paying attention to this is contracts excuse me not contracts concepts concepts okay you know what yeah we i need to take two steps back okay i mean to say modules both of those times modules modules is the thing that everyone wants but is nervously optimistic about, right? We already talked about concepts. Concepts are in. We already talked about contracts. Contracts are in.
Starting point is 00:33:10 I don't know why I said those things. Ranges are in, it looks like, because they rely on concepts. So that's good. Modules. Right now, it's saying to expect TSV2 and c++ 20 not yet necessarily being accepted into c++ 20 but that's the conservative estimate the tsv2 they're optimistics still set for c++ 20 and yeah we we said there's going to be an executor's meeting there's i'm not sure if it's the same meeting but they're they're also going to have a special meeting
Starting point is 00:33:46 just on modules. Okay. Yeah. So, yeah, 2018 fall EWG modules meeting and 2018 fall LEWG SG1 executors meeting. So, you know, the committee members who are willing to go to an extra meeting to try to hash out these features
Starting point is 00:34:05 and get them right for C++20 deserve a lot of credit. I'm glad they're doing it. Yeah, that's pretty interesting. That's, yeah, cramming in two more meetings. Maybe they'll let people call in. I don't think the average listener appreciates just how much traveling the average committee member does yeah i mean assume like a week and a half to two weeks for each committee meeting because you have to deal with jet lag and whatever and they're a full week long and there's what four of them every year so you're traveling for at least six weeks out of the year just for committee meetings. And if you're on the committee, you're probably traveling and going to conferences
Starting point is 00:34:51 and other things as well. Yeah. I mean, just as like, uh, take someone like Chandler for committee meetings, plus all of the clang and LLV meetings plus the conferences cpp con and other c++ conferences sure yeah it's a really truly a lot of traveling and they do all that traveling and then they just sit in meeting rooms all day yeah pretty much yeah um so yeah that's modules and executors uh what else do we want to talk about? The tooling study group had another meeting. This is their second meeting ever. And it says they had representatives from most of the major C++ package managers.
Starting point is 00:35:37 Obviously, we talked to Robert from VC Package last week. He was there, but I believe someone conan must have been there as well and they put out um two papers uh c++ dependency management package package consumption versus development and i read that paper a little bit and it sounds like they're basically recognizing that other languages kind of have learned a lot with their package managers and are kind of starting to do smarter, more innovative things. And if C++ is going to have a good package management story, we should try to learn from what these other languages are doing and get it right if we're going to be standardizing something.
Starting point is 00:36:19 That sounds reasonable. Yeah. And there's another paper on modules modules macros and build systems so i'm glad that they're uh starting to discuss how modules might work with package managers um i guess we should talk about the 2d graphics proposal since we talked about that a bit last time uh on our last trip report so they you know as we talked about last time it seems like the 2d graph proposal got kind of got hung up um and i've been going along for years chugging along and suddenly got met with some opposition um with this committee meeting, there was an actual like alternative graphics proposal paper written.
Starting point is 00:37:09 And the alternative proposal is basically kind of for the most part saying we should just stop working on this. Right? Yeah, that's what it seemed. Yeah. Um, so it sounds like they, they did a vote on whether they should go with this alternative proposal or continue to work on the graphics proposal and that vote, it sounds like it was kind of split. Yeah. Go ahead.
Starting point is 00:37:37 No, no. Yeah. So, I mean, with the vote being split, it sounds like as of now, we're,
Starting point is 00:37:42 we're still going to be in limbo with this graphic proposal. You know, some people might continue working on it, but it's not advancing towards the technical specification and definitely not towards the international standard. Yeah, it seems to have just effort just to go to these committee meetings, but it's even more effort to be writing these papers and working on these libraries. really feel bad about all the time that several people have spent on this but i i can't disagree with everything that was being said in that alternative paper did you read through that one i did not know yeah so it kind of highlighted um the reasons why um this particular graphics proposal didn't really make sense. It kind of didn't meet some of the original requirements that were stated for having graphics in the C++ standard. And on top of that, it kind of highlighted that
Starting point is 00:38:57 maybe this issue is really about package management. If we had better package management, then we wouldn't care to have a built-in graphics library and uh and yeah i think everything they said was absolutely true they they did outline an actual alternative um proposal to um create this small library to place things on the screen because apparently the actual graphics proposal you know you need to work with i guess like drawing lines and triangles um what they were saying is it should be better if it would be better if it could you know load up assets and draw those that might be more useful to uh developers and such. Yeah. Yeah.
Starting point is 00:39:47 I don't know if you noticed, but Guy Davidson did also publish his own trip report with his direct experience about this. Yeah. I read through some of that. What was your take on that? Well, it seemed very disappointing to him, which is understandable.
Starting point is 00:40:01 He put a lot of work into it. But then he did have this little note here. He says several thousand hours of work had gone into the proposal. We need a way of preventing this from happening again. Sentiment transformed from strong long-term support in Toronto to ambivalence in Jacksonville, and then basically an end here in Rville yeah and i'm curious how it got so far without meeting this kind of pushback earlier i mean has the concept of package management just become more discussed lately and that made everyone think hey maybe that's a real problem maybe we shouldn't be shoving all this into the standard i don't know honestly that doesn't seem like it should be that much of a new thought. I don't know. Yeah. I don't know. And, you know, it could just be opponents who were choosing to speak up now
Starting point is 00:40:56 who didn't before or something. I honestly don't know. And having not been to any of the meetings, I don't really know how these things really go down and i'm sure we can read all the all of this trip reports that have ever been written and and still not really know what it feels like to be there during the conversation of these things yeah i'm kind of curious as to whether did this particular paper like was it brought up in some context every single meeting or did they kind of go off for a year or two and work on their own without going back to the committee for feedback yeah and i have no idea yeah uh okay is there anything else that i i missed jason that we want to talk about um just one quick comment that bry trip report says, plus a variety of fixes too long
Starting point is 00:41:48 to list here. I really want to know what that variety of fixes is. I tried to find more information and could not. I don't know if I'm going to have to go look at individual papers, but there was a bunch of like tiny more updates to constexpr in the context of standard algorithms uh basically specifically standard swap is not constexpr and therefore none of the algorithms that rely on it such as standard sort can be constexpr so uh one of the fixes that i was expecting to see come through in this was making swap constexpr and therefore the cascade of the rest of the standard algorithms
Starting point is 00:42:31 that don't require any dynamic allocations being constexpr that's something i'd really like to see i currently have some hacks in my code that do compile time constexpr uh um sorting without using the standard sort and i would like to you know be able to get away from that kind of thing and see that in c++ 20 but i i don't see any updates on that particular paper okay one more uh study group trip report that i thought was interesting was uh the undefined behavior study group uh who said they adopted a policy that not all undefined behavior has to be preserved from one version of c++ to the other and i thought that was really interesting you would have thought that the they would have already had a goal of reducing undefined behavior but now they they're, I guess, explicitly saying, yeah, we don't, we don't feel any need to preserve UB. Yeah. And there's, you know, people that argue that we don't want to get rid of all the undefined behavior because a lot of this is where the compiler is able to
Starting point is 00:43:37 operate and do things that we like it doing in the realm of undefined behavior. Um, I don't feel like I'm well-in informed enough to have a strong opinion in either direction on that. But I do know that technically, undefined behavior is not allowed in a constexpr context. So the more work that you do at compile time, hypothetically, the less undefined. Yeah. Although that exact definition, others are quick to point out, is highly dependent on the compiler, like what things it is going to actually fail to compile because they're potentially undefined behavior. And like I just tested this myself, like signed integer overflow does not exist in C++. That is undefined behavior. So I wrote some constexpr code that does sign integer overflow
Starting point is 00:44:25 just to see if it would compile and it totally does compile on every compiler that i tried in a constexpr context so it clearly doesn't check everything um but it's at least you know another thing to look at okay well i think that's everything i wanted to cover from this uh you're good yep i'm good okay well we should be back next week with another guest uh thank you everyone for listening and uh see you next week later thanks so much for listening in as we chat about c++ i'd love to hear what you think of the podcast please let me know if we're discussing the stuff you're interested in or if you have a suggestion for a topic I'd love to hear what you think of the podcast. Please let me know if we're discussing the stuff you're interested in. Or if you have a suggestion for a topic, I'd love to hear about that too. You can email all your thoughts to feedback at cppcast.com.
Starting point is 00:45:13 I'd also appreciate if you like CppCast on Facebook and follow CppCast on Twitter. You can also follow me at Rob W. Irving and Jason at Leftkiss on Twitter. 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.