1
00:00:01,000 --> 00:00:04,759
How'd you like to listen to dot
net rocks with no ads? Easy?

2
00:00:05,320 --> 00:00:09,279
Become a patron. For just five
dollars a month, you get access to

3
00:00:09,320 --> 00:00:14,000
a private RSS feed where all the
shows have no ADS. Twenty dollars a

4
00:00:14,039 --> 00:00:18,399
month will get you that and a
special dot net Rocks patron mug. Sign

5
00:00:18,480 --> 00:00:24,199
up now at Patreon dot dot net
rocks dot com. Hey Carlin, Richard

6
00:00:24,239 --> 00:00:28,719
Here, as you may have heard, NDC is back offering their incredible in

7
00:00:28,879 --> 00:00:32,960
person conferences around the world, and
we'd like to tell you about them.

8
00:00:33,079 --> 00:00:37,479
EDDC Oslow will be made twenty first
through the twenty fifth. Go to Ndcoslo

9
00:00:37,560 --> 00:00:43,079
dot com to register. NDC Copenhagen
is happening August twenty seventh through the thirty

10
00:00:43,079 --> 00:00:49,240
first. Go to NDC Copenhagen dot
com for more information. NDC Porto is

11
00:00:49,240 --> 00:00:53,560
happening October sixteenth through the twentieth.
The early bird discount for dc Porto ends

12
00:00:53,679 --> 00:00:58,560
July twenty first. Go to Edcporto
dot com to register and check out.

13
00:00:58,560 --> 00:01:15,319
The full lineup of conferences is at
NDC Conferences dot com. Welcome back to

14
00:01:15,439 --> 00:01:19,719
dot net Rocks. This is Carl
Franklin and this is Richard Campbell and we

15
00:01:19,760 --> 00:01:23,200
are in our respective home offices.
Although it doesn't sound like it, does

16
00:01:23,200 --> 00:01:26,079
it. It sounds like we're like
together in a studio that costs millions of

17
00:01:26,120 --> 00:01:29,599
dollars. Yeah, we fool people
all the time with that. Can you

18
00:01:29,599 --> 00:01:34,079
remember when we used to use the
phone line to synchronize our audio files?

19
00:01:34,079 --> 00:01:37,280
The tels one plus one? Oh
yes, the t los? Yeah.

20
00:01:37,560 --> 00:01:38,959
Yeah. If we went through like
a laundry list of all the gear that

21
00:01:40,000 --> 00:01:42,560
we've had to use throughout the years, and now it's evolved, thousands of

22
00:01:42,599 --> 00:01:46,640
dollars worth of gear. Two those
t loses were not cheap. Yeah you

23
00:01:46,680 --> 00:01:49,439
want to buy one? No?
No thanks, all right? Last one

24
00:01:49,519 --> 00:01:53,120
I had cooked off and went to
the e waste recycler. How is Vancouver

25
00:01:53,280 --> 00:01:57,920
this time of year, Richard?
Frozen? It's like negative six. A

26
00:01:59,000 --> 00:02:02,959
couple of weeks ago it was like
fifty degrees fahrenheit here, and then the

27
00:02:04,040 --> 00:02:07,640
next week it was like ten below, right, what's what the hell?

28
00:02:07,680 --> 00:02:12,159
Hell? And California froze too,
froze. Yeah, yeah, we call

29
00:02:12,240 --> 00:02:16,479
that climate instability. Oh, it's
terrible. Well anyway, we'll tell terrible

30
00:02:16,520 --> 00:02:20,520
for you, okay for me,
But man, I would wish it would

31
00:02:20,560 --> 00:02:25,120
be over. Yeah, before this
show comes out, I will have jetted

32
00:02:25,120 --> 00:02:29,919
off to New Zealand for a few
days, Ain't you lucky? I am

33
00:02:30,199 --> 00:02:35,159
officiating a wedding again. Richard had
a little lamb, a little ham,

34
00:02:35,199 --> 00:02:38,680
a little spam. All right,
let's get it going with better no framework?

35
00:02:46,360 --> 00:02:49,319
All right? Man? What do
you got? This came across my

36
00:02:49,479 --> 00:02:54,919
desk such as it is um from
somebody I think it was on Mastodon,

37
00:02:55,680 --> 00:03:01,400
and it's called code made, code
made dot net doing our developer dirty work.

38
00:03:01,560 --> 00:03:06,400
What an open source of visual studio
extension to clean up and simplify C

39
00:03:06,560 --> 00:03:09,000
sharp C plus plus F sharp VBPHP, PowerShell, R, json, zam

40
00:03:09,400 --> 00:03:15,360
mlshtmails as less SCSS, JavaScript and
type script coding. That's a lot.

41
00:03:15,080 --> 00:03:21,280
Yeah, I I have a few
customers that need this badly interesting. Let's

42
00:03:21,280 --> 00:03:23,240
just say that. I mean,
how do you how do you? How

43
00:03:23,240 --> 00:03:28,360
does the tool clean up code without
damaging it? Oh, removing unused using

44
00:03:28,439 --> 00:03:38,520
statements, sorting them, adding unspecified
access modifiers, removing empty regions, adding

45
00:03:38,639 --> 00:03:43,759
blank line padding, removing blank lines
next to braces, just like formatting,

46
00:03:43,840 --> 00:03:47,919
you know. I mean when control
E control D doesn't do the trick for

47
00:03:47,960 --> 00:03:52,560
some reason, this. This kind
of thing works, and there's been you

48
00:03:52,599 --> 00:03:57,199
know, tools like this um throughout
the ages, but this is kind of

49
00:03:57,199 --> 00:04:00,240
the state of the art. So
I'm told I don't particularly think my code

50
00:04:00,240 --> 00:04:03,199
needs it, but somebody did.
That's what I shared it with. Means

51
00:04:04,520 --> 00:04:08,360
somebody thought your code needed it.
Okay, yeah, yeah. It's kind

52
00:04:08,360 --> 00:04:11,800
of like when your friend gives you
some deodorant as a yea, or you

53
00:04:11,840 --> 00:04:14,719
know, hands you the pack of
tick tacks, did like, yeah,

54
00:04:14,759 --> 00:04:16,240
here, No, I don't want
those. Yes, take as many as

55
00:04:16,240 --> 00:04:21,639
you want, please, all right, my friend, that's what I got.

56
00:04:21,639 --> 00:04:25,439
Who's talking to us? I love
it. Grabbed a comment off a

57
00:04:25,439 --> 00:04:28,920
show seventeen sixty one, the one
we did with Mads back in the fall

58
00:04:28,959 --> 00:04:32,120
of twenty twenty one, talking about
c sharp ten that was right before within

59
00:04:32,199 --> 00:04:35,800
weeks of the twenty twenty one Really
did fall, didn't it? Well,

60
00:04:35,800 --> 00:04:39,839
there was a fall. It was
cold, yeah, okay, And this

61
00:04:39,879 --> 00:04:43,040
comment comes from Maurice Peters and he
says, I just wanted to respond to

62
00:04:43,040 --> 00:04:46,120
the remark from Mads. It's great
to hear the c sharp team is listening

63
00:04:46,160 --> 00:04:48,680
to the community and they take the
time to design a feature like discriminating unions

64
00:04:48,720 --> 00:04:54,160
by trying to find out what it
is the community actually means when they say

65
00:04:54,199 --> 00:04:57,839
they want discriminating unions. And I
remember this conversation, right, and we've

66
00:04:57,879 --> 00:05:00,360
talked about exactly that. So what
do you mean when you say that Mad's

67
00:05:00,360 --> 00:05:04,199
ads to this remarket And I am
paraphrasing, perhaps crudely, but when no

68
00:05:04,319 --> 00:05:10,079
community wants to have an F sharp
like discribuinating union, they should probably use

69
00:05:10,120 --> 00:05:14,399
F sharp. Yeah, dun,
dunt du Now I understand his remark,

70
00:05:14,439 --> 00:05:15,800
and I would love to use F
sharp at my day job as well.

71
00:05:15,839 --> 00:05:19,000
However, it is often not feasible
to switch to a different programming language.

72
00:05:19,800 --> 00:05:21,759
There are lots of reasons for this, one of them being that it's hard

73
00:05:21,759 --> 00:05:26,279
to attract a larger number of developers
with knowledge of F sharp or any other

74
00:05:26,319 --> 00:05:29,639
functional language for that matter. And
C sharp is a very enjoyable language to

75
00:05:29,720 --> 00:05:31,639
work in, So don't forget that
part. I totally agree with you,

76
00:05:31,720 --> 00:05:33,920
and I think we said as much
on the show. Yeah, and I

77
00:05:33,959 --> 00:05:39,720
think we also suggested to that if
possible, you know, you can create

78
00:05:39,759 --> 00:05:43,040
a class library and F sharp just
to do the f sharpie things. Yeah,

79
00:05:43,079 --> 00:05:46,319
it's still and then use that at
c sharp. Your employer kind of

80
00:05:46,319 --> 00:05:48,360
needs to know you did that,
right, like somebody does have to maintain

81
00:05:48,439 --> 00:05:53,040
that. It can't be only you. And a feature like discriminating unions kind

82
00:05:53,040 --> 00:05:56,160
of is a fundamental thing. So
it's gonna is, It's going to be

83
00:05:56,199 --> 00:05:59,319
in everything, And so Marie wraps
up. I say feature is usually associated

84
00:05:59,319 --> 00:06:02,240
with functional languages like discriminate unions have
a lot of value, for instance,

85
00:06:02,319 --> 00:06:09,000
designing type driven domain models, and
he plugs Scott Woslin's book Domain Modeling Made

86
00:06:09,000 --> 00:06:12,319
Functional here. The earlier in the
development cycle we are able to catch air

87
00:06:12,360 --> 00:06:15,639
as a domain model, the cheaper
it is to fix them. So I

88
00:06:15,639 --> 00:06:19,040
guess that means as early as possible
in the inner development loop if you ask

89
00:06:19,120 --> 00:06:24,560
me specifically what you would like to
achieve the functional programming paradigms like in c

90
00:06:24,720 --> 00:06:28,000
sharp in general, and I like
to think I'm not the only one would

91
00:06:28,000 --> 00:06:31,079
like him to expand my options to
explicitly enclode a domain model by exploiting the

92
00:06:31,120 --> 00:06:36,000
type system and the compiler. Thanks
for a great show. Yeah, well,

93
00:06:36,040 --> 00:06:39,800
thank you, Maurice. I have
good thoughts that I'm sure Mads will

94
00:06:39,800 --> 00:06:42,639
contribute to them when we let him
speak because currently he's tied up in a

95
00:06:42,680 --> 00:06:46,199
closet and a copy of us to
codbuy is on its way to you.

96
00:06:46,279 --> 00:06:47,639
And if you'd like him copy of
us to code by, write a comment

97
00:06:47,639 --> 00:06:51,000
on the website at dot net rocks
dot com or on the facebooks where reread

98
00:06:51,000 --> 00:06:54,759
every comment, and if I read
on the show, we'll say your copy

99
00:06:54,839 --> 00:06:59,959
mused to codebuy, and definitely follow
us on Mastodon. I'm at Carl Franklin

100
00:07:00,079 --> 00:07:03,120
at tech hub dot social, I'm
Rich Campbell at Mastodondon Social. Send us

101
00:07:03,120 --> 00:07:05,959
that too. I know the mastadon
things, it just doesn't even to be

