WEBVTT

1
00:00:18.730 --> 00:00:21.980
<v Matt Godbolt>Good afternoon, Ben.

2
00:00:21.980 --> 00:00:23.060
<v Ben Rady>Hello.

3
00:00:23.060 --> 00:00:29.270
<v Matt Godbolt>Thus revealing to everyone the time of day that we record this. This is how we slowly leak information about our lives.

4
00:00:29.270 --> 00:00:29.360
<v Ben Rady>know

5
00:00:29.360 --> 00:00:31.160
<v Matt Godbolt>This is how we dox ourselves.

6
00:00:31.160 --> 00:00:32.600
<v Ben Rady>Right, right, right, right. Uh-huh.

7
00:00:32.600 --> 00:00:42.060
<v Matt Godbolt>But it is indeed a beautiful, glorious spring afternoon. And in a rare departure from normal, we're going to record a podcast and then I'm going to release it in a few days time.

8
00:00:42.060 --> 00:00:42.180
<v Ben Rady>Uh-huh.

9
00:00:42.180 --> 00:00:49.280
<v Matt Godbolt>So we could actually make allusions to things that are happening in the news without revealing how usually we're ahead of ourselves.

10
00:00:49.280 --> 00:00:49.800
<v Ben Rady>Oh, that's right.

11
00:00:49.800 --> 00:00:49.900
<v Matt Godbolt>We are.

12
00:00:49.900 --> 00:00:50.780
<v Ben Rady>We can. um

13
00:00:50.780 --> 00:00:53.080
<v Matt Godbolt>We have a Chicagoan Pope.

14
00:00:53.080 --> 00:00:54.280
<v Ben Rady>That's right. Chicago.

15
00:00:54.280 --> 00:00:54.420
<v Matt Godbolt>Yes.

16
00:00:54.420 --> 00:00:57.110
<v Ben Rady>We make popes. That's a shirt that I need to make.

17
00:00:57.110 --> 00:00:58.110
<v Matt Godbolt>We do. Da Pope.

18
00:00:58.110 --> 00:00:58.360
<v Ben Rady>Uh-huh.

19
00:00:58.360 --> 00:01:10.030
<v Matt Godbolt>I think that was the the Chicago Sun-Times headline was Da Pope, which will only make sense to people who are from Chicago or in America and have seen Saturday Night Live sketches.

20
00:01:10.030 --> 00:01:10.580
<v Ben Rady>Uh-huh. Yes.

21
00:01:10.580 --> 00:01:11.420
<v Ben Rady>Yeah.

22
00:01:11.420 --> 00:01:12.100
<v Matt Godbolt>Right.

23
00:01:12.100 --> 00:01:17.100
<v Ben Rady>Yeah. You definitely don't have to be from Chicago to get that, but you have have to have seen the Saturday Night Live sketch.

24
00:01:17.100 --> 00:01:17.120
<v Matt Godbolt>but More into

25
00:01:17.120 --> 00:01:24.660
<v Matt Godbolt>Right, as I mean, like no one in like my native side of the Atlantic will really know what the heck we're doing with that.

26
00:01:24.660 --> 00:01:25.020
<v Ben Rady>Mm-hmm.

27
00:01:25.020 --> 00:01:25.380
<v Ben Rady>Nope.

28
00:01:25.380 --> 00:01:27.240
<v Ben Rady>When do they ever though is the question.

29
00:01:27.240 --> 00:01:32.600
<v Matt Godbolt>Oh, ow. What passes for comedy in this country?

30
00:01:32.600 --> 00:01:34.380
<v Ben Rady>It's terrible. It's like that.

31
00:01:34.380 --> 00:01:34.720
<v Matt Godbolt>ah

32
00:01:34.720 --> 00:01:36.050
<v Ben Rady>You mean that joke I just made?

33
00:01:36.050 --> 00:01:36.240
<v Matt Godbolt>Yeah.

34
00:01:36.240 --> 00:01:36.420
<v Ben Rady>Yeah.

35
00:01:36.420 --> 00:01:43.920
<v Matt Godbolt>yeah Yeah. You mean "American makes slightly xenophobic gag?" Yes, that checks out.

36
00:01:43.920 --> 00:01:44.940
<v Ben Rady>Yes. Yeah.

37
00:01:44.940 --> 00:01:49.230
<v Matt Godbolt>ah Oh, this is not the direction we went to take this at all.

38
00:01:49.230 --> 00:01:51.620
<v Ben Rady>That's great.

39
00:01:51.620 --> 00:01:56.300
<v Matt Godbolt>Anyway, it's it's ah it's nice to see you, my friend. It's been a little while.

40
00:01:56.300 --> 00:02:02.560
<v Matt Godbolt>um At least, you know, we we saw each other socially not all that long ago, but across a long table with lots of other people there.

41
00:02:02.560 --> 00:02:02.620
<v Ben Rady>Yeah, it has

42
00:02:02.620 --> 00:02:04.290
<v Matt Godbolt>So we haven't had a chance to hang out.

43
00:02:04.290 --> 00:02:05.580
<v Ben Rady>Mm hmm.

44
00:02:05.580 --> 00:02:23.330
<v Matt Godbolt>um But we we thought we'd take advantage, as I recall, of ah the fact that this is a timely podcast and actually talk about something which is timely. ah Which is a whole thing that blew up on the the HackerNewses and the the Reddits of like some old talk of mine.

45
00:02:23.330 --> 00:02:24.700
<v Ben Rady>Mm hmm.

46
00:02:24.700 --> 00:02:45.490
<v Matt Godbolt>And we should use it as a ah a topic of discussion because I think it it'll have some interesting, um you'll have an interesting take on it, I think. so So the talk that I gave was a few years ago and it was it was my first, I think, non-Compiler Explorer/performance sensitive talk.

47
00:02:45.490 --> 00:02:45.600
<v Ben Rady>Yeah, okay

48
00:02:45.600 --> 00:03:00.980
<v Matt Godbolt>It was just me saying, hey, I've been doing C++ a while and what I'm really, really bad at is ah programming. And so these are the safety nets that I make for myself. ah So in order to ah ah deal with my own ineptitude, I will do these things.

49
00:03:00.980 --> 00:03:22.140
<v Matt Godbolt>And they were like, you know, best practices, essentially best practices, you know, like don't just use numbers, use types that wrap numbers and don't wrap them in the trivial way, because often that has unintended side effects and all these things, right? And effectively, all of them are amount to: C++ has some really powerful but wrong defaults that it kind of inherited mostly from C.

50
00:03:22.140 --> 00:03:22.580
<v Ben Rady>Uh-huh. Uh-huh.

