WEBVTT

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