102
00:07:05,959 --> 00:07:12,720
gaining any momentum. Maybe in your
world not. But I find better engagement

103
00:07:12,759 --> 00:07:17,160
on Mastodon with my you know,
one percent of my followers sure that I

104
00:07:17,240 --> 00:07:20,519
have on Twitter, I find they
are more intentive and more interested in what

105
00:07:20,560 --> 00:07:24,160
I have to say. And I
think Twitter is not as big a dumpster

106
00:07:24,199 --> 00:07:27,600
fire as you expected, honestly when
you saw the layoffs, I you know,

107
00:07:28,000 --> 00:07:31,079
I've done enough a large scale infrastructure
stuff to think if he really got

108
00:07:31,160 --> 00:07:35,199
rid of all those guys, he's
got a week. But apparently he didn't.

109
00:07:35,199 --> 00:07:39,040
The system is stayed up. Obviously, there's funny things happening, like

110
00:07:39,560 --> 00:07:44,279
getting rid of free sms. Yeah
to FA. Yeah, that's a great

111
00:07:44,319 --> 00:07:48,079
idea. It turns out it wasn't
free. That there are questionable telcos in

112
00:07:48,079 --> 00:07:55,160
the world that were running bots that
would create accounts on Twitter set up MFA

113
00:07:55,240 --> 00:07:58,319
just to collect a few cents that
they would get for every text message.

114
00:07:58,319 --> 00:08:01,959
Interesting, Well, you can always
use an authenticator too, and that's that's

115
00:08:01,000 --> 00:08:07,279
what you should use, and arguably
should Yeah. Absolutely, I think they

116
00:08:07,319 --> 00:08:09,040
would have had a better PR statement
and just said, hey, we're getting

117
00:08:09,079 --> 00:08:13,560
rid of SMS for authentication, should
use a real authenticator rather than say,

118
00:08:13,560 --> 00:08:15,920
hey, you could pay us,
but if you want to send us a

119
00:08:15,920 --> 00:08:18,519
tweet. I'm at Carl Franklin.
He's at Rich Campbell. Yes we are.

120
00:08:18,560 --> 00:08:20,720
All right, let's bring on Mad's
that's who you're here for. Mads

121
00:08:20,720 --> 00:08:26,319
Turguson is the program manager for the
c sharp language at Microsoft and runs the

122
00:08:26,360 --> 00:08:30,000
c sharp design meetings. Prior to
joining Microsoft in two thousand and five,

123
00:08:30,160 --> 00:08:33,639
he was an associate professor at the
University of our huss Is that right?

124
00:08:33,759 --> 00:08:41,080
Oh yeah, that's close enough,
doing programming language research. Welcome back.

125
00:08:41,200 --> 00:08:43,559
Can't wait to hear what you have
to say. Sir, thank you.

126
00:08:43,679 --> 00:08:46,679
It's great to be bad. I
feel like this. I've been here so

127
00:08:46,679 --> 00:08:48,879
many times. This would be like
my second or third time or something like

128
00:08:48,919 --> 00:08:54,759
that, something like I should probably
count them up. There's probably a few

129
00:08:54,759 --> 00:08:58,519
more that I was gonna. I
was in Sweden not long ago, and

130
00:08:58,559 --> 00:09:03,960
the conversation came up above just how
many language designers come from Denmark. It's

131
00:09:05,240 --> 00:09:09,000
kind of staggering. Yeah, this
is your sixth show, by the way,

132
00:09:09,360 --> 00:09:13,240
sixth oh six. Yeah, there
you go. More than any other

133
00:09:13,320 --> 00:09:18,320
language designer, more than any other
Daniel language designer. Yeah, it comes

134
00:09:18,360 --> 00:09:22,039
up a lot, and I don't
know what it is that. I mean,

135
00:09:22,039 --> 00:09:26,440
there was a whole lot of interest
in programming languages and compilers all the

136
00:09:26,519 --> 00:09:31,559
way back in the sixties, you
know, right, we we built alcohol

137
00:09:31,600 --> 00:09:37,879
compilers in Denmark. Someone like Charles
Simoni worked in Denmark for a while working

138
00:09:37,879 --> 00:09:41,080
on an alcohol compiler. Might be
the herring and sour cream, don't you

139
00:09:41,120 --> 00:09:46,120
think maybe first said not a Danish
thing. I mean, we have both.

140
00:09:46,440 --> 00:09:50,399
Yeah. I gotta wonder if it
was just certain professors and I wouldn't

141
00:09:50,440 --> 00:09:54,480
know their names, that cultivated an
environment where it just sort of became known

142
00:09:54,480 --> 00:09:58,159
as a place where you work on
programming languages, and so the folks that

143
00:09:58,200 --> 00:10:00,799
wanted to do that tended to go
there. It was the best place to

144
00:10:00,840 --> 00:10:03,600
do it in Maybe. Yeah,
I think there's definitely something to that.

145
00:10:03,639 --> 00:10:07,679
I mean object going to programming famously
was invented in not in Denmark, but

146
00:10:07,840 --> 00:10:11,480
in Scanning Navy in no way.
Um, one of the two inventors spent

147
00:10:11,600 --> 00:10:16,120
a lot of time in anymore,
you know, Hush, and I bumped

148
00:10:16,159 --> 00:10:20,679
into him many times while I was
there. So there's been a culture for

149
00:10:20,919 --> 00:10:26,279
longer than I've been alive. I
don't know if it's still going. Actually

150
00:10:26,360 --> 00:10:30,080
I don't. I don't have I
don't have that much of a connection anymore.

151
00:10:30,080 --> 00:10:35,720
It's been seventeen years plus since I
was there full time. But there

152
00:10:35,720 --> 00:10:39,919
definitely was sort of like an environment
in academic circles in particular. Yeah,

153
00:10:39,200 --> 00:10:43,519
so you're not a good alumni of
the university, you're not staying in touch

154
00:10:43,559 --> 00:10:48,159
making regular visits. I would imagine
they'd love to have you do a presentation

155
00:10:48,279 --> 00:10:50,480
or two there. Oh, I've
been back a few times. Yeah,

156
00:10:50,480 --> 00:10:54,480
it's not that I completely lost touch. Um, but um, yeah,

157
00:10:54,519 --> 00:10:58,080
it's probably half a decade between each
visit. Well, we have had a

158
00:10:58,600 --> 00:11:05,879
two half your interruption on just about
everything right that too. Yeah, but

159
00:11:05,120 --> 00:11:09,559
it doesn't sound like you guys have
stopped at all C sharp eleven. Well

160
00:11:09,559 --> 00:11:13,000
along in development, I see preview
one of the framework dropped. I think

161
00:11:13,039 --> 00:11:18,279
there was a language stuff in there
as well. That's actually twelve C sharp

162
00:11:18,360 --> 00:11:22,279
twelve sharp twelve we're talking about.
See I told you twenty twenty one fell

163
00:11:22,519 --> 00:11:26,639
Yeah. Yeah, there isn't any
language stuff in the first preview, at

164
00:11:26,679 --> 00:11:31,399
least as far as I'm aware.
Okay, that'll start in preview two.

165
00:11:31,440 --> 00:11:35,519
I think we'll see Um, I'm
betting we'll see primary constructors and maybe a

166
00:11:35,519 --> 00:11:41,360
few other things there, and then
things will start seeping in. Okay,

167
00:11:41,360 --> 00:11:50,960
what's a primary constructor, oh,
carlitz Um. It's sort of a generalizing

168
00:11:50,000 --> 00:11:54,360
a thing that we already did with
records. You know, for a record

169
00:11:54,399 --> 00:12:00,639
in C chart, you can put
um constructor primeters directly on the class name,

170
00:12:00,679 --> 00:12:05,960
on the type name when you declare
one, and you can also pass

171
00:12:05,000 --> 00:12:13,879
along base constructor argument on the base
class of a record of a record class.

172
00:12:13,879 --> 00:12:16,080
But it was sort of limited to
records, and in records, it's

173
00:12:16,159 --> 00:12:18,720
very like it does a lot of
things. When you do that, it

174
00:12:18,759 --> 00:12:22,080
generates public properties for each of the
parameters and so on. It's sort of

175
00:12:22,120 --> 00:12:30,399
like a um it's sort of like
a a way to try to mimic functional

176
00:12:30,440 --> 00:12:33,799
records a little bit, a very
terse way of describing you a data model

177
00:12:33,440 --> 00:12:37,480
in one fields, and that's a
little much for other classes, because you

178
00:12:37,519 --> 00:12:43,320
know, records are specifically like when
you want to describe very straight up data

179
00:12:43,039 --> 00:12:46,960
with a clear structure and public properties
and so on. But it can still

180
00:12:48,000 --> 00:12:56,039
be very useful to to allow you
to specify like a main constructor that where

181
00:12:56,120 --> 00:13:01,000
the parameters are on the class itself, so that instead of doing the work

182
00:13:01,039 --> 00:13:09,240
of stashing the incoming data somewhere in
private fields, protected fields or whatever,

183
00:13:09,240 --> 00:13:13,879
they're just they're just in scope.
They're just capture them, just like at

184
00:13:13,919 --> 00:13:18,600
lambic can capture things from around it. And so so there is a more

185
00:13:18,320 --> 00:13:22,559
and more limited form of primary constructors
coming out on ordinary classes and starts,

186
00:13:24,279 --> 00:13:28,399
And we've tinkered a lot with the
exact semantics and and everything, but we

187
00:13:28,440 --> 00:13:31,639
think it's there now. We think
it has a really good first design.

188
00:13:31,840 --> 00:13:33,840
There are some optional things we could
do to it that we haven't done yet

189
00:13:35,559 --> 00:13:39,399
and we probably do the usual thing
now that we're shipping every year and just

190
00:13:39,399 --> 00:13:43,440
ship the basic version and see what
people climber for. You know, there

191
00:13:43,480 --> 00:13:46,000
are kinds of ideas for, Hey, you could do this that type scrip

192
00:13:46,120 --> 00:13:48,639
does, or you could do that
that F sharp does, or you could

193
00:13:48,639 --> 00:13:52,200
do this third thing that no one
does or and we're just like, yeah,

194
00:13:52,240 --> 00:13:56,759
but here, we know this part
is good, so let's ship that

195
00:13:56,879 --> 00:14:00,440
and then let's see what you all
say that the annual cadence. That must

196
00:14:00,440 --> 00:14:03,120
be really empowering, because you know
it's only a year and there will be

197
00:14:03,159 --> 00:14:07,120
interim releases. Yeah, no,
it's it's it's incredible. And the more

198
00:14:07,159 --> 00:14:11,639
we we've sort of leaned into it, the more we've gotten used to it,

199
00:14:11,639 --> 00:14:16,879
the more we use it. Like, um, we have many feature

200
00:14:16,919 --> 00:14:22,519
sets that we drip out year after
year because then we can take much more

201
00:14:22,559 --> 00:14:28,080
fine grained quote unquote advice from from
the community, from from us. It's

202
00:14:28,120 --> 00:14:31,120
not just the people who engage before
the original feature comes out, but the

203
00:14:31,320 --> 00:14:37,840
people who are who are on the
forefront enough that they use new features and

204
00:14:37,919 --> 00:14:41,360
tell us when they think something is
missing and give us the scenarios and so

205
00:14:41,480 --> 00:14:45,200
on. But they're also self selecting, Like you used to do this back

206
00:14:45,200 --> 00:14:48,679
in the before open source days,
but it was software design reviews, Like