51
00:03:22.580 --> 00:03:36.940
<v Matt Godbolt>And if you go out of your way to write code _this way_, then you can kind of mostly negate the bad decisions that were made. And that's, I think, how most C++ programmers survive is they ignore large swathes of the language and kind of go, let's just not do it that way.

52
00:03:36.940 --> 00:04:09.970
<v Matt Godbolt>And we turn on all the warnings and the errors for things that you use that are anachronistic and say, just don't do it that way. um The blog post that somebody wrote on the back of this, which was something like "how Matt Godbolt convinced me to move to rust", which was absolutely not the intention, but the the thesis was, this is just a reinforcement that C++ is a language full of anachronistic bad things. And if you have to go this far out of your way to do it the right way, why not just use a language where the defaults are right?

53
00:04:09.970 --> 00:04:10.540
<v Ben Rady>Mm-hmm.

54
00:04:10.540 --> 00:04:14.020
<v Matt Godbolt>And so, first of all, that was not the intention of that talk.

55
00:04:14.020 --> 00:04:14.720
<v Ben Rady>Yeah.

56
00:04:14.720 --> 00:04:25.450
<v Matt Godbolt>And second of all, yeah, i don't know how well I don't know what to feel about that. It was it was an interesting moment. So what um what what are you what are your thoughts on like the you yeah this whole thing?

57
00:04:25.450 --> 00:04:25.520
<v Ben Rady>Mm-hmm.

58
00:04:25.520 --> 00:04:28.300
<v Matt Godbolt>Obviously, you don't program in either Rust, really, or C++ but you...

59
00:04:28.300 --> 00:04:42.320
<v Ben Rady>No, I mean, I i have, but I i ah don't on a regular basis. But I think this is like the classic example of um as an artist, when you create something, you have no control over what your how your audience is going to interpret that.

60
00:04:42.320 --> 00:04:43.180
<v Matt Godbolt>Ha ha ha ha.

61
00:04:43.180 --> 00:05:02.280
<v Ben Rady>And I think ah one of the side effects of putting something on the internet is that people are going to what you would say misinterpret, but is just internet interpret. Like they're going to consume it, they're going to process it, and then they're going to have some understanding of it.

62
00:05:02.280 --> 00:05:19.860
<v Ben Rady>And how much that aligns with what was in your brain when you created in it and what you maybe have had in your mind of like a theoretical consumer of this information that I'm creating might think these things. That's an illusion that you have as a creator of things that that happens or will ever happen or can even happen.

63
00:05:19.860 --> 00:05:20.820
<v Matt Godbolt>Very much.

64
00:05:20.820 --> 00:05:28.370
<v Ben Rady>And so, you know, it doesn't really surprise me that much. I'm sure that you could find more of these of where you're like, you clearly didn't understand what I was trying to say at all.

65
00:05:28.370 --> 00:05:28.420
<v Matt Godbolt>I'm sure.

66
00:05:28.420 --> 00:05:30.800
<v Ben Rady>And maybe that's on me and maybe that's on you.

67
00:05:30.800 --> 00:05:35.520
<v Matt Godbolt>I mean, I think this was um sort of willfully mis- differently interpreted, right?

68
00:05:35.520 --> 00:05:36.100
<v Ben Rady>Right.

69
00:05:36.100 --> 00:05:49.290
<v Matt Godbolt>You know, but it was an interesting thought, you know, like maybe that is, and you know, it's interesting you describe it as art because certainly, you know, I always think of art as some an expression that's designed to provoke or provokes an emotional reaction.

70
00:05:49.290 --> 00:05:49.500
<v Ben Rady>Right. Yeah.

71
00:05:49.500 --> 00:05:51.080
<v Matt Godbolt>And clearly it did for this person.

72
00:05:51.080 --> 00:05:52.500
<v Matt Godbolt>It was like, screw this.

73
00:05:52.500 --> 00:05:52.500
<v Ben Rady>Right.

74
00:05:52.500 --> 00:05:52.500
<v Ben Rady>Yeah. Fear.

75
00:05:52.500 --> 00:05:54.620
<v Matt Godbolt>I'm going to use a different programming language. Yeah.

76
00:05:54.620 --> 00:06:05.230
<v Ben Rady>Yes. Uh-huh. Yes. Fear with a hint of disdain. Those were the emotions that you managed to provoke in your in your observer in that instance.

77
00:06:05.230 --> 00:06:05.830
<v Matt Godbolt>in this observer. Yeah.

78
00:06:05.830 --> 00:06:06.280
<v Ben Rady>Yeah. Uh-huh.

79
00:06:06.280 --> 00:06:11.680
<v Matt Godbolt>Yeah. Have you ever had something like this before? You've, you've obviously written blog posts and things along the way and,

80
00:06:11.680 --> 00:06:32.540
<v Ben Rady>Yeah. You know, I mean, I have definitely had some things where um clearly I'm not getting the point across. And I'm always torn. And I bet you have this sort of same thing of like, there are so much there's so much nuance to this thing that I'm trying to communicate. There are so many...

81
00:06:32.540 --> 00:06:52.580
<v Ben Rady>sort of like edge-cases and interpretations. And if I try to boil this down into something that a normal person would actually take the time to read, they are almost certainly going to get it wrong. And so, ah you know, this is why I kind of like, you know, we we joke about like consultant Ben and like the acronyms and, you know, CRUFT and FIRE and all of these other kinds of things.

82
00:06:52.580 --> 00:06:52.840
<v Matt Godbolt>Yep.

83
00:06:52.840 --> 00:07:08.220
<v Ben Rady>But like, I feel like the key to these is like, you have to try to boil it down to something as simple as that and then just repeat it. Um, cause if you don't, it's just so hard to communicate like the true nuance of the thing.

84
00:07:08.220 --> 00:07:21.100
<v Ben Rady>Um, and so, you know, that's kind of like my, my hack for like trying to, to do this and do it in a way that's sane is to say, you know, can I come up with the catchy acronym for it? Because that will help it also, you know, also stick in my brain.

85
00:07:21.100 --> 00:07:24.650
<v Ben Rady>So when I'm trying to explain it to people, I'm like explaining it in a consistent way.

86
00:07:24.650 --> 00:07:25.720
<v Matt Godbolt>You can, yeah.

87
00:07:25.720 --> 00:07:36.260
<v Ben Rady>Right. Right. But also in their brain to where it's like, you know, when I say fast, I mean, tests that run hundreds of tests per second. I don't mean like, yeah, we ran our whole test suite in 10 minutes, right?

88
00:07:36.260 --> 00:07:41.980
<v Ben Rady>Like, like that, if you had hundreds of thousands of tests, that would be fast, but that's not what I'm talking about, right?

89
00:07:41.980 --> 00:07:59.540
<v Matt Godbolt>No, that's really interesting. Yeah, I'd never really kind of thought that there... obviously that's a didactic technique, right? For like, this is how I choose to present you're like, no, if I try and present something more complicated, at least to start with, then people aren't going to read, they going remember it.

90
00:07:59.540 --> 00:07:59.640
<v Ben Rady>Mm-hmm.

91
00:07:59.640 --> 00:08:11.760
<v Matt Godbolt>So I'm just going to have to drum in this simple thing. And then I've got the bedrock of understanding. And then we can have a nuanced discussion about, well, is this, what does fast really mean? in this particular context, right? But at least you remember that the F means fast.

92
00:08:11.760 --> 00:08:16.080
<v Matt Godbolt>So that's an important bit of the rest of, yeah, yeah, yeah.

93
00:08:16.080 --> 00:08:32.620
<v Ben Rady>Yeah, yeah, exactly. On the topic specifically of like Rust and C++ like, you know, I mean, my kind of, you know, very novice experiences with C++

94
00:08:32.620 --> 00:09:00.420
<v Ben Rady>have always been there are just some areas of the language that you want to stay away from. And I also and and I would be interested to hear your take on whether you think this is true. But my sort of perception of it is is that there's not like really one type of C++ programmer out there. Like you very much sort of pick which parts of the language and what parts of the tool chain either fit you as an individual or maybe fit like your company or like the problem that you're trying to solve.

95
00:09:00.420 --> 00:09:12.200
<v Ben Rady>And you pull those parts out and you use those. And then i I think there might be like a pattern of people like getting like repeating that and sort of like sort of like glomming on to like that section of it.

96
00:09:12.200 --> 00:09:21.040
<v Ben Rady>And so like, which is maybe something that is maybe less true of other languages, like you could take two people who call themselves C++ programmers and they will agree on nothing.

97
00:09:21.040 --> 00:09:37.500
<v Matt Godbolt>but is That has definitely been my lived experience, you know very much so. And certainly there is sort of nucleation point in a company where if you have one person who does C++ a certain way, you're either going to have a really hard time if you hire someone who doesn't do C++ the same way as them.

98
00:09:37.500 --> 00:09:48.090
<v Matt Godbolt>They're not going to be able to work together as well, or they're going to have to work in separate code base, or you just start hiring people who all work right that way. And it's either you know very ah functional style, very

99
00:09:48.090 --> 00:09:48.230
<v Ben Rady>Yeah.

100
00:09:48.230 --> 00:09:48.360
<v Ben Rady>yeah

101
00:09:48.360 --> 00:10:01.380
<v Matt Godbolt>template heavy, very compile time heavy. And obviously the beauty of something like C++, such as it is, is that you can consider it a continuum. Even if you are more like, I'm just writing C,

102
00:10:01.380 --> 00:10:25.020
<v Matt Godbolt>with classes, very simple classes, you can say, yeah, but every now and then I'd write, where I would like to use a macro in C, it is nicer to use a template to do the same trick. And you can borrow from opposite ends and extremes, but generally speaking, yes, there seems to be three or four kind of ways of writing C++ and ah and maybe that's not true in other languages.

103
00:10:25.020 --> 00:10:36.460
<v Matt Godbolt>I don't know. I mean, like we, we make the, the the best sort of example I can think of is, you know, like Java, you know, Java almost always seems to come across to me as very enterprise level.

104
00:10:36.460 --> 00:10:40.020
<v Matt Godbolt>Everything's a factory, you know, and we joke about these things, you know factory get a set of things, right?

105
00:10:40.020 --> 00:10:40.200
<v Ben Rady>Yeah, right.

106
00:10:40.200 --> 00:10:40.400
<v Matt Godbolt>Whatever.

107
00:10:40.400 --> 00:10:42.140
<v Ben Rady>The factory builder bean. Yeah. Uh-huh.

108
00:10:42.140 --> 00:10:42.840
<v Matt Godbolt>Yeah. Yeah.

109
00:10:42.840 --> 00:10:50.150
<v Matt Godbolt>Which obviously yeah I think Java has moved away from, and I know you're writing more Java these days than, than, than you were perhaps before.

110
00:10:50.150 --> 00:10:50.810
<v Ben Rady>Yeah.

111
00:10:50.810 --> 00:10:52.770
<v Ben Rady>Mm-hmm.

112
00:10:52.770 --> 00:11:09.310
<v Matt Godbolt>*DOG BARKS* Sorry, sorry, editing Matt, you're gonna have to edit out a dog [EDITING MATT HERE! I couldn't be bothered!]. Yeah, so ah Java has got multiple like incarnations of Java, but I think by and large, most people that I'm aware of have moved away from the very, very enterprise-y bean factory stuff into a slightly more sensible ah subset.

113
00:11:09.310 --> 00:11:10.340
<v Ben Rady>Yeah.

114
00:11:10.340 --> 00:11:20.690
<v Matt Godbolt>um But then you think about like trading system Java, garbage-free Java, and that's like, oh yeah, that's it's a completely different sub-language, really, of of Java itself.

115
00:11:20.690 --> 00:11:20.730
<v Ben Rady>Yeah.

116
00:11:20.730 --> 00:11:20.970
<v Ben Rady>Right. Yeah. That's a whole other variation.

117
00:11:20.970 --> 00:11:21.000
<v Ben Rady>Yeah.

118
00:11:21.000 --> 00:11:33.300
<v Matt Godbolt>So there is a little bit of that, but it's I don't think... And I'm not really qualified to say, but I don't think there is the the same level of like, these two Java programmers just couldn't work in the same code base.

119
00:11:33.300 --> 00:11:35.660
<v Matt Godbolt>Unless you've gone, you know, almost like the language forces you into it.

120
00:11:35.660 --> 00:11:35.660
<v Ben Rady>Yeah.

121
00:11:35.660 --> 00:11:41.520
<v Matt Godbolt>Everything hit is OO, right? You're kind of stuck with OO because that's the way the whole language fits together.

122
00:11:41.520 --> 00:11:42.180
<v Ben Rady>Yeah, yeah.

123
00:11:42.180 --> 00:11:54.340
<v Ben Rady>I will say that it's like I have seen people write purely functional Java, but it is weird. it is not like a one of like you say, there's maybe four variations of sort of, you know, C++ plus plus ah archetypes.

124
00:11:54.340 --> 00:11:54.820
<v Matt Godbolt>Maybe, I think, yeah.