207
00:14:48,000 --> 00:14:52,240
you had to get an invitation to
come in and sit with the team and

208
00:14:52,279 --> 00:14:56,440
they'd show off the features and it
was a kind of a prestige sort of

209
00:14:56,440 --> 00:14:58,639
thing, like you're just splent a
lot of time to get your foot in

210
00:14:58,679 --> 00:15:01,399
the door of an SDR in the
first place. Now it's like if you

211
00:15:01,440 --> 00:15:07,120
can get to GitHub and you care, you can participate. Yeah, and

212
00:15:07,159 --> 00:15:11,519
it's important for us to have these
different kind of circles of engagement, right.

213
00:15:11,399 --> 00:15:16,720
Obviously we've had we've had this program
called the MVP program for a long

214
00:15:16,759 --> 00:15:20,080
time, and we had that that
was even around when I when I joined

215
00:15:20,559 --> 00:15:22,519
these many years ago, and that
was a way to have a certain group

216
00:15:22,559 --> 00:15:28,320
of people that you could share your
secrets with and get early design advice.

217
00:15:28,360 --> 00:15:31,159
And then yes, there were the
design reviews and so on. But it's

218
00:15:31,200 --> 00:15:37,480
almost like guaranteed that that will not
be a representative set of people, right,

219
00:15:37,480 --> 00:15:41,159
but you're selected from that for that
kind of thing, then you are

220
00:15:41,240 --> 00:15:45,759
special in some way. Uh yeah, I remember Steven Sudovski gave me the

221
00:15:45,759 --> 00:15:48,799
best admistration i'd ever seen this to
the RDS when they were talking about I

222
00:15:50,000 --> 00:15:52,840
E. Nine, which was not
out yet, so that was such a

223
00:15:52,919 --> 00:15:54,519
the time frame forward. He says
to the room, there must be one

224
00:15:54,559 --> 00:15:58,480
hundred and fifty of us. How
many of you here use bookmarks? In

225
00:16:00,519 --> 00:16:03,519
the entire room puts up its hands. Yeah, yeah, would you like

226
00:16:03,519 --> 00:16:07,600
to see the doctor walks in data
for bookmark usage? It's two percent,

227
00:16:07,840 --> 00:16:12,240
right, you're talking to the people
that use the product more than anybody else.

228
00:16:12,480 --> 00:16:15,440
That's right, and in a much
different way. And I also appreciate

229
00:16:15,639 --> 00:16:21,120
that, you know, you have
the really two groups of people who are

230
00:16:22,600 --> 00:16:27,799
who don't want to maybe change everything
to use the new language features because they're

231
00:16:27,799 --> 00:16:33,360
maintaining old code and that would you
know the it's a cultural disruption. It's

232
00:16:33,399 --> 00:16:37,360
not a backward compatibility issue. It's
a cultural disruption, right. And then

233
00:16:37,399 --> 00:16:40,759
you have the people like like me
who are just on the forefront to in

234
00:16:40,840 --> 00:16:44,840
research every day and saying, you
know whoa that that's really cool. Let

235
00:16:44,879 --> 00:16:48,519
me show everybody how that works.
So, yeah, there's a there's a

236
00:16:48,559 --> 00:16:52,840
big difference between those groups. It's
definitely a span and we yeah, we

237
00:16:52,879 --> 00:16:56,879
want to have more circles of influence, so to speak, and we can

238
00:16:56,960 --> 00:17:00,360
now that we're so open and now
that we're shipping so frequent, right,

239
00:17:00,399 --> 00:17:06,400
so we get so we get people
on on GitHub helping us with the things

240
00:17:06,440 --> 00:17:10,839
we haven't done, we haven't finished
yet, and we have people um who

241
00:17:10,880 --> 00:17:15,720
are adopting new features as they come
out give us feedback in time for us

242
00:17:15,799 --> 00:17:22,319
to um choose the right next steps
for a given feature that's already shared.

243
00:17:22,559 --> 00:17:26,079
I appreciate that you It feels like
you guys, work on a given feature

244
00:17:26,119 --> 00:17:30,240
until you say, okay, that
now has value. Let's stop getting that

245
00:17:30,240 --> 00:17:33,400
out in the field and see how
they use it before we go any further.

246
00:17:33,640 --> 00:17:37,519
Yeah, yeah, sort of.
I mean it's not it's not enough

247
00:17:37,559 --> 00:17:41,880
to achieve minimum value necessary. We'll
go until we feel like, um,

248
00:17:41,920 --> 00:17:47,640
it's we'll do the things that we're
we feel certain are useful. Or is

249
00:17:47,640 --> 00:17:49,000
it you get to a point,
the fork in the road where it's like

250
00:17:49,119 --> 00:17:52,240
there's now three ways to go,
it's hard to tell which one's better.

251
00:17:52,640 --> 00:17:56,000
Maybe this is the best place to
stime. Yeah, it's often that kind

252
00:17:56,039 --> 00:17:59,720
of thing. Yeah, Or you
know, it's just it's just time because

253
00:18:00,079 --> 00:18:02,480
or isn't that long? And so
we're like this as far as we got.

254
00:18:02,519 --> 00:18:04,400
But this, this is a coherent
feature in and of itself, So

255
00:18:04,680 --> 00:18:08,480
we'll ship that because I'm sure there's
features that don't get put into the product

256
00:18:08,480 --> 00:18:11,519
that we're worked on in that year, and it's like, this is not

257
00:18:11,559 --> 00:18:14,319
there yet, it's going to slip
a cycle. We'll go, we'll work

258
00:18:14,319 --> 00:18:17,480
on it later. Absolutely, And
that was one of the one of the

259
00:18:17,480 --> 00:18:22,680
harder things actually with switching to a
yearly cadence is to make sure you keep

260
00:18:22,759 --> 00:18:26,640
doing things that take longer than a
year. Yeah, right right, you

261
00:18:26,640 --> 00:18:29,319
get hooked on that. I got
to deliver this every year. You're only

262
00:18:29,359 --> 00:18:32,400
taking you're making smaller things rather than
bigger things, right, Yeah. It

263
00:18:32,440 --> 00:18:34,720
has to be fine to work on
something that is not about to ship interesting,

264
00:18:34,920 --> 00:18:37,640
Okay, it has to be.
Is that more about good for the

265
00:18:37,759 --> 00:18:41,160
career or good for the product?
Like that's a that's the issue. Balance.

266
00:18:41,160 --> 00:18:44,839
It's like if nothing made it in
the latest release, that would be

267
00:18:44,839 --> 00:18:49,839
a problem. Also, that's true. I yes, so, But there's

268
00:18:49,920 --> 00:18:56,079
definitely a balance there where you want
and I think it comes sort of on

269
00:18:56,119 --> 00:19:00,160
its own if you look for the
right mix of features in general, some

270
00:19:00,200 --> 00:19:04,799
of them will be small, some
you know, quality of life features or

271
00:19:04,920 --> 00:19:11,680
medium that we can relatively quickly take
from idea to product and some and then

272
00:19:11,720 --> 00:19:14,920
but then we also just have to
keep those strategic lines in mind of we

273
00:19:15,000 --> 00:19:19,440
really want to grow the language on
this front, and we might spend several

274
00:19:19,519 --> 00:19:25,440
years before people see the first even
the first sort of down payment on a

275
00:19:25,480 --> 00:19:29,119
given feature direction. Also, I
imagine you've got groups of people, like

276
00:19:29,200 --> 00:19:33,079
you have the ADHD people working on
this year's features, and you have like

277
00:19:33,119 --> 00:19:36,720
the old time or long term people
who just want to work on code every

278
00:19:36,759 --> 00:19:38,920
day, working on those things that
are going to come out in a couple

279
00:19:38,960 --> 00:19:44,359
of years. That might be how
it pans out. I don't know about

280
00:19:44,440 --> 00:19:48,519
who has ADHD and who doesn't.
I know I do, but I still

281
00:19:48,519 --> 00:19:52,559
do work on the long term features. Yeah, but it's a personality trait

282
00:19:52,640 --> 00:19:56,119
too to folks who are great at
knock it out quick things of bols and

283
00:19:56,160 --> 00:20:00,839
enjoy a long duration we work at
the same thing every day. Yeah,

284
00:20:00,920 --> 00:20:03,039
that is that is true to some
degree. I think that, Um,

285
00:20:06,400 --> 00:20:12,240
I think that we generally have a
culture of also not of letting people span

286
00:20:12,359 --> 00:20:17,799
these different kinds of don't pigeonhole them
either. Yeah, like you only do

287
00:20:17,880 --> 00:20:21,799
short stuff. Yeah, don't actively
pigeonhole people for sure, Like everybody should

288
00:20:21,839 --> 00:20:25,519
have room to grow in a direction
they're not strong end and um, and

289
00:20:25,559 --> 00:20:27,440
I think that that works out pretty
well. So it's not so much that

290
00:20:27,519 --> 00:20:33,359
oh this, oh, this feels
like a Bob feature and this feels like

291
00:20:33,400 --> 00:20:37,960
a Katie features. That's not how
I want do people volunteer for features?

292
00:20:37,960 --> 00:20:42,359
Like how does this happen? Stuff
comes in on GitHub conversations go on,

293
00:20:42,480 --> 00:20:45,680
I see you generally in them.
You know, it's a sort of shepherd

294
00:20:45,720 --> 00:20:51,319
of the language. But how does
that happen? Well? So, um,

295
00:20:51,359 --> 00:20:53,880
there's sort of a there's the language
to sign team, and then there's

296
00:20:53,920 --> 00:21:00,000
the compiler team and other teams that
also do some work language related work.

297
00:21:00,559 --> 00:21:07,400
So first first there's the language designed
team, and that is sort of that's

298
00:21:07,440 --> 00:21:11,319
the thing I lead. That's I'm
the only dictatorial power I like to exercises

299
00:21:11,359 --> 00:21:15,920
that I get to decide who's on
that team. Right, So that's a

300
00:21:15,200 --> 00:21:19,960
that's a virtual team of people from
different parts. They're all work at Microsoft.

301
00:21:21,079 --> 00:21:26,319
It's not like a community forum.
That's it. It's it's one Microsoft

302
00:21:26,319 --> 00:21:33,000
employees, but they're plucked from various
parts of the product and from various um

303
00:21:33,160 --> 00:21:40,359
disciplines and backgrounds and generally the ideas
people who are passionate about c SHARP,

304
00:21:40,519 --> 00:21:45,839
who have great ideas, and who
are collaborative, and who collectively represent a

305
00:21:45,920 --> 00:21:49,480
bunch of different viewpoints. Right.
So you want folks from the compiler team

306
00:21:49,519 --> 00:21:52,759
there, and you want folks that
focus on the frameworks there like that have

307
00:21:52,799 --> 00:21:56,200
all those different views, but I
also have a passion for the language.

308
00:21:56,519 --> 00:22:00,319
Yeah, that essentially have enough passion
for the language that they want to invest

309
00:22:00,000 --> 00:22:07,039
essentially extracurricular time um in making CHR
good and working actively on its future.

310
00:22:07,160 --> 00:22:11,000
So um so that's where things go
first, essentially, because there's so much

311
00:22:11,039 --> 00:22:15,400
coming in on the I don't think
anyone reads everything that comes in on geth

312
00:22:15,440 --> 00:22:19,759
hubs. It's unbelievable, it's vast, right, So we um so we