125
00:11:54.820 --> 00:12:03.240
<v Ben Rady>Let's just say it's four. It's like if that was true of Java, it wouldn't be that wouldn't be one of the four. Right. Like and and I'd be.

126
00:12:03.240 --> 00:12:08.620
<v Matt Godbolt>It's that, and and in in fairness to, again, specifically for Java or JVM languages, obviously you have Clojure and you have Kotlin.

127
00:12:08.620 --> 00:12:09.400
<v Ben Rady>Right. right

128
00:12:09.400 --> 00:12:13.780
<v Matt Godbolt>And if you want to do that kind of stuff, it's a different language and they interoperate fairly well.

129
00:12:13.780 --> 00:12:14.380
<v Matt Godbolt>like So you just do that.

130
00:12:14.380 --> 00:12:15.900
<v Ben Rady>Yeah, pretty much seamlessly.

131
00:12:15.900 --> 00:12:26.520
<v Ben Rady>And that would be and my exact point is like, this is just a Clojure programmer that you forced to do Java and now they're doing everything as a function and with streams and everything else. Cause it's almost like malicious compliance at that point.

132
00:12:26.520 --> 00:12:44.720
<v Ben Rady>Right. um So that's not like, that's not like a a way that I would normally expect people to use the language. Whereas it sounds like certainly that the case of in C++, it's like there are, you know, three or four different ways and you could reasonably argue about which way is better or worse in different contexts, but they're all kind of like,

133
00:12:44.720 --> 00:12:46.060
<v Ben Rady>yeah acceptable.

134
00:12:46.060 --> 00:13:04.760
<v Matt Godbolt>I think so. Yeah, absolutely. um ah Although, you know, yeah this is we're sort of off the track of where I was going with this, but it seems seems relevant. ah The presentation I gave a few weeks ago at the ACCU was me deliberately writing C++ plus plus in a way that I would never write it naturally, right?

135
00:13:04.760 --> 00:13:13.560
<v Matt Godbolt>Myy particular kind of archetype is I am using sort of OO C++ with...

136
00:13:13.560 --> 00:13:14.360
<v Ben Rady>Mm-hmm.

137
00:13:14.360 --> 00:13:22.340
<v Matt Godbolt>Using templates for generic programming only, not for meta programming and not for like very complicated type related tricks.

138
00:13:22.340 --> 00:13:23.740
<v Ben Rady>Mm-hmm. Mm-hmm.

139
00:13:23.740 --> 00:13:50.420
<v Matt Godbolt>And certainly, I guess that's the best way of me describing it. and And I'm not afraid to use a virtual function here and there to to ah to to separate concerns. And I'm very thoughtful about how I try and separate the implementation from the interface so that I can do testing of the interfaces and the compile time stuff. All right, we've talked about this kind of stuff before, but I'd force myself to say, no, there's a whole bunch of new cool things coming in the language or here in the language.

140
00:13:50.420 --> 00:14:01.860
<v Matt Godbolt>Concepts, coroutines, constexpr, everything seems to begin begin with C. Consteval, I'm trying to think, there was one other thing, modules, which doesn't begin with C, but the C is silent in modules.

141
00:14:01.860 --> 00:14:03.400
<v Ben Rady>Yeah, right. Commodules.

142
00:14:03.400 --> 00:14:06.600
<v Matt Godbolt>No, it's silent.

143
00:14:06.600 --> 00:14:19.880
<v Matt Godbolt>But you got that wrong, honestly. But yeah, modules. And I tried to use all of these things to write a piece of code. And I was hoping, and now this is where ah the podcast listenership will get the secret scoop behind it.

144
00:14:19.880 --> 00:14:34.580
<v Matt Godbolt>I was secretly hoping that I would write the code in this new-fangled way that I gut-feeling don't like. And I would come away from it and it would be universally vindicating of my previous position that actually everything, the way that I did it was the right way.

145
00:14:34.580 --> 00:14:35.040
<v Ben Rady>Right. Mm-hmm. Right. Mm-hmm.

146
00:14:35.040 --> 00:14:48.060
<v Matt Godbolt>Of course that didn't happen because nuance, right? This is it. Maybe this is the central theme of today's thing. isn't it Everything is nuanced and there is no obvious one correct answer to anything. And even the archetypes sometimes move away from their archetype.

147
00:14:48.060 --> 00:14:50.780
<v Matt Godbolt>Again, this blurriness around the edges.

148
00:14:50.780 --> 00:14:52.460
<v Ben Rady>Mm-hmm.

149
00:14:52.460 --> 00:15:04.320
<v Matt Godbolt>ah Anyway, I discovered that like I couldn't actually beat the performance of my first implementation [I meant the fancy implementation], I wrote the thing multiple times. so I wrote it once in ah my natural style.

150
00:15:04.320 --> 00:15:16.140
<v Matt Godbolt>and Then I said, okay, now I'm going to take all the newfangled nonsense and i'm going to prove that this is both more complicated and worse. And unfortunately, it wasn't that much more complicated and actually has some genuine benefits and the performance was considerably better.

151
00:15:16.140 --> 00:15:16.520
<v Ben Rady>Yeah. Yeah, yeah, yeah.

152
00:15:16.520 --> 00:15:31.420
<v Matt Godbolt>And then at the very, very end, like literally with a day to go before I presented it, I spent, I was up all night writing it a fourth way. I'd wrote it actually three ways, h fourth way going, learning what everything that I'd learned from the the cool new way, trying to backport it to my original methodology.

153
00:15:31.420 --> 00:15:34.450
<v Matt Godbolt>And it still wasn't actually any better. And so I was like, darn it.

154
00:15:34.450 --> 00:15:35.380
<v Ben Rady>and Yeah, yeah.

155
00:15:35.380 --> 00:15:40.480
<v Matt Godbolt>And this is a personal development journey more than anything else, which is kind of what the presentation is all about.

156
00:15:40.480 --> 00:15:51.540
<v Matt Godbolt>But, um but yeah, I think it it, I suppose the story here is that the, don't let the archetype box you in and don't,

157
00:15:51.540 --> 00:15:51.540
<v Ben Rady>Mm-hmm.

158
00:15:51.540 --> 00:15:51.540
<v Ben Rady>Mm-hmm. Mm-hmm.

159
00:15:51.540 --> 00:16:12.600
<v Matt Godbolt>Don't pigeonhole yourself. Don't be afraid to try new things, I guess. That's what the talk's thesis was. But um as it regards to this particular thing, that the the archetypes ah are potentially, there is a benefit to picking one archetype over another, or one bit and it may be, say, performance.

160
00:16:12.600 --> 00:16:22.160
<v Matt Godbolt>In this instance, it was perhaps, look, thee the ah the code base is slightly more ah coherent. No, what's the word? When i when things...

161
00:16:22.160 --> 00:16:23.980
<v Ben Rady>Cohesive.

162
00:16:23.980 --> 00:16:34.870
<v Matt Godbolt>Cohesive yeah overly cohesive right in terms of like this part no yeah couple thank you that's what again another C what everything needs to this episode was brought to you by the letter C

163
00:16:34.870 --> 00:16:35.300
<v Ben Rady>Coupled.

164
00:16:35.300 --> 00:16:35.730
<v Ben Rady>Yeah.

165
00:16:35.730 --> 00:16:36.160
<v Ben Rady>Cmodule?

166
00:16:36.160 --> 00:16:37.840
<v Matt Godbolt>And the number five.

167
00:16:37.840 --> 00:16:38.280
<v Ben Rady>Yes.

168
00:16:38.280 --> 00:16:43.610
<v Matt Godbolt>ah No, so it was more, everything seems a lot more coupled, which means compile times are higher and you know everything's more sensitive to change.

169
00:16:43.610 --> 00:16:43.780
<v Ben Rady>Yeah.

170
00:16:43.780 --> 00:16:50.370
<v Matt Godbolt>But I couldn't argue with the performance increase that I got. And for some applications, that's more important.

171
00:16:50.370 --> 00:16:50.480
<v Ben Rady>Yeah.

172
00:16:50.480 --> 00:16:52.980
<v Matt Godbolt>It probably wasn't for the one that I was doing, but it was it was noteworthy.

173
00:16:52.980 --> 00:16:53.080
<v Ben Rady>Yeah.

174
00:16:53.080 --> 00:17:06.240
<v Matt Godbolt>And I can now see why some archetypes might choose to go that way um because the importance of runtime performances trumps the ah the compile time or other aspects, right?

175
00:17:06.240 --> 00:17:06.360
<v Ben Rady>Yeah.

176
00:17:06.360 --> 00:17:23.920
<v Matt Godbolt>And for other people, it might be testability. I was only talking to somebody earlier this week about writing code in like very critical environments, like, you know, proving correctness in, you know, say automotive or aerospace or whatever like that.

177
00:17:23.920 --> 00:17:24.060
<v Ben Rady>Mm-hmm.

178
00:17:24.060 --> 00:17:33.980
<v Matt Godbolt>And at that point, maybe you have maybe got a real time constraint in performance, but more over than that, you have to absolutely be able to show that it's right. And that might inform the way that you write your code.

179
00:17:33.980 --> 00:17:34.460
<v Ben Rady>Yeah.

180
00:17:34.460 --> 00:17:39.260
<v Matt Godbolt>So this is way off the original topic, but that's this, that's our podcast for you.

181
00:17:39.260 --> 00:17:50.960
<v Ben Rady>Yeah, well, there you go. Well, OK, so bringing this back to the to the sort of original thing of like the art post that was going around about you know Matt convinced me to write Rust.

182
00:17:50.960 --> 00:17:56.160
<v Ben Rady>So that was about a talk that you gave a while ago, right? like when when When was that talk?

183
00:17:56.160 --> 00:18:03.440
<v Matt Godbolt>Yeah, just like maybe six, seven, eight years ago. it was pre-previous company, pre-crypto company as well. [Edit matt: it was July 2020]

184
00:18:03.440 --> 00:18:06.050
<v Matt Godbolt>I think it was ah was at the first finance company then, yeah.

185
00:18:06.050 --> 00:18:06.300
<v Ben Rady>Yeah.

186
00:18:06.300 --> 00:18:15.450
<v Ben Rady>And, and maybe I, maybe I lost the plot and it's like, but the, the talk that that talk was the comparison of these three different implementations or that was a, that was a different talk.

187
00:18:15.450 --> 00:18:15.500
<v Matt Godbolt>Yeah.

188
00:18:15.500 --> 00:18:17.140
<v Matt Godbolt>no No, that was a different one.

189
00:18:17.140 --> 00:18:17.260
<v Ben Rady>Right?

190
00:18:17.260 --> 00:18:18.060
<v Matt Godbolt>That was another another one.

191
00:18:18.060 --> 00:18:18.060
<v Ben Rady>Yeah.

192
00:18:18.060 --> 00:18:21.920
<v Matt Godbolt>Yeah. So what this one thesis was, you know, like the talk was called correct by construction.

193
00:18:21.920 --> 00:18:22.360
<v Ben Rady>Yeah. Yeah.

194
00:18:22.360 --> 00:18:28.740
<v Matt Godbolt>And it was me saying like, Hey, if you write your code this way, then the compiler won't compile your code.

195
00:18:28.740 --> 00:18:28.740
<v Ben Rady>yeah

196
00:18:28.740 --> 00:18:32.030
<v Matt Godbolt>If you make a silly mistake. some of the many silly mistakes.

197
00:18:32.030 --> 00:18:32.280
<v Ben Rady>right

198
00:18:32.280 --> 00:18:48.860
<v Matt Godbolt>So the one of the classic examples in that is without all of the warnings on, which you should just have on, there's no question of it, but like the default compiler will not warn if you, for example, take the example I gave is like placing an order on an exchange, send order.

199
00:18:48.860 --> 00:18:55.480
<v Matt Godbolt>And you have "float" price, which you should never have. That's a whole other conversation, but like it suited my purposes, "float" price and "int" quantity.

200
00:18:55.480 --> 00:18:55.860
<v Ben Rady>Right. Yeah. Yeah.

201
00:18:55.860 --> 00:19:24.750
<v Matt Godbolt>right if you're trying to buy 100 google shares for a thousand dollars each you sure as heck don't want to switch those parameters and actually but you know buy a thousand shares for 100 or whatever sell would be worse in this instance right and the compiler will happily let you write that and it won't give you a single warning because it says oh this float can be exactly represented as an int so that's fine and this integer is fine as a float no question you probably meant this ha ha ha and you're like no I absolutely never meant this and so one example would be never accept naked ints and floats

202
00:19:24.750 --> 00:19:25.240
<v Ben Rady>Right. Right.

203
00:19:25.240 --> 00:19:33.150
<v Matt Godbolt>because you can get it wrong. Why don't you make a Price class that has all the the things that prices need to do and a Quantity class that has all the things that quantities need to do.

204
00:19:33.150 --> 00:19:33.280
<v Ben Rady>Mm-hmm.