313
00:22:19,839 --> 00:22:23,839
have a system, a championing system
that we've essentially stolen from academia, when

314
00:22:25,200 --> 00:22:33,359
from academic conferences. Um that for
a feature to reach discussion, make it

315
00:22:33,400 --> 00:22:37,960
to discussion in in in the design
team, someone on the design team needs

316
00:22:37,000 --> 00:22:41,119
to have champion ins they like I
want to discuss this. That gets it

317
00:22:41,160 --> 00:22:42,880
on the agenda. Then, which
we are shit, so to speak.

318
00:22:42,960 --> 00:22:48,119
See if it if we have a
feeling that it has legs and there's and

319
00:22:48,160 --> 00:22:51,799
there's a path forward. There are
many good features that fall at this stage

320
00:22:51,839 --> 00:22:55,920
because we just like that that would
be great, but a we don't know

321
00:22:55,920 --> 00:23:00,799
how to do it or be um, it's well, it would be great.

322
00:23:00,839 --> 00:23:03,519
There are these many things that are
greater. So I'll have to write

323
00:23:03,799 --> 00:23:08,160
so that. It can be frustrating
if you're out there trying to you know,

324
00:23:08,240 --> 00:23:11,240
get our attention. But it's just
we need some kind of filtering mechanism

325
00:23:11,319 --> 00:23:18,319
and this kind of everybody can scour
and then champion if there's something there that

326
00:23:18,359 --> 00:23:22,039
they think we should discuss, and
I you know, it's not necessarily that

327
00:23:22,119 --> 00:23:26,440
you want that we want that feature, it's that it warrants discussion. I

328
00:23:26,480 --> 00:23:33,039
got championed several features that I I
probably at the end of the day what

329
00:23:33,799 --> 00:23:37,319
at least initially didn't feel like was
the right thing. But it was bringing

330
00:23:37,400 --> 00:23:41,079
up a good discussion that we should
have. Right, but it's awful.

331
00:23:41,240 --> 00:23:45,640
It's just as powerful to have conversations
about the language shouldn't do as what the

332
00:23:45,680 --> 00:23:48,079
language should do. Yeah, right. It does help put parameters around things.

333
00:23:48,279 --> 00:23:52,319
I had to go look at the
rosal And repository and it's like fifty

334
00:23:52,400 --> 00:24:00,359
minutes ago another issue opened and it's
sixty seven thousands. At thirty eight there's

335
00:24:00,400 --> 00:24:03,839
eight thousand open and twenty two thousand
clothes. Is like, this is a

336
00:24:03,839 --> 00:24:07,519
lot of stuff. Bads holy Man. Yeah, Well, the Rosslyn repo

337
00:24:07,799 --> 00:24:12,480
is where the compilers built, and
so we started out having our language design

338
00:24:14,480 --> 00:24:18,680
go on in the same repo.
But we we branched it out fairly early

339
00:24:18,680 --> 00:24:22,680
on because it so we have our
own repo for the lengths design parts char

340
00:24:22,720 --> 00:24:27,759
B blang, right, which is
which doesn't have code in it as like

341
00:24:27,799 --> 00:24:33,640
the the the source in there is
is all documents, right, So we

342
00:24:33,799 --> 00:24:38,440
separated out the language design workstream.
It was it was two kind of semi

343
00:24:38,519 --> 00:24:41,559
separate audiences and it was a mess
to kind of have it all together.

344
00:24:41,680 --> 00:24:45,400
So when did you separate it out? Oh, it's it's a long time.

345
00:24:45,559 --> 00:24:48,559
It must been a few years.
Yeah, yeah, I mean it's

346
00:24:48,720 --> 00:24:51,759
at least five years ago. I
would say it was pretty early on.

347
00:24:51,799 --> 00:24:53,640
Like we first we were on what's
it called code Plex for a bit,

348
00:24:53,960 --> 00:25:00,559
ye didn't We cohabited co inhabited the
Rosslyn repo for year or two. I

349
00:25:00,559 --> 00:25:03,759
don't think it was longer than that. Okay, so that's twenty fourteen,

350
00:25:03,799 --> 00:25:07,079
twenty fifteen. Within a couple of
years you felt like you need to peel

351
00:25:07,119 --> 00:25:11,519
it off. I don't disagree at
all. And it's interesting to see.

352
00:25:11,559 --> 00:25:14,759
I'm looking at them side by side, C sharp lying and Roslin and the

353
00:25:14,880 --> 00:25:18,000
difference in the conversation, the kinds
of topics of show but C sharp lying

354
00:25:18,039 --> 00:25:22,079
are different. Yeah, And it's
kind of like you want to be able

355
00:25:22,119 --> 00:25:26,160
to talk about language without talking about
compilers, because most people who have something

356
00:25:26,119 --> 00:25:30,559
interesting to say about languages don't necessarily
know how I shouldn't know how a compiler

357
00:25:30,599 --> 00:25:34,359
works. Right. Part of doing
language design, of course is is this

358
00:25:34,440 --> 00:25:40,000
feasible to build? And you know
it could ever be efficient? You know

359
00:25:40,079 --> 00:25:41,960
that kind of thing, so you
do. Some of us on the design

360
00:25:41,960 --> 00:25:45,279
team do need to have compiler background, right, But that shouldn't be the

361
00:25:45,279 --> 00:25:48,799
only thing. Yeah, right.
It shouldn't be a thing that makes the

362
00:25:48,880 --> 00:25:53,200
language design discussion less welcoming. It
shouldn't be sort of a corner of a

363
00:25:53,200 --> 00:25:56,759
compiler place. So that so this
works really well that it means that people

364
00:25:56,799 --> 00:26:00,599
can come in with much more of
a user perspect on the thing. Yeah,

365
00:26:00,640 --> 00:26:04,039
and al and just to pure language
prospective, like I suspect some big

366
00:26:04,079 --> 00:26:08,079
ideas come out of here that turn
into this would be really hard to do,

367
00:26:08,240 --> 00:26:11,920
but does this showed up value that
it might be worth taking it on.

368
00:26:12,319 --> 00:26:15,519
Where As soon as you get to
boy, that's gonna be tough on

369
00:26:15,559 --> 00:26:18,039
local piler. A lot of stuff's
going to think yeah, yeah, and

370
00:26:18,079 --> 00:26:22,319
you you don't want a bunch of
people saying no, you want to at

371
00:26:22,400 --> 00:26:25,279
least you want to balance it with
another bunch of people saying but wait,

372
00:26:25,960 --> 00:26:30,480
yeah, so yeah, having having
breath they're both in the community and on

373
00:26:30,559 --> 00:26:33,799
the design team is really very very
useful. Nobody can kind of see all

374
00:26:33,839 --> 00:26:40,519
the perspectives at once, so diversity
just really is extremely useful. It spans

375
00:26:40,519 --> 00:26:45,799
out like this vast space of opportunity. Well, this feels like a good

376
00:26:45,799 --> 00:26:48,200
time to take a break because I
want to dive into some of the new

377
00:26:48,240 --> 00:26:49,920
features. But let's do that when
we come back. We'll be right back

378
00:26:49,960 --> 00:26:56,079
after this message. You know,
amazon Aws is a great home for your

379
00:26:56,119 --> 00:27:02,279
dot nem applications, whether you're looking
to run apps as serverless functions, have

380
00:27:02,359 --> 00:27:07,400
them running containers or you require the
complete flexibility of virtualized hardware. You can

381
00:27:07,440 --> 00:27:11,960
do it all on AWS. Dot
Net toolkits and templates guide you through build

382
00:27:12,000 --> 00:27:17,799
and deployment. Or you can use
your favorite infrastructure as code and CICD tools

383
00:27:17,960 --> 00:27:22,559
including Azure DevOps, GitHub Actions and
git labs, CICD, loving, Visual

384
00:27:22,599 --> 00:27:26,960
Studio, vscode, or Rider.
There's an AWS toolkit for each of them.

385
00:27:27,400 --> 00:27:33,160
Want to use familiar Microsoft sequelserver databases, you can with the Amazon Relational

386
00:27:33,279 --> 00:27:37,839
Database service, which provides fully managed
sequel server databases that offer automatic scaling,

387
00:27:38,000 --> 00:27:42,359
failover, and snapshots. Once your
dot net application is deployed, it can

388
00:27:42,480 --> 00:27:48,240
use any of the over two hundred
AWS services to extend its functionality. Interested

389
00:27:48,279 --> 00:27:53,720
in AI, IoT, machine learning, video processing, or transcription, Your

390
00:27:53,759 --> 00:27:59,160
dot Net on AWS application can do
it all. To learn more, go

391
00:27:59,200 --> 00:28:04,920
to AWS do, Amazon dot Com, slash Net. There is always something

392
00:28:04,960 --> 00:28:10,319
new from our sponsor text Control.
As a developer, do you need to

393
00:28:10,359 --> 00:28:15,799
integrate PDF generation, document editing,
or electronic signatures into your asp net,

394
00:28:15,799 --> 00:28:19,200
corps or Angular applications, or you
want to learn more about the differences between

395
00:28:19,279 --> 00:28:26,559
electronic and digital signatures. Text Control
is offering a free consulting service to educate

396
00:28:26,599 --> 00:28:30,440
you about digital document processing and how
text control products can help you add these

397
00:28:30,480 --> 00:28:36,599
features to your applications. Go to
text control dot com, slash contact and

398
00:28:36,720 --> 00:28:44,079
request your free personal consultation. And
we're back this Carl Franklin, you're listen

399
00:28:44,119 --> 00:28:47,440
to Dot and Rocks. That's Richard
Campbell. Hey, that's Mad's Tarkusen,

400
00:28:47,640 --> 00:28:52,039
the MADS scientists on the c sharp
team. And we've been talking about sort

401
00:28:52,039 --> 00:28:56,680
of the culture around how Microsoft,
you know, decides what comes in what

402
00:28:56,759 --> 00:29:00,680
goes out, and let's talk about
some new features. It looks like there's

403
00:29:00,680 --> 00:29:07,000
a lot of really cool small features, you know, default parameters and lambdas

404
00:29:07,039 --> 00:29:10,240
and things like that, but maybe
we can talk about some of the bigger

405
00:29:10,240 --> 00:29:14,039
things that you know that that people
may not know about. Yeah, I

406
00:29:14,039 --> 00:29:19,400
mean, we we shipped UM.
We ships Chever eleven in November of twenty

407
00:29:19,720 --> 00:29:26,440
twenty two, and that's when we
ship every year UM and there were there

408
00:29:26,480 --> 00:29:33,200
were some very big things in there
and some medium big things. A huge

409
00:29:33,240 --> 00:29:37,640
thing that is an example of a
multi year effort that that culminated in this

410
00:29:37,799 --> 00:29:45,640
release is UM that the language part
of it is static virtual members in interfaces.

411
00:29:45,680 --> 00:29:52,640
So that's that sounds a little gnarly, um but the the the it

412
00:29:52,640 --> 00:29:57,559
has several potential use cases that essentially, um are you know, new new

413
00:29:57,599 --> 00:30:00,559
abstractive power if you will. Sure, But the one that we really doubled

414
00:30:00,559 --> 00:30:04,440
down on as the first as a
use case for it, the one that

415
00:30:04,519 --> 00:30:11,160
kind of drove it home that we
are supporting in the framework is generic math.

416
00:30:11,559 --> 00:30:17,920
So the ability to have massive code
code with operators and so on be