205
00:19:33.280 --> 00:19:44.800
<v Matt Godbolt>They are still just an int and a float or whatever. Again, don't use floats. um But they are now domain-specific objects that have useful functionality, and the compiler will tell you off if you switch them around.

206
00:19:44.800 --> 00:19:57.620
<v Matt Godbolt>And then I present a whole bunch of like techniques and and things to make that really straightforward and easy and even make it testable, all those kind of good things. And the take home from this chap was, Why you using a programming language, which even allowed that to happen in the first place?

207
00:19:57.620 --> 00:19:57.700
<v Ben Rady>Yeah.

208
00:19:57.700 --> 00:20:13.440
<v Matt Godbolt>It's great, because but you could forget to do this, or you could choose not to use this approach, or you know whatever. And it's the same with you know like the other classic example, which I don't think Rust has a solution, is like what if you have a if you have a bad API design where you have five bools in a row as like parameters to a function?

209
00:20:13.440 --> 00:20:13.620
<v Ben Rady>Yeah.

210
00:20:13.620 --> 00:20:27.480
<v Matt Godbolt>It's like you're just asking for somebody to screw the order of those things up, and there's no compiler in the world that will solve that for you, or no language. That was just a bad API design. That's how I chose to... to, to, to expose, uh, uh, interpret this is bad API design.

211
00:20:27.480 --> 00:20:37.740
<v Matt Godbolt>I think the take home for this blog post writer was like, why not make it impossible to make those APIs that bad. Now, again, bools notwithstanding, but yeah, go.

212
00:20:37.740 --> 00:20:56.180
<v Ben Rady>Yeah, you know, my my hot take reaction to this is going back to the Bjarne quote of like, well, maybe Rust just isn't used enough for people to complain about it yet to fracture into these three or four different archetypes because people will have very strong opinions about, oh, you should always do it this way or you should never do it that way.

213
00:20:56.180 --> 00:21:07.040
<v Ben Rady>Give it time, my friend, and you too will be having someone write the blog post that says, so-and-so convinced me to never use Rust and use whatever instead. Yeah.

214
00:21:07.040 --> 00:21:07.160
<v Matt Godbolt>Zig.

215
00:21:07.160 --> 00:21:07.430
<v Ben Rady>Yeah, exactly.

216
00:21:07.430 --> 00:21:09.620
<v Matt Godbolt>Yeah. Zig or go or whatever is up and cool next.

217
00:21:09.620 --> 00:21:16.050
<v Ben Rady>Yeah, yeah, yeah. Because it's like, that's the thing is it's like sometimes this stuff is all just carpet bubbles, right?

218
00:21:16.050 --> 00:21:16.120
<v Matt Godbolt>Yeah.

219
00:21:16.120 --> 00:21:20.140
<v Ben Rady>It's like, oh, this is a problem that that affects us all.

220
00:21:20.140 --> 00:21:21.600
<v Matt Godbolt>What did you call that? Sorry, we're going to have to stop. Carpet.

221
00:21:21.600 --> 00:21:27.060
<v Ben Rady>Carpet bubbles, you know, you push the carpet bubble down and then it just pops up somewhere else and then you push it down there and then it pops up somewhere else.

222
00:21:27.060 --> 00:21:32.050
<v Matt Godbolt>Oh, yeah. No, I knew exactly what you meant when you said it, but I just never heard it called that before. I wonder if that's an American thing.

223
00:21:32.050 --> 00:21:33.500
<v Ben Rady>Yeah.

224
00:21:33.500 --> 00:21:34.400
<v Matt Godbolt>cut But yeah, whack-a-mole is what I would think of.

225
00:21:34.400 --> 00:21:34.560
<v Ben Rady>Whack-a-mole is the same thing. Yeah, yeah, yeah.

226
00:21:34.560 --> 00:21:36.790
<v Matt Godbolt>But yeah. like

227
00:21:36.790 --> 00:21:48.810
<v Ben Rady>um Where it's like you're just you fix one problem and you're just creating another one. or so Sometimes it's worse and you create two problems, right? And so like you it's it's really hard and it's really, really hard to look at that holistically.

228
00:21:48.810 --> 00:21:49.190
<v Matt Godbolt>Yeah.

229
00:21:49.190 --> 00:22:03.820
<v Ben Rady>and be like, okay, let's not, you wanna talk about things that won't hold people's attention. Let's not look at just this one problem in isolation. Let's look at all the you the universe of entire possible problems and consider at that level, whether C++ or Rust is the right solution here.

230
00:22:03.820 --> 00:22:14.840
<v Ben Rady>how many lifetimes do you want to spend ah researching this and writing it and then reading it, right? So it's hard, ah but I think that it's like time is the thing that makes that happen, right?

231
00:22:14.840 --> 00:22:21.600
<v Ben Rady>Like time is the thing that sort of teases out like, okay, here are all of the edge cases of the edge cases of the edge cases.

232
00:22:21.600 --> 00:22:22.160
<v Matt Godbolt>Mm-hmm.

233
00:22:22.160 --> 00:22:35.420
<v Ben Rady>And the only real way that you can figure this out is to figure it out for yourself. You got to go and dive into each of these things and learn them to a pretty deep level. And then dive into the other things and learn them to a pretty deep level.

234
00:22:35.420 --> 00:22:44.760
<v Ben Rady>And then kind of just rely on your intuition to tell you which you think is best, because it's going to be very difficult to ah objectively say, well, X is better than Y.

235
00:22:44.760 --> 00:22:58.990
<v Matt Godbolt>Yeah. Yeah. I mean, there's, it is, it is, all those things are true, but it is absolutely unquestionable that the C++ has tons of own goals from the point of view of like, you know, things that it were we all wish it would be a different way.

236
00:22:58.990 --> 00:23:00.020
<v Ben Rady>Oh, yeah.

237
00:23:00.020 --> 00:23:14.410
<v Matt Godbolt>ah But it isn't. And of course, the superpower of C++ is that I can take code from 1988 that was written for CFront, Bjarne's original C++ to C converter compiler thing.

238
00:23:14.410 --> 00:23:14.620
<v Ben Rady>Right.

239
00:23:14.620 --> 00:23:28.340
<v Matt Godbolt>And that code almost well will almost certainly just work um in today's code. And that's great. and it But um unfortunately, it means that all of the the terrible decisions that were made back then propagate through time as well.

240
00:23:28.340 --> 00:23:39.700
<v Matt Godbolt>And there have been some floated ideas about making like epochs and like you know scoping things with, like hey, this is using the new semantics or whatever. But like the problem with that is the code still looks the same.

241
00:23:39.700 --> 00:23:39.720
<v Ben Rady>Mm-hmm.

242
00:23:39.720 --> 00:23:52.620
<v Matt Godbolt>And unless you scroll all the way to the top of the file that says you know "#pragma edition 2027" or whatever, you don't know whether or not it's safe to go int i without initializing it or not, because maybe in the old way it never...

243
00:23:52.620 --> 00:23:52.800
<v Ben Rady>Yeah.

244
00:23:52.800 --> 00:23:59.590
<v Matt Godbolt>And so I get it. And this is why people want to say, well, let's just use just, I say, let's try using Rust.

245
00:23:59.590 --> 00:23:59.980
<v Ben Rady>Mm-hmm.

246
00:23:59.980 --> 00:24:08.250
<v Matt Godbolt>Rust has essentially has had a more modern take on what all the defaults should be. And by and large, it seems we've got an awful lot right.

247
00:24:08.250 --> 00:24:09.000
<v Ben Rady>Mm-hmm.

248
00:24:09.000 --> 00:24:23.050
<v Matt Godbolt>um And there's no way in hell you're going to accidentally think that you're reading some Rust code and think it's C++ and go, oh, this is how it works. right No, there's no question. And nor are you going to include a C++ file from 20 years ago into your Rust thing and expect it to work.

249
00:24:23.050 --> 00:24:23.120
<v Ben Rady>Right.

250
00:24:23.120 --> 00:24:23.840
<v Matt Godbolt>It just doesn't.

251
00:24:23.840 --> 00:24:24.600
<v Ben Rady>Right, Right.

252
00:24:24.600 --> 00:24:30.100
<v Matt Godbolt>So the very thing that makes C++ powerful is also it's sort of undoing because we kind of can't solve that problem.

253
00:24:30.100 --> 00:24:30.200
<v Ben Rady>Right.

254
00:24:30.200 --> 00:24:46.580
<v Matt Godbolt>So yeah, nuance, it's subtle. Yeah. I mean, like right now, if I were to start a new project for for something, I probably would do it in Rust myself for the same reason. i mean, partly because I have the flexibility now as I'm not doing anything else with my time to pick anything I dont darn well like.

255
00:24:46.580 --> 00:24:58.560
<v Matt Godbolt>um But ah yeah, i ah C++ is around for a long time because we use C++ to interact with the C++ we wrote last year and the year before that.

256
00:24:58.560 --> 00:25:03.620
<v Matt Godbolt>And our vendors wrote and the interop story is still not great in other languages.

257
00:25:03.620 --> 00:25:04.100
<v Ben Rady>Right.

258
00:25:04.100 --> 00:25:04.480
<v Ben Rady>Yeah.

259
00:25:04.480 --> 00:25:12.160
<v Matt Godbolt>I don't think it's great in any language, honestly. I think C has become the standard interop for everything, which is a weird...

260
00:25:12.160 --> 00:25:13.500
<v Ben Rady>Right. That's the most universal one for sure.

261
00:25:13.500 --> 00:25:23.400
<v Matt Godbolt>Yeah, which which is to say, you know, only slightly above assembly language, which, you know, obviously warms warms my heart.

262
00:25:23.400 --> 00:25:31.140
<v Ben Rady>Yeah. Well, I mean, to to maybe maybe tie this off, I don't know if this is going to start a whole new branch of discussion or tie off the conversation.

263
00:25:31.140 --> 00:25:31.260
<v Matt Godbolt>Uh-oh.

264
00:25:31.260 --> 00:25:53.200
<v Ben Rady>Who knows? um But I think the value that reevaluating these things has is you get to learn from other people's experiences, aka mistakes, and say, ah here's a mistake that we keep making over and over again. Let's see if we can try to systematically solve it.

265
00:25:53.200 --> 00:26:05.560
<v Ben Rady>And, you know, I feel like though the almost the worst case there is that you turn it into a carpet bubble. But probably what's going to happen is you're just going to make it one big bubble turned into a smaller bubble.

266
00:26:05.560 --> 00:26:12.020
<v Ben Rady>Right. You traded one hard problem for another problem that was probably a little easier to manage.

267
00:26:12.020 --> 00:26:12.380
<v Matt Godbolt>Right, right.

268
00:26:12.380 --> 00:26:30.960
<v Ben Rady>And that is oftentimes what progress looks like. It's it's not like, hey, we eliminated all the problems. It's, we took all the like really terrible like you know buffer overflow problems, and we turned them into like sort of less terrible, OK, this just takes a really long time to compile, and it's hard to understand problem.

269
00:26:30.960 --> 00:26:31.720
<v Matt Godbolt>Right.

270
00:26:31.720 --> 00:26:40.050
<v Matt Godbolt>Or, you know, Rust, how do i how do I find a way to explain to the borrow checker that this particular set of lifetimes is in fact okay?

271
00:26:40.050 --> 00:26:40.480
<v Ben Rady>Mm-hmm.

272
00:26:40.480 --> 00:26:41.490
<v Matt Godbolt>Or maybe it isn't.

273
00:26:41.490 --> 00:26:41.800
<v Ben Rady>Mm-hmm.

274
00:26:41.800 --> 00:26:53.270
<v Matt Godbolt>Or, you know, how do i ah yeah, how all of my ills about who is like who is meant to clean up this memory is solved by a garbage collector that has a different trade-off.

275
00:26:53.270 --> 00:26:53.660
<v Ben Rady>Yeah.

276
00:26:53.660 --> 00:27:09.200
<v Matt Godbolt>And so all these things, yeah, it feels like there's some kind of like, yeah, i think what you're saying, there's a sort of global minima that we're all in different little sub pockets of, and you can perhaps find a lower minima somewhere else, but it's not that clear cut.

277
00:27:09.200 --> 00:27:09.300
<v Ben Rady>Yeah.

278
00:27:09.300 --> 00:27:15.560
<v Matt Godbolt>You know, you can you can turn one problem, bad problem into two slightly less bad problems, or maybe you just trade off a thing completely.

279
00:27:15.560 --> 00:27:15.880
<v Ben Rady>Yeah, yeah.

280
00:27:15.880 --> 00:27:18.060
<v Matt Godbolt>Yeah. Runtime performance or, yeah.

281
00:27:18.060 --> 00:27:27.550
<v Ben Rady>Yeah. Interestingly, I was talking to a mutual Matt of ours the other day ah who had told me who was doing a lot of Rust and who had told me that he's like kind of given up on lifetimes.

282
00:27:27.550 --> 00:27:28.120
<v Matt Godbolt>Oh, cool. Yeah.

283
00:27:28.120 --> 00:27:30.380
<v Ben Rady>He's like, I'm just not going to use them anymore. I use them very sparingly now.