417
00:30:18,319 --> 00:30:26,640
abstracted over the type that it's working
on. So the from a language point

418
00:30:26,640 --> 00:30:30,160
of view, the feature is that
an interface can now have that the virtual

419
00:30:30,440 --> 00:30:36,680
interface members can now be static.
Right. You can say a class that

420
00:30:36,759 --> 00:30:41,039
implements this interface must have this static
member must have for instance, this must

421
00:30:41,079 --> 00:30:47,599
have a plus operator, okay,
and or it must have this static property

422
00:30:48,000 --> 00:30:55,400
you know zero. So you can
imagine now interface is dictating the shape not

423
00:30:55,480 --> 00:31:00,240
just of the the instances of the
classes that implement them, but also the

424
00:31:00,279 --> 00:31:06,400
classes themselves. And that is that's
sort of the key new abstractive power,

425
00:31:06,400 --> 00:31:11,599
if you will, And it has
it has a number of really cool use

426
00:31:11,680 --> 00:31:14,720
cases. One of them, of
course, is what I mentioned, like

427
00:31:15,119 --> 00:31:18,720
you can now you can abstract over
math and we build a whole set of

428
00:31:18,720 --> 00:31:26,160
interfaces that represent different math capabilities,
essentially different sets of operators and stuff.

429
00:31:26,640 --> 00:31:30,519
And we implemented those interfaces on all
our own Mathew types, and now people

430
00:31:30,519 --> 00:31:37,559
can plug into those interfaces as well
with our own Mathew types and that,

431
00:31:37,799 --> 00:31:45,759
you know, just imagine doing abstract
composition. Like you have a matrix type,

432
00:31:45,039 --> 00:31:48,640
and you can say matrix of T
or TS element type of the matrix,

433
00:31:48,920 --> 00:31:55,519
and now you can require that T
implements the interfaces that represent the math

434
00:31:55,519 --> 00:32:00,359
operations you need in order to implement
the math operations on the matrix, like

435
00:32:00,559 --> 00:32:07,440
the if you want to do matrix
multiplication, for instance, well the elements

436
00:32:07,480 --> 00:32:10,119
need to be able to be added
and multiplied and they they're you know,

437
00:32:12,400 --> 00:32:15,680
if you if you want to build
an identity matrix, you need to have

438
00:32:15,440 --> 00:32:20,519
some representation of zeros and ones,
right and so on, and and you

439
00:32:20,559 --> 00:32:22,960
can now abstractor over all of that. You can say matrix of T,

440
00:32:23,279 --> 00:32:30,119
where T has these capabilities and the
interface is actually looks like it's implementing the

441
00:32:30,160 --> 00:32:35,039
math, right yeah, yeah,
which is weird. That's that's not an

442
00:32:35,079 --> 00:32:37,119
interface, that's a base class.
That's what my brain is telling me.

443
00:32:37,960 --> 00:32:42,559
I'm fighting against it. The interface
isn't implementing the math. It is just

444
00:32:42,680 --> 00:32:45,759
specifying the math, right, and
then types that implement the interface will implement

445
00:32:45,799 --> 00:32:51,720
the math. So the only it's
not the interface is not playing a different

446
00:32:51,799 --> 00:32:53,440
role, and it does. It's
still just like a contract, right,

447
00:32:53,480 --> 00:32:59,000
But it Okay, I see I'm
looking. I'm looking at them the docs,

448
00:32:59,400 --> 00:33:02,559
and was looking at the implementation,
not the interface. The interface public

449
00:33:02,599 --> 00:33:07,240
static of t like midpoint is the
thing that returns the midpoint of two double

450
00:33:07,319 --> 00:33:15,200
numbers. But the yeah, the
the interface doesn't actually do it. Yeah,

451
00:33:15,359 --> 00:33:19,480
right, it's very cool. I
mean you can have you can have

452
00:33:19,519 --> 00:33:23,400
default implementations of these things, just
that you can of other things nowadays.

453
00:33:23,440 --> 00:33:30,240
But um, yeah, the main
thing is that that you can, um

454
00:33:30,119 --> 00:33:35,400
you can specify a contract that is
about these static members. Yeah, but

455
00:33:35,519 --> 00:33:37,839
there are other users for that as
well. And one of the coolest I

456
00:33:37,880 --> 00:33:42,119
think is abstract static factories. Right
there, as these two design patterns,

457
00:33:42,160 --> 00:33:46,720
you have static factories, which are
up until now being static methods that produce

458
00:33:47,920 --> 00:33:52,920
instances of the class they're on or
a subclass or whatever they so they they

459
00:33:52,960 --> 00:33:58,920
sort of they abstract over constructors in
a way. They're like the details about

460
00:33:58,960 --> 00:34:05,839
how this update is constructed. But
that can't vary down a type hierarchy,

461
00:34:05,920 --> 00:34:08,920
right, the static it's a method
that's non virtual. Or you can have

462
00:34:09,280 --> 00:34:14,840
abstract factories which do vary by the
type of the thing they produce, but

463
00:34:14,960 --> 00:34:20,199
you kind of have to have a
parallel hierarchy of factories that implement the abstract

464
00:34:20,199 --> 00:34:24,239
factories for some other type hierarchy,
and which is like a pretty gnarly pattern

465
00:34:24,280 --> 00:34:28,159
to do with this. You can
just smoosh them together. You can say,

466
00:34:29,760 --> 00:34:35,679
everything that implements this interface has a
factory that takes these specific elements and

467
00:34:35,679 --> 00:34:40,480
produces itself produces that type that implement. Right. So so an example,

468
00:34:40,559 --> 00:34:50,440
for instance, is a think about
an eye possible. We actually have added

469
00:34:50,480 --> 00:34:53,199
such an interface as an eye possible
as a new interface in that I possible

470
00:34:53,239 --> 00:35:01,079
of T that has a static method
parts that it takes a string and returns

471
00:35:01,079 --> 00:35:06,599
a fresh instance of the type the
interface is implemented on of tea. Right,

472
00:35:06,639 --> 00:35:10,280
And so so all of a sudden
you can say you can get the

473
00:35:10,320 --> 00:35:16,480
symmetry between the If you think serialize
and de serialize, right. Serialized is

474
00:35:16,480 --> 00:35:21,519
an instance method on an object of
a given type, and de serialized now

475
00:35:21,599 --> 00:35:30,960
can be a static method that is
that is implemented specific to the specific type

476
00:35:30,000 --> 00:35:35,000
that it's working on, but abstracted
up in the same interface. So interesting,

477
00:35:35,400 --> 00:35:37,960
some beautiful things come out of that, and I'm I can't wait to

478
00:35:37,960 --> 00:35:39,800
see what else people do with this, because this is sort of like it's

479
00:35:39,920 --> 00:35:44,519
very rare that we add this kind
of new abstractive power to the language,

480
00:35:44,519 --> 00:35:45,639
to the very core of the language, Like it's in the run time and

481
00:35:45,679 --> 00:35:51,400
everything. It's like, this is
new expressiveness. This isn't just syntactic sugar

482
00:35:51,599 --> 00:35:55,559
or it's jenuine new expressiveness. And
it's fun to do that kind of feature.

483
00:35:55,800 --> 00:35:59,280
It's fun to see it, to
see what people do with it.

484
00:35:59,440 --> 00:36:01,800
How much energy do you put into
looking at what people are doing with it?

485
00:36:01,880 --> 00:36:06,119
Like I don't know how you'd go
about that, but it's surveys or

486
00:36:06,159 --> 00:36:08,639
something just to see, you know, people experimenting with this new feature.

487
00:36:09,039 --> 00:36:14,639
Well, we probably don't have enough
like systematic looking for it. We sort

488
00:36:14,639 --> 00:36:19,000
of say, if you do something
fun with it, please tell us and

489
00:36:19,039 --> 00:36:23,800
then you know. And we have
enough kind of interaction with customers and various

490
00:36:27,719 --> 00:36:30,920
in various fura that we do get
some examples of things. But but honestly,

491
00:36:31,920 --> 00:36:37,280
we probably don't do enough of kind
of Once the features in and it's

492
00:36:37,280 --> 00:36:42,800
too late, it might still be
good to do more to see is it

493
00:36:42,880 --> 00:36:45,599
actually being used the way we thought
or at all? Right, well,

494
00:36:45,599 --> 00:36:49,599
an inster stantime to sugar you could
have after the fact and later versions to

495
00:36:49,639 --> 00:36:52,239
make it easier to use too.
I mean, we've had this conversation before,

496
00:36:52,360 --> 00:36:55,519
but we've had abstract EDA factories for
a long time, and there are

497
00:36:55,800 --> 00:36:59,840
hard waste implemented. Like you said, gnarly code. Yeah, if you

498
00:37:00,079 --> 00:37:05,039
like that pattern. We've had approaches
to serialization, deserialization that exists. Like

499
00:37:05,599 --> 00:37:07,679
to me, it always seems like
the hardest thing about C sharp eleven is

500
00:37:07,679 --> 00:37:14,360
all the C sharp six out there. That's true. There's certainly the well

501
00:37:14,400 --> 00:37:15,960
we already have these patterns, so
too bad for us, you know.

502
00:37:16,400 --> 00:37:20,320
Yeah, that's often that thing that
we have to think about for a language

503
00:37:20,360 --> 00:37:25,960
feature. If it fundamentally changes something
that everybody already does in a certain way,

504
00:37:28,400 --> 00:37:31,960
including our own core libraries, well
it might not be worth doing.

505
00:37:32,039 --> 00:37:35,960
Even if it's like you can be
like, oh I wish we had done

506
00:37:36,000 --> 00:37:37,559
this from the start, the whole
world would be better. I can't I

507
00:37:37,559 --> 00:37:42,800
can't imagine how many times you say
that, right, you can't get maybe

508
00:37:42,800 --> 00:37:45,920
you can't get from here to there
in any like now you'll just have the

509
00:37:45,000 --> 00:37:51,199
old way in the new way coexisting
forever. Yes, um, which is

510
00:37:51,239 --> 00:37:57,440
actually a very an interesting um.
Like you read that comment in the beginning

511
00:37:57,480 --> 00:38:02,320
about discriminated unions, that's that's exactly
like one of those challenges where well they

512
00:38:02,400 --> 00:38:06,960
benefit in really well with what's already
there. It can't be just this new

513
00:38:07,000 --> 00:38:12,320
way of doing things, because then
how will it work with everything that's already

514
00:38:12,360 --> 00:38:15,840
there? Sure, so you have
to think about those things. Yeah,

515
00:38:15,880 --> 00:38:17,760
Because discriminated union, I mean,
it's it's coming from F sharp. It's

516
00:38:17,760 --> 00:38:22,719
about function passing like architectural. It's
a different thing. So it's not going

517
00:38:22,760 --> 00:38:25,800
to work well in C sharp.
You don't want to make C sharp into

518
00:38:25,840 --> 00:38:30,480
F sharp, right. I mean
there are versions of discriminated unions that can

519
00:38:30,599 --> 00:38:37,199
work well in C sharp, but
I think by and large they are ones

520
00:38:37,280 --> 00:38:42,320
that are very closely integrated with the
data modeling capabilities we already have. They're

521
00:38:42,320 --> 00:38:45,880
sort of like records to classes.
Is like records are not a new thing.

522
00:38:45,920 --> 00:38:52,199
There are kind of thing. They
are a vary end of classes that

523
00:38:52,199 --> 00:38:57,440
that can be treated as in most
ways just treated as classes, but they

524
00:38:57,519 --> 00:39:00,519
just do some extra things for you. And it's if you can do have

525
00:39:00,559 --> 00:39:06,280
that kind of relationship, then it's
it becomes less of a whole new like

526
00:39:06,840 --> 00:39:13,280
sublanguage and more of a fine grained
choice like here, I want to do

527
00:39:13,360 --> 00:39:17,039
this particular little hierarchy as a discriminated
union because that would give me these these

528
00:39:17,079 --> 00:39:21,960
certain benefits. Becomes that kind of
thing. It's much more, much more

529
00:39:21,960 --> 00:39:27,800
fine grain and much more local than
oh, everything should have been discriminated unions

530
00:39:27,800 --> 00:39:31,320
instead of time. You're crazy,
like you never you can't do anything about

531
00:39:31,360 --> 00:39:37,280
that, right. The install base
is the install base. And how often

532
00:39:37,360 --> 00:39:40,199
do you ever introduce breaking shages in
the language these days? I can't think

533
00:39:40,239 --> 00:39:45,480
of anything. Well, we very
much don't want to. Yeah, um

534
00:39:46,360 --> 00:39:51,159
and but but it's funny you should
bring it up, because we do.

535
00:39:51,239 --> 00:39:52,679
We are starting to have a little
bit of an itch there. Um.

536
00:39:52,920 --> 00:39:59,039
So we definitely don't want to ever
like remove a feature from chart or something

537
00:39:59,079 --> 00:40:02,079
like even we hate the most.
I'm sure there's a list of ones you'd

538
00:40:02,119 --> 00:40:06,679
love to remove, except for all
the loud screaming that would cur afterwards.

539
00:40:06,840 --> 00:40:09,519
Yeah, well you'd just be breaking
a bunch of code that works just fine

540
00:40:09,519 --> 00:40:15,159
today. How to make people angry
in one easy step, the one.

541
00:40:15,360 --> 00:40:19,480
So I actually don't believe that.
Well, the size of the language is

542
00:40:19,480 --> 00:40:22,000
a bit of a problem, like
we grow it, but we never shrink

543
00:40:22,039 --> 00:40:27,239
it. But I don't think the
solution to that is to start removing things

544
00:40:27,280 --> 00:40:31,280
from the language. We are we
are working towards. Bill Wagner recently started

545
00:40:31,920 --> 00:40:38,440
a project in the Docks Repo that
um that is starting to kind of very

546
00:40:38,519 --> 00:40:43,519
gently point out what I probably what
we call everyday c sharp you know,

547
00:40:43,960 --> 00:40:46,719
right, pople Given that you're starting
a new project and you don't have like

548
00:40:47,320 --> 00:40:52,960
a certain codebase or culture that you
need to abide by, what are the

549
00:40:52,159 --> 00:40:57,360
things that the ways that you should
probably do things nowadays? So it's kind

550
00:40:57,360 --> 00:41:01,280
of like a very soft bound to
we around. You're not going to say

551
00:41:01,320 --> 00:41:07,440
best practices because that's rude. Yeah, you're really going to say, hey,

552
00:41:07,480 --> 00:41:12,119
here's the set of approaches that really
take advantage of the what the current

553
00:41:12,119 --> 00:41:14,920
compiler can do for you. Yeah, yeah, it's I mean, because

554
00:41:14,960 --> 00:41:17,440
we add new features because we think
they do things better than than before.

555
00:41:17,559 --> 00:41:21,400
Right, that's a whole point.
So, but and we need to have

556
00:41:21,440 --> 00:41:28,039
some sort of counterweight to the to
the the just the sheer weight of old,

557
00:41:28,159 --> 00:41:30,920
old advice that's out there now yeah, to say nowadays, well you

558
00:41:30,920 --> 00:41:35,639
can actually do this instead. So
so that I think is we're trying to

559
00:41:35,719 --> 00:41:39,719
create a much softer counterbalance to that
that you can go and see, well,

560
00:41:40,119 --> 00:41:45,039
okay, I want to I'm open
minded. I want to try using

561
00:41:45,079 --> 00:41:47,960
c Chhart the best it can nowadays
in my next project or my team wants

562
00:41:49,000 --> 00:41:51,440
to do that. Well, this
is where this is a good place to

563
00:41:51,480 --> 00:41:54,719
start. And I love that it's
Bill doing that because he is everybody's granddad.

564
00:41:55,360 --> 00:41:58,880
He didn't have a knacker putting his
arm around your shoulder, you know,

565
00:41:59,039 --> 00:42:01,559
metaphorically and say it's going to be
okay, let's go, let's take

566
00:42:01,559 --> 00:42:05,119
a walk and we'll figure this out. That's exactly right. Yeah, he

567
00:42:05,159 --> 00:42:13,199
has a lot of compassion for developers, like regardless of how leaning into new

568
00:42:13,239 --> 00:42:16,920
features they are and whatnot. And
he's a really good person to drive striking

569
00:42:16,920 --> 00:42:22,079
that balance. But there is one
other problem with the back compat, and

570
00:42:22,119 --> 00:42:27,159
that is that occasionally it is when
we add a new feature, it is

571
00:42:27,880 --> 00:42:36,599
limited in very annoying ways because of
some because of some you know, old

572
00:42:36,639 --> 00:42:40,840
code could accidentally occasionally or whatever,
like already look like this, right,

573
00:42:42,800 --> 00:42:46,800
So we want to introduce a new
keyword in a certain context or whatever,

574
00:42:46,880 --> 00:42:50,840
Well, there could be available with
that name or a type with that name

575
00:42:50,920 --> 00:42:54,639
somewhere, and we have to bend
over backwards to accommodate those old cases,

576
00:42:54,679 --> 00:42:58,239
even if they're relatively rare, and
so on, And it does make the

577
00:42:58,280 --> 00:43:01,280
language more narly. And people know, I mean people know a var right

578
00:43:01,440 --> 00:43:06,480
var. When we introduced var,
in order not to break people, we

579
00:43:06,559 --> 00:43:08,760
had to take into account the fact
that somebody could have a type called var

580
00:43:08,920 --> 00:43:15,199
with lower case V right, And
so the language is is more gnarly than

581
00:43:15,239 --> 00:43:17,480
it would have to be. We
could just have said, well, sorry,

582
00:43:17,519 --> 00:43:20,440
this is a keyword, or in
the type decision, this is a

583
00:43:20,519 --> 00:43:22,639
keyword. We would have broken a
few people, but not very many.

584
00:43:22,920 --> 00:43:28,119
Instead, what we have is this
awkward rule that if you declare something called

585
00:43:28,239 --> 00:43:32,559
var in scope, then the feature
var is put out of like it's just

586
00:43:32,639 --> 00:43:38,239
turned off, right, And that
is that actually sucks for everyone, except

587
00:43:38,400 --> 00:43:42,440
there are a few people don't like
var who actually declare a type called var

588
00:43:43,119 --> 00:43:49,920
and just so that they can a
piler out, they can force for other

589
00:43:49,920 --> 00:43:53,599
people on the team not to use
a variable named var. I look on

590
00:43:53,679 --> 00:43:58,599
you with the same disdain that I
looked on basic programmers that had a dollar

591
00:43:58,679 --> 00:44:02,679
sign in b dollar sign for variable
places you know so far, Oh boy,

592
00:44:02,719 --> 00:44:07,400
that's that's great. And I think
the best example in recent years is

593
00:44:07,639 --> 00:44:14,159
discards. I mean you can go
almost everywhere. You can use a discard

594
00:44:14,239 --> 00:44:17,199
to mean like a throwaway variable that
I assigned to and I don't care about

595
00:44:17,199 --> 00:44:22,360
the result, and that I can
pass us an out parameter when I don't

596
00:44:22,400 --> 00:44:25,360
care about the result and that kind
of stuff. Right, It's just a

597
00:44:25,440 --> 00:44:30,119
variable without a name that you can
never get back to, except that underscore

598
00:44:30,199 --> 00:44:36,280
is already a valid variable name,
and so that in some places, in

599
00:44:36,360 --> 00:44:43,000
some places underscore is a variable and
in some places it's a discard, depending

600
00:44:43,039 --> 00:44:46,159
on whether it could have meaning before
this feature was introduced. And that is

601
00:44:46,199 --> 00:44:49,599
just nuts man, And they get
it's like, what do you do in

602
00:44:49,760 --> 00:44:53,760
name in something underscore like stop it? Well, actually a bunch of people

603
00:44:53,800 --> 00:45:00,159
did, because they were simulating.
They were using that to signal that they

604
00:45:00,159 --> 00:45:04,599
wanted that was a discard. So
most of the people who do actually probably

605
00:45:04,639 --> 00:45:07,679
would be fine, yeah breaking that
and just using a real discard, But

606
00:45:07,719 --> 00:45:10,559
there are a few that use it
for other things for whatever reasons. You

607
00:45:10,599 --> 00:45:14,159
know, yeah it was there,
it was available. Can you tell me

608
00:45:14,199 --> 00:45:16,440
why somebody would use discard? I
mean discard first of all, is like

609
00:45:16,480 --> 00:45:21,960
when you say underscore equals and then
some function that returns something that you don't

610
00:45:21,960 --> 00:45:24,840
care about, but you could still
call that function that returns something without having

611
00:45:24,880 --> 00:45:29,719
a return value. Why do you
need that discard in that case? Well,

612
00:45:29,719 --> 00:45:31,559
there are functions you can you can
call a function as a statement.

613
00:45:31,599 --> 00:45:34,880
It's not everything you can do as
a statement. So essentially, if you

614
00:45:34,920 --> 00:45:38,679
want to do something, you want
to do something that can't be a statement,

615
00:45:39,559 --> 00:45:43,679
so an express like you want to
add two things just to see if

616
00:45:43,719 --> 00:45:46,199
your conversions work out right or whatever. I don't know why. There are

617
00:45:46,199 --> 00:45:52,119
a bunch of things that aren't allowed
as statements in short, but there's also

618
00:45:52,199 --> 00:45:59,239
there are things that require a variable. For instance, um, so a

619
00:45:59,239 --> 00:46:04,239
couple of good samples are out parameters. We're just like, yeah, I

620
00:46:04,239 --> 00:46:06,480
don't care about this one, I
do care about that one. So now

621
00:46:06,519 --> 00:46:08,960
you can pass a discard for one
of them. And you can actually declare

622
00:46:08,960 --> 00:46:15,039
a variable in place with an outbars
inside step seven and whenever that was also

623
00:46:15,159 --> 00:46:19,920
deconstruction. Um. Yeah, this
thing returns to two pole of four things.

624
00:46:20,000 --> 00:46:22,800
I care about the three, but
the fourth I don't care about.

625
00:46:22,840 --> 00:46:27,840
Why do I have to declare a
dummy variable and call it dummy variable to

626
00:46:27,960 --> 00:46:31,320
receive that fourth thing? Why don't
I just put an underscore and say to

627
00:46:31,440 --> 00:46:35,840
say, don't care okay, right, and make it clear to anybody reading

628
00:46:35,840 --> 00:46:37,559
it, I don't care about this
exactly. Yeah, maybe that's it,

629
00:46:37,760 --> 00:46:42,639
Richard. It's more readable. Yeah, it's a legibility. It's a strong

630
00:46:42,719 --> 00:46:45,280
and very brief signal that you know, don't care about this, don't care