284
00:27:30.380 --> 00:27:36.820
<v Matt Godbolt>i thought I'm so glad that you said lifetimes. When he said he's kind of given up on life, I was like, what?

285
00:27:36.820 --> 00:27:38.320
<v Matt Godbolt>I'm going to make it a phone call!

286
00:27:38.320 --> 00:27:43.840
<v Ben Rady>That is a very bad side effect of Rust. is it it's It's like a pharmaceutical commercial.

287
00:27:43.840 --> 00:27:44.080
<v Matt Godbolt>ah

288
00:27:44.080 --> 00:27:53.010
<v Ben Rady>"May lead to suicidal thoughts". No, the now he he has given up on using lifetimes and Rust because he's just like, there's just it's just too complicated.

289
00:27:53.010 --> 00:27:53.260
<v Matt Godbolt>Yeah, whoa.

290
00:27:53.260 --> 00:27:53.440
<v Ben Rady>I just don't do it anymore.

291
00:27:53.440 --> 00:27:55.280
<v Matt Godbolt>That's really interesting. So presumably...

292
00:27:55.280 --> 00:27:55.280
<v Ben Rady>Yeah.

293
00:27:55.280 --> 00:28:01.340
<v Matt Godbolt>just essentially redesigning things so that you don't have to explain the lifetime of things to anybody.

294
00:28:01.340 --> 00:28:02.130
<v Ben Rady>Yeah, it's just like, just make a copy.

295
00:28:02.130 --> 00:28:02.460
<v Matt Godbolt>You just, yeah.

296
00:28:02.460 --> 00:28:03.280
<v Ben Rady>Just make a copy. That's the easiest thing to do.

297
00:28:03.280 --> 00:28:04.800
<v Matt Godbolt>Right. Which is not a bad thing to do either.

298
00:28:04.800 --> 00:28:14.990
<v Matt Godbolt>Yeah. i mean, and and again, that's another ah language, Val, which became some other name. I can't think now. and This is terrible. I should know all these off the top my head. "Hydro", something like that.

299
00:28:14.990 --> 00:28:15.440
<v Ben Rady>Right.

300
00:28:15.440 --> 00:28:19.400
<v Matt Godbolt>I don't know. youre i'm Dear listener, Ben is pulling all sorts of expressions of "I don't know" in the in the video chat.

301
00:28:19.400 --> 00:28:20.220
<v Ben Rady>I don't know.

302
00:28:20.220 --> 00:28:21.700
<v Ben Rady>Yeah, no idea.

303
00:28:21.700 --> 00:28:27.790
<v Matt Godbolt>But that that was sort of founded around everything should be a value, ah which is very functional feely, right?

304
00:28:27.790 --> 00:28:29.380
<v Ben Rady>Mm-hmm.

305
00:28:29.380 --> 00:28:31.400
<v Matt Godbolt>And ah again, that that's another sort of like...

306
00:28:31.400 --> 00:28:31.680
<v Ben Rady>Mm-hmm.

307
00:28:31.680 --> 00:28:51.300
<v Matt Godbolt>a different direction you can go down. It's like, hey, everything's a value. And then you're like, well, but actually it's too expensive to keep making copies of everything all the time. So somewhere, some clever piece of code, maybe in the compiler is kind of going, hey, we can actually use the same one because we know that the previous lifetime actually ended and the new lifetime began. So it's actually in this, it's still register eight. yeah.

308
00:28:51.300 --> 00:29:06.240
<v Matt Godbolt>There was no copy. We just carried on with it. Oh, it's that kind of stuff, which was always the way I felt about like functional languages where they're like, Hey, yes, if you want to if you want to mutate a map, then you pass us the map and say, set key X to Y, we return a new copy of the map.

309
00:29:06.240 --> 00:29:06.920
<v Ben Rady>Right. Yeah.

310
00:29:06.920 --> 00:29:07.260
<v Ben Rady>Right.

311
00:29:07.260 --> 00:29:15.130
<v Matt Godbolt>And you're like, i don't, I can't believe it's an actual copy because that would never work. And they're like, yeah, but behind the scenes, we're doing reference counting and we're doing

312
00:29:15.130 --> 00:29:15.300
<v Ben Rady>Right.

313
00:29:15.300 --> 00:29:16.090
<v Matt Godbolt>you know, careful.

314
00:29:16.090 --> 00:29:16.660
<v Ben Rady>Yeah, yeah, yeah.

315
00:29:16.660 --> 00:29:24.320
<v Matt Godbolt>And you're like, okay. So it's what you're saying is you're faking this for pragmatic reasons. And so there is mutable state.

316
00:29:24.320 --> 00:29:24.320
<v Ben Rady>Yeah.

317
00:29:24.320 --> 00:29:26.680
<v Matt Godbolt>It's just hiding inside the, the runtime.

318
00:29:26.680 --> 00:29:27.640
<v Ben Rady>Yeah, yeah.

319
00:29:27.640 --> 00:29:35.010
<v Matt Godbolt>How did, how did you write this mutable state in your functional language, which doesn't have mutable state? Ah, well, we wrote it in a different language. You're like, ah, now I'm out.

320
00:29:35.010 --> 00:29:36.440
<v Ben Rady>Yes, uh-huh.

321
00:29:36.440 --> 00:29:37.880
<v Matt Godbolt>Anyway. Yes.

322
00:29:37.880 --> 00:29:47.840
<v Matt Godbolt>so You, you said about rounding it off. That seems like a decent, non-solution, non-description to finish, like any of our podcasts. But...

323
00:29:47.840 --> 00:29:48.180
<v Ben Rady>Yeah.

324
00:29:48.180 --> 00:29:51.680
<v Ben Rady>Yeah, it's either this or we talk for the next two hours and that seems unkind.

325
00:29:51.680 --> 00:30:11.700
<v Matt Godbolt>That seems unkind, yeah. I don't know. Actually, I mean, there are some long-form podcasts out there, i've as I've been discovering with all my extra spare time. um some Even though when I put them on like an 1.5x, which I'd be interested to know if anyone listens to this, especially when we're gabbling at full speed, anything other than 1x or 1.2x maybe. Yeah.

326
00:30:11.700 --> 00:30:11.900
<v Ben Rady>yeah. yeah

327
00:30:11.900 --> 00:30:23.820
<v Matt Godbolt>ah But yeah, we're not that long. And in fact, this is relatively short for us. So on that bombshell, maybe we should say, ah always lovely chatting with you, Ben. And I will see you next time.

328
00:30:23.820 --> 00:30:26.820
<v Ben Rady>Until next time.