631
00:46:45,320 --> 00:46:50,119
about But and it's a wonderful feature
and the only thing not wonderful about.

632
00:46:50,159 --> 00:46:52,119
And I think I don't have evidence
for this, but I'm sure that it

633
00:46:52,199 --> 00:46:58,039
has harmed its adoption to some degree. Is that it's so gnarly that and

634
00:46:58,239 --> 00:47:00,840
occasionally it's not a discard. When
you see an underscore, it's not a

635
00:47:00,880 --> 00:47:06,960
discard. And that is just navigating
those rules for developers just silly. Yeah,

636
00:47:07,039 --> 00:47:10,800
it's like the English language, all
these exceptions to obvious rules. Yeah,

637
00:47:10,840 --> 00:47:15,679
and so all this is to say, that is something where I think

638
00:47:15,800 --> 00:47:19,320
we're we have an active discussion now
and it'll you know, we'll probably get

639
00:47:19,320 --> 00:47:22,480
it out and get introduce it as
a breaking change. I get something down

640
00:47:22,480 --> 00:47:28,559
that we can have sort of like
a very a very light breaking change in

641
00:47:28,559 --> 00:47:34,559
those situations. Its like enough to
push existing features over in a few scenarios

642
00:47:36,039 --> 00:47:37,880
as so that we don't have to
do a stupid design of the new one

643
00:47:37,920 --> 00:47:43,719
for the sake of everyone's future.
Yeah, it's got a hurt to introduce

644
00:47:43,719 --> 00:47:47,840
a new feature damaged by the past, especially if it's a past that isn't

645
00:47:47,840 --> 00:47:53,639
that important. That's a simple So
if there's a simple little fix that even

646
00:47:53,679 --> 00:47:57,920
we could automatic we have to do
a new feature, it'll break a few

647
00:47:57,960 --> 00:48:00,400
things. That's a simple fix that
we can just you know, if you're

648
00:48:00,400 --> 00:48:02,239
in an ide, we can just
say, hey, this is going to

649
00:48:02,280 --> 00:48:06,639
be broken. Just want to fix
all of them. You know, say,

650
00:48:06,719 --> 00:48:08,159
if you have a if there's a
field somewhere all called underscore, do

651
00:48:08,199 --> 00:48:10,679
you want to say this stood underscore
instead? Do you want to rename this

652
00:48:10,760 --> 00:48:15,920
to to understood one rename k yeah, yeah, yeah. This is this

653
00:48:16,000 --> 00:48:21,960
gets into that conversation about the tooling
helping the language. Yeah, that's true.

654
00:48:22,199 --> 00:48:24,119
But at the same time, you
can't really assume that everybody's using in

655
00:48:24,199 --> 00:48:29,639
a rich ide like visual studio.
Yeah, you know, no, that's

656
00:48:29,639 --> 00:48:35,559
completely coore. So we so,
um, we have to be and that's

657
00:48:35,639 --> 00:48:38,840
the devil is really in what is
the what is an acceptable experience? Like

658
00:48:39,039 --> 00:48:44,360
a what is an acceptable level of
break has to be small? Um,

659
00:48:44,480 --> 00:48:49,639
has to be really well justified,
um, and be what is an acceptable

660
00:48:49,639 --> 00:48:53,119
experience when we do do it,
and that this may all very well come

661
00:48:53,119 --> 00:48:57,679
to nothing because there is no good
sweet spot there. Um. We're just

662
00:48:57,719 --> 00:49:00,199
starting to poke at it, and
we'll try to write up some things and

663
00:49:00,880 --> 00:49:04,719
put out in the community. It
might already be be out by the time

664
00:49:04,760 --> 00:49:10,000
this publishes, and where they may
not, but try to get more community

665
00:49:10,039 --> 00:49:15,559
input on what is an acceptable experience
here? That doesn't really that doesn't boil

666
00:49:15,599 --> 00:49:21,400
the ocean for this in some other
way. Yeah, I appreciate that.

667
00:49:22,400 --> 00:49:25,000
The You and I've talked a number
of times both online and offline about the

668
00:49:25,039 --> 00:49:30,360
whole how do we get folks using
the new features? Like the side effect

669
00:49:30,360 --> 00:49:34,960
of twenty plus years of development of
a language is all that stuff and people

670
00:49:35,360 --> 00:49:37,599
you know, I joke about people
coding like it's two thousand and five,

671
00:49:37,920 --> 00:49:43,119
but I'm sure they're folks that are
doing that. And you said many times

672
00:49:43,119 --> 00:49:49,400
like it's the tooling. We see
these large language models showing up everywhere.

673
00:49:50,280 --> 00:49:54,039
Do you look at leaning on that
kind of technology to help people write more

674
00:49:54,079 --> 00:50:00,320
moderncy sharp? I that's it.
Oh, that's an interesting kind of um

675
00:50:01,079 --> 00:50:06,159
cross discipline question there. Yeah.
I mean, and you're not the visual

676
00:50:06,199 --> 00:50:09,920
studio guy, but Visual Studio seventeen
point five and twenty twenty two seventy point

677
00:50:09,960 --> 00:50:15,119
five, you could see some of
this stuff starting to appear. Immediately,

678
00:50:15,119 --> 00:50:16,960
think, are you going to help
me write better C sharp? Because I'd

679
00:50:16,960 --> 00:50:20,800
like that by C sharp not that
good. I'd still like to ask for

680
00:50:20,880 --> 00:50:25,840
it though, Yeah, and I
think there's um yes, the answer is

681
00:50:25,920 --> 00:50:29,599
yes, And you're already seeing it, and you see things like a pilot

682
00:50:29,679 --> 00:50:35,400
and in telecode and so on,
like you're already seeing AI based things creep

683
00:50:35,400 --> 00:50:40,559
in and I and they're very localized, but you could definitely you will see

684
00:50:40,559 --> 00:50:45,360
this keep growing. And does it
impact the language creation to think about the

685
00:50:45,360 --> 00:50:52,159
tooling U Yes, to some degree, but more in a more traditional way

686
00:50:52,199 --> 00:50:54,840
like that that has nothing to do
with AI per se, but we um

687
00:50:55,440 --> 00:51:01,760
it impacts us. We've certainly for
many years focused on being able to create

688
00:51:01,760 --> 00:51:07,000
a good idea experience, not so
much able to in a can we implement

689
00:51:07,000 --> 00:51:09,880
a kind of sense? But is
it doesn't flow naturally all the way think

690
00:51:10,239 --> 00:51:16,159
all the way back to query expressions
in link, which if you think about

691
00:51:16,199 --> 00:51:21,719
it, they're based on sequel queries
for their structure, right, But in

692
00:51:21,719 --> 00:51:28,480
in sequel you say select from where, and in C sharp you say from

693
00:51:28,519 --> 00:51:34,039
where select. So the order of
that is. The change in order is

694
00:51:34,239 --> 00:51:38,519
so that you're introducing your variables first, so that the subsequent parts of the

695
00:51:38,599 --> 00:51:43,920
query can use inteli sense. So
if you're in a type of head mode,

696
00:51:45,960 --> 00:51:51,079
the things that you're projecting out at
the end actually are at the end

697
00:51:51,119 --> 00:51:52,800
by the time that you've established what
they are and what they look like.

698
00:51:52,880 --> 00:52:00,480
So that was clearly driven by having
a tooling perspective. Yeah, so the

699
00:52:00,599 --> 00:52:04,800
order of things in syntax, well, you talk about regrets for language designers.

700
00:52:04,800 --> 00:52:07,679
I bet the sequel folks load the
fact that they put select ahead of

701
00:52:07,760 --> 00:52:10,880
from you know, like they because
it's so apparent. Now it's like to

702
00:52:12,039 --> 00:52:15,280
find the sources of data then what
you request. I personally think it makes

703
00:52:15,320 --> 00:52:19,480
more sense. Well, it reads
more like English. Yeah, and it

704
00:52:19,519 --> 00:52:23,280
also it also is from very general
to very specific, right, which is

705
00:52:23,360 --> 00:52:30,119
what compilers like. Yeah. One
question that I have I've come across in

706
00:52:30,239 --> 00:52:37,280
my travels a desire to serialize link
expressions. Not the implementation, so to

707
00:52:37,360 --> 00:52:42,159
speak, but just like a link
expression, you know, like we were

708
00:52:42,199 --> 00:52:45,360
just talking about from X and this
and select and all. That would be

709
00:52:45,480 --> 00:52:49,760
very cool to turn that into some
JSON, send it over the wire,

710
00:52:50,159 --> 00:52:53,400
and then allow an API, let's
say, to execute it. What do

711
00:52:53,400 --> 00:52:57,599
you think about that? I think
there are several instances of it out there,

712
00:52:57,719 --> 00:53:02,800
none of already. That's probably true. That's not my fault though I

713
00:53:02,280 --> 00:53:08,000
don't know. But well, the
thing is if you if you take a

714
00:53:08,960 --> 00:53:15,400
link query and um, you start
with a data source that is I queriable

715
00:53:15,760 --> 00:53:21,320
rather than innumerable, that is,
in other words, that is expression tree

716
00:53:21,320 --> 00:53:23,719
based, Well, then the query
does in fact become a data structure,

717
00:53:23,880 --> 00:53:30,639
right, The query itself is a
data structure, um, and you so

718
00:53:30,880 --> 00:53:34,960
that means that you can you can
find a way to serialize that. Now

719
00:53:35,000 --> 00:53:40,880
there's still um if the query is
all written out in text, Well,

720
00:53:40,920 --> 00:53:46,000
every every single part of the expression
becomes part of the expression tree, and

721
00:53:46,039 --> 00:53:52,960
it's fully like scrutable whatever. The
opposite of inscrutable is um an abstraction around

722
00:53:53,039 --> 00:53:58,320
it. But it kind of hurts
because you have to take into account every

723
00:53:58,400 --> 00:54:02,000
data type and then every operation for
you know, you know, less than

724
00:54:02,119 --> 00:54:07,639
greater than starts with events with like
all of those things have to be uh,

725
00:54:07,800 --> 00:54:10,199
you know, it's a great big
switch statement. But yeah, I

726
00:54:10,239 --> 00:54:14,840
didn't say it was going to be
easy. You can't do it. I

727
00:54:14,840 --> 00:54:22,559
mean, you're you're basically decomposing and
deconstructing a select statement and into its constituent

728
00:54:22,639 --> 00:54:29,119
parts and then turning that into data. But h and of course we do

729
00:54:29,199 --> 00:54:31,159
various forms. I mean, if
you think about it, uh, something

730
00:54:31,199 --> 00:54:37,159
like endy framework is sort of that. It's just that the serialization format if

731
00:54:37,159 --> 00:54:43,800
you will sequel right right, yeah, very good. So is there anything

732
00:54:43,840 --> 00:54:47,119
new for pattern matching coming in C
sharp twelve or do people not even know

733
00:54:47,159 --> 00:54:51,519
what's there in eleven? Um?
I think people are still discovering what's there

734
00:54:51,519 --> 00:54:54,480
in eleven. That might be a
little more in twelve. We don't have

735
00:54:54,599 --> 00:54:59,400
that much plan in twelve pound matching, But I can't talk about both briefly.

736
00:54:59,480 --> 00:55:02,000
Yeah, I think that's what one
of those features that C sharp programmers

737
00:55:02,039 --> 00:55:06,000
are kind of like, huh yeah, that's kind of a head scratcher.

738
00:55:06,119 --> 00:55:12,159
When do I need that? You
need pattern matching when you have logic to

739
00:55:12,199 --> 00:55:19,159
select which way to go? That
is getting gnarly and hard to hard to

740
00:55:19,840 --> 00:55:24,119
keep in your head. What what
pattern matching does, and in particular switch

741
00:55:24,800 --> 00:55:29,639
statements and expressions with patterns do is
that they can give you a very neat

742
00:55:29,800 --> 00:55:35,880
list of that under these circumstances.
To do this under those circumstances, do

743
00:55:35,960 --> 00:55:42,199
that that is highly kind of like
readable um, straight line and readable so

744
00:55:42,559 --> 00:55:47,400
um patterns? Can you know?
There are various kinds of patterns. We

745
00:55:47,480 --> 00:55:51,559
only there were only a few patterns
when we introduced the overall feature and C

746
00:55:52,000 --> 00:55:55,320
seven and then we've been it's one
of those features that we've just been able

747
00:55:55,360 --> 00:55:59,320
to say, Okay, what is
the next what would be the next useful

748
00:55:59,400 --> 00:56:01,280
pattern? If you look at a
language like f shark, it has a

749
00:56:01,280 --> 00:56:07,480
bunch different patterns. The sort of
classic example of a of a pattern in

750
00:56:07,480 --> 00:56:13,559
a functional language actually is a list
pattern um where you um, you match

751
00:56:13,719 --> 00:56:16,440
a list, you can match an
empty list in one case, and then

752
00:56:16,480 --> 00:56:22,039
you can match um a list that
has an element and some remaining you know,

753
00:56:22,159 --> 00:56:25,960
arrest um in another case, or
various ways to match a list and

754
00:56:25,960 --> 00:56:29,880
then do different things depending on the
shape of the list, very much tailored

755
00:56:29,960 --> 00:56:36,079
to linked the lists and that kind
of UM classic functional approach to that UM

756
00:56:36,119 --> 00:56:38,159
And so for a long time we've
been mulling what is the Is there like

757
00:56:38,239 --> 00:56:46,360
a non linked list specific counterpart to
that that we could add to see shirt

758
00:56:46,440 --> 00:56:50,480
And that's what became list patterns into
sharp eleven. So we have a really

759
00:56:50,480 --> 00:56:54,559
good syntax now and patterns to say
to you know, you get something in

760
00:56:55,239 --> 00:56:58,960
you say, um, well it's
the first element is this and the last

761
00:56:59,000 --> 00:57:02,519
element is that, you know,
grab the rest into this variable and then

762
00:57:02,559 --> 00:57:08,480
execute this branch and you know,
so um, it's um. It's just

763
00:57:08,599 --> 00:57:15,719
yet another way to decompose your input
in a very sixcinct readable way and you

764
00:57:15,760 --> 00:57:21,239
know, check its shape and decompose
it at the same time and use the

765
00:57:21,280 --> 00:57:25,760
bits that you drag out of it
if you if you indeed match the shape

766
00:57:25,800 --> 00:57:31,199
of the thing. I can imagine
like a boolean method is sorted. Yeah,

767
00:57:31,280 --> 00:57:35,960
right, that would be a good
UM A good thing to use list

768
00:57:36,000 --> 00:57:42,000
pander matching on UM rather than having
to go iterate through everything and determine if

769
00:57:42,000 --> 00:57:45,119
it really is sorted. It could
possibly be. Yeah, I'd have to

770
00:57:45,159 --> 00:57:49,320
think about how to how to do
that, but yeah, it's it's quite

771
00:57:49,320 --> 00:57:52,960
possible that you could use that in
the implementation, certainly if you're doing some

772
00:57:52,000 --> 00:57:57,519
sort of divide and conqueror. I
guess, I don't know. It depends

773
00:57:58,199 --> 00:58:02,360
right UM. And so for C
sharp twelve, we don't have big new

774
00:58:02,400 --> 00:58:07,239
plans. We we're probably going to
expand the reach of list patterns a little

775
00:58:07,280 --> 00:58:12,239
bit to more kinds of types like
to innumerables for instance, aren't covered today

776
00:58:12,639 --> 00:58:20,480
UM, and a few other things
like allowing the same variable to be used

777
00:58:20,519 --> 00:58:24,519
in multiple disjoint parts of a pattern
so you can you know, it's just

778
00:58:25,000 --> 00:58:28,679
various kinds of little optimization. I
don't think that's going to be a big

779
00:58:28,719 --> 00:58:36,000
thing in pattern magic. Any other
great big wamping features that you want to

780
00:58:36,079 --> 00:58:39,960
lay on us for twelve UM,
Well, there are some things that we

781
00:58:40,760 --> 00:58:46,400
would really like to do in twelve. M One is actually the feature that

782
00:58:46,400 --> 00:58:52,639
that triggered us talking about back compat
again is UM is what we call field

783
00:58:52,679 --> 00:58:59,320
access in auto properties. So you
know, an auto property is a very

784
00:58:59,480 --> 00:59:02,239
tercht int act that just generates a
backing field for the property and the getter

785
00:59:02,280 --> 00:59:08,880
and the setter public string food,
get set Yeah exactly. Yeah. And

786
00:59:09,000 --> 00:59:13,840
you know, immediately after we added
that and we knew that full well,

787
00:59:14,960 --> 00:59:16,239
people will start to climber for a
well, can I just do this as

788
00:59:16,280 --> 00:59:19,119
well? And can I just do
that as well? And that is sort

789
00:59:19,159 --> 00:59:21,800
of like and we've added little things
to auto properties over the years, but

790
00:59:22,119 --> 00:59:24,960
it sort of represents the fact that
there's really a cliff where and there still

791
00:59:25,079 --> 00:59:29,559
is where if I wanted to just
one tiny little thing, then I have

792
00:59:29,639 --> 00:59:32,440
to expand this out to a full
property implementation and a private backing field that

793
00:59:32,480 --> 00:59:37,199
I'm manually declared, or like,
can we smooth out that cliff? More

794
00:59:37,280 --> 00:59:43,000
so? The idea here is that
if you're if you're writing a property and

795
00:59:43,559 --> 00:59:47,519
inside of an access or, you
know, if you don't if an accessor

796
00:59:47,599 --> 00:59:52,679
is not implemented, then okay,
that means this is an auto property and

797
00:59:52,760 --> 00:59:55,719
there's a backing field and the access
is automatically implemented for you. But you

798
00:59:55,719 --> 01:00:00,360
could also actually have an access or
implementation on both could you could pride an

799
01:00:00,360 --> 01:00:07,119
implementation and inside of that implementation,
you can reference a generated back you know,

800
01:00:07,199 --> 01:00:12,960
backing field with the with the variable
name field. So we've got to

801
01:00:13,000 --> 01:00:16,840
introduce the variable name field variables all
over my code. What are you doing

802
01:00:16,880 --> 01:00:22,000
to me? Yeah? Yeah,
so that's so that's why we need to.

803
01:00:22,320 --> 01:00:25,679
Um, like, if you were
if you were in certain if your

804
01:00:27,239 --> 01:00:34,599
domain is particle physics or agriculture or
whatever, you know, field might be

805
01:00:34,639 --> 01:00:37,719
a common common simulator. Yeah,
oh yes, yeah, yeah, that's

806
01:00:37,719 --> 01:00:43,880
another one. Um. So that's
a kind of feature that we can we

807
01:00:43,920 --> 01:00:46,119
really want to introduce it. There's
no like, we could try to come

808
01:00:46,199 --> 01:00:50,280
up with a more obscure keyword instead
of field. But who are we helping

809
01:00:50,320 --> 01:00:52,480
if we may get super obscure.
Yeah, and this is a this is

810
01:00:52,480 --> 01:00:57,719
exactly the feature that it was so
lovely for people to have. But there

811
01:00:57,760 --> 01:01:00,199
are a few places where you will
just have to say stut field instead of

812
01:01:00,239 --> 01:01:05,000
field when you're inside, when you're
inside of an accessor or property act.

813
01:01:05,119 --> 01:01:09,039
Okay, and that's if you think
about it. We already have value in

814
01:01:09,239 --> 01:01:13,159
properties. Value is such a variable, right and people just know that.

815
01:01:13,320 --> 01:01:15,599
Okay, if I have a fuel
coal value I can I can have a

816
01:01:15,679 --> 01:01:17,519
fuel coal value, that's fine.
But if I want to get at the

817
01:01:17,559 --> 01:01:22,000
field, I just say this stud
value instead of value because value is shadowed.

818
01:01:22,119 --> 01:01:24,679
Right, it's not no mystery and
it won't be mystery in the future

819
01:01:24,719 --> 01:01:29,440
either with Field if we do it
the right way. The only mystery is,

820
01:01:30,079 --> 01:01:32,519
you know, how can I make
sure that all the places where I

821
01:01:32,599 --> 01:01:38,519
don't say this dut field today don't
get broken in some kind of nasty Yeah.

822
01:01:38,760 --> 01:01:42,400
So, yeah, that's one that
we're really eager to do. We

823
01:01:42,480 --> 01:01:45,119
wanted to do it last release,
and then this particular issue came up that

824
01:01:45,199 --> 01:01:49,639
we're like, we're about to do
it the wrong way. Let's not,

825
01:01:49,800 --> 01:01:51,920
let's try to see if we can
do it the right way. And I

826
01:01:52,000 --> 01:01:54,840
suspected you. You only realize that
fairly far down the path. It's like,

827
01:01:54,920 --> 01:01:59,039
there's going to be a right and
wrong way to do something. Well,

828
01:01:59,119 --> 01:02:02,039
we knew all long, but we
because we have that kind of brains,

829
01:02:02,400 --> 01:02:05,960
have been conditioned to work like that, So we knew very early on

830
01:02:06,119 --> 01:02:07,199
that, yeah, this is gonna
be a problem. But we were just

831
01:02:07,320 --> 01:02:13,519
reaching for a standard solution quote unquote, which was, well, we'll just

832
01:02:13,639 --> 01:02:20,960
contort ourselves till it fits right,
Star of my Life. Yeah, all

833
01:02:21,039 --> 01:02:22,880
right, man's man, it's been
great. The hours flown by and that's

834
01:02:23,000 --> 01:02:27,079
that always makes for a good show. So thanks for coming back and keep

835
01:02:27,199 --> 01:02:30,360
us informed. Thanks for having me. It's been a pleasure as always,

836
01:02:30,480 --> 01:02:54,119
all right, and we'll see you
next time on dot net rocks. Dot

837
01:02:54,199 --> 01:02:59,559
net Rocks is brought to you by
Franklin's Net and produced by Pop Studios,

838
01:03:00,039 --> 01:03:05,199
a full service audio, video and
post production facility located physically in New London,

839
01:03:05,280 --> 01:03:09,280
Connecticut, and of course in the
cloud online at pwop dot com.

840
01:03:10,119 --> 01:03:15,559
Visit our website at dt n et
r ocks dot com for RSS feeds,

841
01:03:15,800 --> 01:03:21,519
downloads, mobile apps, comments,
and access to the full archives going back

842
01:03:21,559 --> 01:03:24,960
to show number one, recorded in
September two thousand and two. And make

843
01:03:25,000 --> 01:03:29,559
sure you check out our sponsors.
They keep us in business. Now go

844
01:03:29,679 --> 01:03:34,079
write some code. CNX time Van
