Speaker 1: How'd you like to listen to dot net rocks with
Speaker 1: no ads?
Speaker 2: Easy?
Speaker 1: Become a patron for just five dollars a month. You
Speaker 1: get access to a private RSS feed where all the shows.
Speaker 2: Have no ads. Twenty dollars a month.
Speaker 1: We'll get you that and a special dot net Rocks
Speaker 1: patron mug. Sign up now at Patreon dot dot NetRocks
Speaker 1: dot com. Hey guess what, it's dot net rocks. I'm
Speaker 1: Carl Franklin and a Verchard Campbell. Dustin Campbell. No relation
Speaker 1: is here. He's our guest today.
Speaker 2: I wish I was cool enough to be related to Dustin, honestly.
Speaker 1: Talking to him in a minute. Richard, you remember that
Speaker 1: when we were on the scott net Rocks tour.
Speaker 2: Yes, we went.
Speaker 1: To that pub and the sign said no Campbell's allowed. Yes,
Speaker 1: and you sat down in front of the sign and
Speaker 1: I hung your head and shape we take.
Speaker 2: A picture that turns out actually relating to those Campbell's
Speaker 2: so right.
Speaker 1: Yeah, yeah, well, let's get started with better no framework, awesome.
Speaker 2: Apart man, what do you got Simon crop, the source
Speaker 2: of all the amazing Simon Crop.
Speaker 1: Yes, yeah, sources of all good things on the internet. Anyway,
Speaker 1: found this it's Ziggy Creatures account on GitHub fusion cash.
Speaker 1: So it's an open source, fast, easy to use, robust
Speaker 1: hybrid cash with advanced resiliency features. And they even you know, say,
Speaker 1: you know what about this Microsoft hyper cash hybrid cash
Speaker 1: that they came out within dot net nine, so they
Speaker 1: actually addressed that, you know, what's the difference in how
Speaker 1: can it work together? But these guys got an award
Speaker 1: from Google. Oh yeah, in twenty twenty one, fusion cash
Speaker 1: received the Google Open Source Peer Bonus Award. So you
Speaker 1: know it does it does all sorts of things right,
Speaker 1: but resiliency features, performance, scalability features, flexibility, observability like native
Speaker 1: observability supportvia open telemetry, full sync and async support. Like
Speaker 1: it's really good. Yeah, and it's all open source and
Speaker 1: know and learn it, love it, go get it.
Speaker 2: That's pretty cool. Yeah.
Speaker 1: They don't don't try and solve this problem. It is
Speaker 1: solved totally. You have several options. Don't do it yourself.
Speaker 2: Yeah, So he was talking to us today, Richard Braud
Speaker 2: the comment off of show eighteen thirty five, which is
Speaker 2: back in twenty twenty three. We did another show called
Speaker 2: The Next Sea Sharp, but this was with Mads, I've
Speaker 2: temporarily called the show the Next Sea Shop, but who
Speaker 2: knows what's going to happen. We're just beginning to recording
Speaker 2: off and change the name after right. And we had
Speaker 2: a pun of comments on those shows, as usual, because
Speaker 2: there's lots of See Sharp lovers listen to the show,
Speaker 2: and when the gods of See Sharp show up to
Speaker 2: talk to us about it, they have things to say. Yeah.
Speaker 2: This comment comes from Aaron Morgan, who said, what I
Speaker 2: love about discards the underscore is that they show intent.
Speaker 2: I'm a big believer in self documenting code, and discards
Speaker 2: form part of this toolbox, particularly with returned tuples or,
Speaker 2: as Mads mentioned, deconstructors. You don't always want to use
Speaker 2: all the parameters.
Speaker 1: Yeah, this is the underscore thing that you can return.
Speaker 1: It's not really returning anything, but it shows that you
Speaker 1: know something is being returned even though you're not using it.
Speaker 3: Yeah.
Speaker 2: But it's a discard, yeah, discard. Yeah. I understand that
Speaker 2: they also avoid memory allocation of that variable, although I'm
Speaker 2: not sure if that later compilers figure out that var
Speaker 2: isn't used or infers a discard at run time anyway. Yeah, okay,
Speaker 2: and it might even change as the different versions. This
Speaker 2: is a couple of versions you go to. I bet
Speaker 2: you Dustin can probably answer that one. I'm sure you can.
Speaker 2: So Aaron, thank you so much for commented. A copy
Speaker 2: of music code By is on its way to you.
Speaker 2: And if you'd like a copy of music code to
Speaker 2: comment on the website at dot rocks dot com or
Speaker 2: on the facebooks. We publish every show there. And if
Speaker 2: you comment there and I read on the show, well,
Speaker 2: don't do your copy used to go by.
Speaker 1: And if you want music to code By but you
Speaker 1: don't want to comment, just go to music to code
Speaker 1: by dot net. There's twenty two tracks. Now you can
Speaker 1: get the collection an MP three, flack or wave format.
Speaker 1: All right, So before we bring on Dustin, we got
Speaker 1: to talk about nineteen sixty four because that's our show number. Yeah,
Speaker 1: and we've been talking about Dustin. We've been talking about
Speaker 1: what happens, you know, in the years that our show
Speaker 1: numbers represent. So nineteen sixty four was a big year
Speaker 1: for a lot of things. Civil Rights Act was signed
Speaker 1: yep in past outlawing discrimination based on race, color, religion, sex,
Speaker 1: or national origin. The Gulf of Tonkin Resolution. The resolution
Speaker 1: authorized major US involvement in the Vietnam War. So one
Speaker 1: so far, that's one one positive, one negative. Martin Luther
Speaker 1: King Junior was awarded the Nobel Peace Prize in nineteen
Speaker 1: sixty four. On February ninth, the Beatles made their first
Speaker 1: appearance on The Ed Sullivan Show, starting American Beatlemania. On
Speaker 1: February twenty fifth, Cassius Clay announced his name changed to
Speaker 1: Muhammad Ali after defeating Sonny Liston for the heavyweight boxing title.
Speaker 1: I'm more kil Sonny Listen, Sonny Listen. I'm gonna knock
Speaker 1: out Sonny Listen.
Speaker 2: Yeah, he was something else.
Speaker 1: The Ford Mustang was unveiled at the New York World's
Speaker 1: Fair on April seventeenth, becoming an iconic American car. How
Speaker 1: about that. The Boston Strangler, the final known murder, occurred
Speaker 1: in nineteen sixty four, marking the end of a series
Speaker 1: of crimes that terrorized the city. Kashmir, India backed out
Speaker 1: of a promise to hold a plebiscite in the disputed
Speaker 1: territory of Kashmir, escalating tensions in the region. And you know,
Speaker 1: they've been pretty much at at odds ever since.
Speaker 2: They've been escalated ever since let's be clear.
Speaker 1: Yeah, with a few close calls, if I remember correctly, Yeah,
Speaker 1: China tested its first atomic bomb, becoming the fifth nation
Speaker 1: to possess nuclear weapons.
Speaker 2: How about that? Who were the other four? Okay?
Speaker 1: Well, the United States obviously, I'm gonna say Russia, Soviet Union,
Speaker 1: Soviet Union.
Speaker 3: Yeah.
Speaker 2: Yeah. And let's say who were the other two?
Speaker 1: France and United Kingdom. Oh okay, yeah, of course France,
Speaker 1: all right? And smoking. US General Surgeon General released a
Speaker 1: report linking smoking to cancer, influencing public health policies. That
Speaker 1: happened early in the year. Do you have any computer
Speaker 1: or otherwise events that you want to talk about?
Speaker 2: A couple of space ones, the first flight of Gemini one,
Speaker 2: which was an unmanned test flight of that whole stack
Speaker 2: that would be the for the American missions for long
Speaker 2: duration in space before the Saturn rockets and Mariner four launches,
Speaker 2: the first flyby of Mars. On the computer side of things,
Speaker 2: the first program written and executed written in basic yay,
Speaker 2: happens in nineteen sixty four. Yeah, Kenedy and Kurtz from Dartmouth.
Speaker 2: Dartmouth ran on a GE two two five. Although became
Speaker 2: rapidly so popular they had to upgrade that machine. Yeah,
Speaker 2: and what else? Oh, the first mouse prototype so Bail
Speaker 2: English and Nigola Singlebart out of the Stanford Research Atitude.
Speaker 2: Although they originally called it the Bug.
Speaker 1: Wait a minute, I thought that was Xerox Park Or
Speaker 1: did Xerox Park show it to Steve Jobs.
Speaker 2: Integrated it into a full product? This was the prototype?
Speaker 2: This is before that, before that? Oh okay, yeah, all right,
Speaker 2: so yeah, initially called the Bug, then later named the Mouse.
Speaker 2: By the next year and one for you, Carl, Robert
Speaker 2: Moog demonstrates his first Moog synthesize Wow keyboard with the
Speaker 2: patch panel with all the effects and within that year
Speaker 2: the doors will make the song Strange Days featuring the move.
Speaker 1: Did I tell you my Robert Moog story or Mog
Speaker 1: or how you pronoun So? When I was working at
Speaker 1: Voyetra Technologies and these guys did the sound blaster and
Speaker 1: the MIDI interface basically that was there. That's how they
Speaker 1: got popular. Then they became Turtle Beach. But anyway, I
Speaker 1: was working for them and doing tech support and we
Speaker 1: were at a NAM show in Los Angeles and we
Speaker 1: had a booth and Robert Moog comes over with a
Speaker 1: young girl who I imagine is his granddaughter. And he says, oh,
Speaker 1: this is really neat stuff. Check this out. Can you
Speaker 1: give us a demo? And he's looking at it and
Speaker 1: she looks bored to death. Right, She's a thirteen year
Speaker 1: old girl who would rather be anywhere except with Grandpa
Speaker 1: synth here, who's gonna take her around all these booths.
Speaker 1: So I did a demo and stuff, and I saw
Speaker 1: his badge that it was Robert Moog and so now
Speaker 1: I'm like, you know.
Speaker 2: Now you're starstruck. I'm gobsmacked.
Speaker 1: Right, Yeah, So I did a demo and then I
Speaker 1: walked over the lead programmer after and I said, hey,
Speaker 1: I just gave a demo sequence of plus to Robert Moog.
Speaker 1: He goes, oh, that guy he comes around every year,
Speaker 1: so Blase, yeah, he comes around. We give him the
Speaker 1: same demo every year. So that's my story. That's awesome.
Speaker 1: If that's all we got, I guess it's time to
Speaker 1: introduce Dustin. Yeah officially, so dust NEARBIA hasn't changed that much,
Speaker 1: but it has a little bit. Dustin Campbell is a
Speaker 1: principal software architect in dot net Tooling, where he currently
Speaker 1: works on Razor c Sharp and visual basic language experiences.
Speaker 2: For visual Studio and Visual Studio code.
Speaker 1: Passionate about coding productivity, Dustin's primary focus is on making
Speaker 1: dot net tooling great and helping design the next version
Speaker 1: of c sharp as part of the language design team.
Speaker 1: Prior to his current role, he spent several years working
Speaker 1: as program manager on Project Rosalind maybe you've heard of
Speaker 1: that couple times design, Yeah, designing the next generation of
Speaker 1: the see sharp and vb ID experiences. Dustin is a
Speaker 1: programming nut. His favorite color is blue. Well, I notice
Speaker 1: you have a blue shirt on and I'm wearing blue.
Speaker 2: He's wearing a blue shirt. Yeah, yeah, yeah, Well, welcome back.
Speaker 3: Well, thank you.
Speaker 2: You guys have been busy. I guess huh.
Speaker 3: It's uh yeah, it's always it's always busy times. It's
Speaker 3: been exceedingly busy lately. So yeah, it's really good.
Speaker 2: We just hit preview six. Granted we're time shifting this,
Speaker 2: but yeah, I think, yeah, we just did preview six,
Speaker 2: maybe previous haven by the time this show publishes.
Speaker 3: Yeah, yeah, about there. I honestly the previews probably for
Speaker 3: many folks that blur. For me, I'm not sure. Yeah, sure,
Speaker 3: I try and keep my eyes on C sharp fourteen. Right,
Speaker 3: but even still as kind of features come in from
Speaker 3: that and get merged into Maine, I'm like, is this
Speaker 3: feature in this build? I don't remember. It's hard to keep.
Speaker 2: Track, and I appreciate you guys didn't go all superstitions
Speaker 2: and skip thirden It just shipped with dot net nine, Like, yeah,
Speaker 2: it did twelve ship with dot net aid And we're
Speaker 2: not afraid of numbers. Programmers.
Speaker 3: We tried to, you know, we it was a thing.
Speaker 3: We were like, well, should we do that, because you know,
Speaker 3: we did it with other things. We've done that before.
Speaker 3: It wasn't officially for superstitious reasons, but somehow we managed
Speaker 3: to magically skip thirteen on other things, and we're like, no, no, no,
Speaker 3: we're going to embrace this.
Speaker 2: Yeah, you skip Windows nine too. That was mostly for
Speaker 2: compatibility nightmares, right.
Speaker 3: I think that turned out to be painful, But you know.
Speaker 2: I was a very wise choice that we're not going
Speaker 2: to do a nine because of all the nine X,
Speaker 2: the ninety five, ninety eight, Like did you just don't?
Speaker 3: Yeah?
Speaker 2: Yeah?
Speaker 3: And it wasn't OS ten envy, right, So yeah, it
Speaker 3: wasn't actually not no, no, I couldn't.
Speaker 2: Have been no, I'm pretty sure Windows eleven was OS
Speaker 2: eleven envy, but then you know whatever. You know. I
Speaker 2: also do the show called Windows Weekly, and I hear
Speaker 2: this stuff all at time. Yeah, so you're all about fourteen. Yeah,
Speaker 2: I mean I would think that the previews are important
Speaker 2: to you just because this is when you sort of
Speaker 2: put the bits in more people's hands.
Speaker 3: Yeah, and they start to kind of crystallize. I mean really,
Speaker 3: there's also the moments we have that are like, okay,
Speaker 3: you know, there's build, you know, there's various events throughout
Speaker 3: the year. You know, dott a comp comes up where
Speaker 3: we try and actually, you know, ship the thing weird.
Speaker 3: But at those moments we try and have like some
Speaker 3: constellation of features together so that it kind of hangs together.
Speaker 3: And then it's about kind of getting feedback, adding enhancement
Speaker 3: stuff we know that we need to finish up and
Speaker 3: wrap up or things that are coming later throughout the previews,
Speaker 3: but yeah, we try and get kind of those moments
Speaker 3: to be a little more cohesive.
Speaker 1: So and your mads usually do your walk through video
Speaker 1: about you know, what's new and c sharp.
Speaker 2: I always enjoy those.
Speaker 3: We did that in May. Yeah, we did the What's
Speaker 3: New in C sharp fourteen, we shared all the and
Speaker 3: what was great about that was in this case we
Speaker 3: had everything ready to go in the latest with at
Speaker 3: least experience in the latest dep seventeen the fourteen preview
Speaker 3: with seventeen fourteen that went out, so it was you know,
Speaker 3: you hadn't tellisons on the new features that shipped with
Speaker 3: the dot net preview then in your hands, so you
Speaker 3: didn't have to go grab some you know, beta thing
Speaker 3: or preview thing. It was right there. I mean you
Speaker 3: had to get you know, the SDK to build, but
Speaker 3: the features were there.
Speaker 2: How much of the new features or feedback from the
Speaker 2: old version and how much are like epics you've been
Speaker 2: planning for many versions that finally come to fruition.
Speaker 3: Well, in this case, I think most of them are
Speaker 3: are kind of the longer planning ones for fourteen. You know,
Speaker 3: we started trying to do this, but in a way
Speaker 3: a lot of them are still even this one. I'm
Speaker 3: thinking about the new extension members feature that's coming, sure,
Speaker 3: but that's still like, well, we did extension members, you know,
Speaker 3: fifteen years ago with which with methods only right and
Speaker 3: C sharp three, so this is kind of like a
Speaker 3: continuation of that, but we had a really different idea
Speaker 3: last year, kind of like in C sharp thirteen, of
Speaker 3: what we thought that would look like, and ended up
Speaker 3: going back to the drawing board on it and coming
Speaker 3: out with something that looks more like what people knew
Speaker 3: and knew from extension methods already. So in that way,
Speaker 3: it kind of is a continuation, but also it's been
Speaker 3: a long, kind of planned sort of thing where we've
Speaker 3: really had to work very hard and kind of toil
Speaker 3: a little bit more on the designs.
Speaker 2: And I know it's something we've heard over over again
Speaker 2: from folks like you and Anders and Mads. It's like,
Speaker 2: you're really careful about putting a feature into a language
Speaker 2: because you pretty much can never take it out.
Speaker 3: Every language has kind of a capacity too writ like
Speaker 3: where you get over that jump the shark moment where
Speaker 3: it's like, all right, this is too much now, and
Speaker 3: then you're.
Speaker 2: Like yeah, I was kind of saying.
Speaker 3: Then you're like, you know, then you have to have
Speaker 3: your good bits moment with JavaScript or your C plus plus,
Speaker 3: your modern C plus plus moment where you're trying to
Speaker 3: like shed things that like, Okay, yes this is for legacy,
Speaker 3: but please don't use this for modern things.
Speaker 1: I was going to say, Dustin, do you have customers
Speaker 1: and people that provide feedback that you have so many
Speaker 1: features that kind of overlap, right, and when to use
Speaker 1: what and how to use what? And I can see
Speaker 1: people just wanting to exercise the new stuff for the
Speaker 1: sake of doing it, and you know, the guidance is
Speaker 1: really important, like here's when you do this, here's when
Speaker 1: you do not do this.
Speaker 3: Absolutely yeah, and we do get that feedback. It's I was,
Speaker 3: you know, we were talking about recently. We're like, man
Speaker 3: c sure one Oh was a way simpler language. It
Speaker 3: was way clear on how to do a thing because
Speaker 3: there was just the one way.
Speaker 1: Visual basic forms designer was easy too, because you have
Speaker 1: no choices, yeah, no options.
Speaker 3: Yeah, and so it was it was, it was. It
Speaker 3: was easy. You could still do pretty much all the
Speaker 3: things I mean, but you might write a lot more
Speaker 3: code to do it. It's just you know, so so
Speaker 3: in some cases there is that like we need to
Speaker 3: decide what, like when and why to do something. Sometimes
Speaker 3: it's it's taste too right, Some things peel to others.
Speaker 3: Sometimes there's a really important reason to have it go.
Speaker 3: Let go back to var which is so controversial and
Speaker 3: I love bringing it up because it just brings controversy
Speaker 3: and comments, but still to this day. Right, But it
Speaker 3: had a very important reason to be there, which was,
Speaker 3: you know, because you didn't have a way to put
Speaker 3: a type for an anonymous type if you were putting
Speaker 3: something into a projection and like a link query, right
Speaker 3: and a link expression. So that's what they were there for. Functionally,
Speaker 3: they had to be there. But then they're also kind
Speaker 3: of convenient, and they're you know, three letters long, which
Speaker 3: means you put that in a space and now everything
Speaker 3: lines up. All your types line up to the tabs
Speaker 3: if you have your ends set to four and you know,
Speaker 3: and so they get it could use a lot, and
Speaker 3: then people get grumpy or people get happy, and and
Speaker 3: and and so then at that point it becomes like, well,
Speaker 3: taste or you know, is my program clear? And you
Speaker 3: have to kind of you know, but you kind of give.
Speaker 3: We give often it seems like we give people too
Speaker 3: many I don't know, handguns to shoot themselves in their
Speaker 3: feet with.
Speaker 2: Sometimes yeah it's not only your foot, it's like here, yeah,
Speaker 2: try both feet at once.
Speaker 3: We we you know, back in C sharp one, Oh,
Speaker 3: I know, we were a lot more prescriptive about some
Speaker 3: of those kinds of things. An example that comes up
Speaker 3: a lot we talk about still is like if I
Speaker 3: recall and I might be wrong about this because things
Speaker 3: change all the time and they change subtly, but like,
Speaker 3: at least at the beginning, I know that we were
Speaker 3: very specific about like no, try catch Finally, they must
Speaker 3: have braces, right, yeah, they cannot be embedded statements like
Speaker 3: an if where you can choose to have braces or not,
Speaker 3: because we felt very prescriptive, like no, you need the
Speaker 3: delay nation to see. These are very different contexts and
Speaker 3: what you're trying to do there, And I think that's
Speaker 3: still the case today, but we constantly get requests to know,
Speaker 3: come on, I'm.
Speaker 2: Putting one statement like this is just too much.
Speaker 1: Do you think you guys would be relying more on
Speaker 1: co pilot agent to be prescriptive about what you're doing?
Speaker 1: You know, I don't mean like Clippy, but Hay and hey,
Speaker 1: I noticed that you're trying to do this link statement
Speaker 1: and it'd probably be a lot easier if you use
Speaker 1: this method instead of that one. I mean, I mean
Speaker 1: you're kind of doing that already with for sure, with
Speaker 1: copilot yeah, we.
Speaker 3: Do it already. I mean I think I think a
Speaker 3: you know, a coding agent or you know, something you
Speaker 3: know like like Copilot is going to be, you know,
Speaker 3: hopefully doing that. I I also hope that you know,
Speaker 3: an agent like that is also going to be looking
Speaker 3: at like the code base you're on, right, So that
Speaker 3: if I am on a legacy code base and this
Speaker 3: code base happens to always new up a raised with
Speaker 3: new erase and tax and doesn't use collection expressions, it
Speaker 3: doesn't use any of these kinds of things, I would
Speaker 3: hope it's not saying you should be using collection expressions
Speaker 3: on this line of code you just wrote, and it's like, no, no,
Speaker 3: it should look like the rest of the code, right.
Speaker 3: And so I would hope that when we get those
Speaker 3: coding agents that that are, that they're smart enough to
Speaker 3: kind of keep you in your context too while maybe
Speaker 3: allowing you to say, you know, I would like suggestions
Speaker 3: that help me kind of move this forward bit by bit.
Speaker 3: So I don't know, maybe.
Speaker 2: Because it does strike me with you doing annualships of
Speaker 2: dot net, like the rate of new versions of c
Speaker 2: sharp has gone up, and you know, you can still
Speaker 2: code like it's twenty fifteen, Like it works just fine,
Speaker 2: you can. And I think it's a question I asked
Speaker 2: of mad As a number of years ago, just like,
Speaker 2: how are you going to convince us to use the
Speaker 2: new syntax? And it's like, I think that's what the
Speaker 2: tooling's all about, is helping to guide you to more
Speaker 2: efficient ways to code.
Speaker 3: Yeah, if it's going to cause if it's going to
Speaker 3: help with efficiency for exam, is a great reason. Right,
Speaker 3: It's one of the reasons we did a collection expressions.
Speaker 3: I I love collection expressions, and that's the square brackets
Speaker 3: right where you just past things in a square bracket
Speaker 3: and it picks the type, you know, based on what
Speaker 3: you're passing it into or what you're assigning it to,
Speaker 3: and then gives you a type that might be something
Speaker 3: that was compiler generated, might be just list of T
Speaker 3: might be you know, array dot empty, depending on what
Speaker 3: you're doing with it. And but the point is that
Speaker 3: that allows me to kind of, you know, allows the
Speaker 3: compiler at least to be able to be very efficient
Speaker 3: in what it generates, so we can do things like
Speaker 3: when you start because those features, that feature also allows
Speaker 3: for spreads and combining collections together, and it can try
Speaker 3: and do that as efficiently as possible, and hopefully, you know,
Speaker 3: it's it's code that like, it ends up making your
Speaker 3: code look better to do something more efficient, whereas if
Speaker 3: you'd written the more efficient way, it would have been
Speaker 3: a mess. I find that a lot also with list patterns,
Speaker 3: where if I'm doing a list pattern is somewhat complex,
Speaker 3: and then I, you know, I start to stray away
Speaker 3: from it a little bit. But but when I get
Speaker 3: when I get into a list pattern, I look at
Speaker 3: the code that it got generated, I'm like, oh, I
Speaker 3: would never write this. This is way in the weeds.
Speaker 3: But the compiler is bending over backwards trying to do
Speaker 3: the most efficient thing at the il level that it
Speaker 3: can do. So I mean, that's one of the reasons
Speaker 3: to kind of go those go with those new things too.
Speaker 2: Visual studio code versus visual studio.
Speaker 3: Which is your favorite? A, oh, well, it depends on
Speaker 3: the day of the week, Carl, I dog food both.
Speaker 3: I love visual studio. It is the starship enterprise. However
Speaker 3: it is. You know, it is a lot. I'm really
Speaker 3: used to it, and I know keyboard shirtcuts all over
Speaker 3: the place. I know I can get around it really
Speaker 3: fast and so I I and and often I'm sometimes
Speaker 3: I'm also working on visual studio pieces like visual studio
Speaker 3: components and things that are like, oh, it's it's kind
Speaker 3: of easier. I mean, I can debug these things with
Speaker 3: with VS code as well, but it's like, hey, but
Speaker 3: I'm doing mixed mode debugging of some old calm thing.
Speaker 3: I'd rather I'd rather be in visual studio. We're into
Speaker 3: the tools better.
Speaker 1: I wish the Razor code editor was better Razor file
Speaker 1: Code Editor.
Speaker 3: No, I do too. I've been working on it for
Speaker 3: a while. Sorry, we're trying. We're working on it. We
Speaker 3: have we have some some things coming that I hope
Speaker 3: will u We'll make things coming.
Speaker 2: Let me make you have here, all right, things?
Speaker 3: Yeah, okay, we we do have some things coming that
Speaker 3: I hope will make that easier and better for you.
Speaker 2: All right. So there's a studio code.
Speaker 3: Yeah, visual studio code. I love visual studio code for
Speaker 3: I don't know. I open it every time I want
Speaker 3: to do it. Get marriage personally, it's just easy. But
Speaker 3: I I like the copied experience a lot in there.
Speaker 3: We have we also have different things that we're dog
Speaker 3: fooding at Microsoft, different models and things that show up.
Speaker 3: One might show up in VS code first, one might
Speaker 3: show up in Visual Studio first. And one of the
Speaker 3: great things for Visual Studio Code is that it's just
Speaker 3: it's just it's just faster to release and get things
Speaker 3: an experiment and prototype. And so when we did our
Speaker 3: build demo actually this year, what the stuff that didn't
Speaker 3: ship in the released Visual Studio that we wanted to
Speaker 3: show that was kind of like you know, kind of
Speaker 3: hot bits you know that I built on the side.
Speaker 3: Was it was very easy to light up Visual Studio
Speaker 3: Code with that and start playing around with it and
Speaker 3: show those features than in Visual Studio Code. It's just
Speaker 3: great for that kind of rapid prototyping.
Speaker 1: I have an I nine machine and so running Visual
Speaker 1: Studio is no problem for me. It's very fast and
Speaker 1: I have lots of RAM. But I know that, you know,
Speaker 1: if on a less powerful laptop, that might take a while,
Speaker 1: you know to do stuff that I'm used to on
Speaker 1: my desktop. So Visual Studio Code works really well on
Speaker 1: lower power machines.
Speaker 3: Yeah. Yeah, the Visual Studio Code, to be fair, is
Speaker 3: getting big. Oh you know, it is getting bigger.
Speaker 2: Well it's not getting calm though, No.
Speaker 3: No, no, it's not going to be one would hope
Speaker 3: single threaded apartment model anything. Yeah, in Visual Studio code,
Speaker 3: but it's uh, well it's single threaded though you know
Speaker 3: it's all process all different processes right right, but but
Speaker 3: it's uh yeah, visual it's it's Visual Studio code was
Speaker 3: lean when I was working on it, you know, about
Speaker 3: six six years ago. I was like, oh, this is amazing.
Speaker 3: And then it's gotten bigger and bigger as a as.
Speaker 2: People make demands on it.
Speaker 3: Right, I also use it for more things, so I've
Speaker 3: got more extensions in there, I've got more stuff loaded in,
Speaker 3: and yeah, it bulks up, but it is great.
Speaker 2: You start to wonder if we shouldn't be setting up
Speaker 2: profiles where it's like, oh I need to work as
Speaker 2: a Python code that's a configuration, or yeah, here I
Speaker 2: am editing Jason again. You know, it's so does it
Speaker 2: have the idea of templates like visual studio does.
Speaker 3: No Visual Studio Code it does, but we we so
Speaker 3: when we did c sharp def kit, we introduced a
Speaker 3: like a new project command and thing that basically what
Speaker 3: that does is it goes through the dot that new
Speaker 3: command and pulls in all those templates. So it uses
Speaker 3: what you've got at the command line.
Speaker 2: That's cool, that's cool. Yeah, I don't use it so much.
Speaker 1: I mean, Jeff Fritz is a is a huge code fan,
Speaker 1: a Visual Studio Code fan, and so when he does
Speaker 1: his Blazer puzzles, they're usually in Visual Studio Code. When
Speaker 1: I do them, they're usually in Visual Studios. So but
Speaker 1: I'm just I'm watching from the aside, you know, I'm
Speaker 1: I'm watching to see when will Visual Studio Code have
Speaker 1: all the features that I need from Visual Studio so
Speaker 1: that I could make the jump because I'd like to.
Speaker 3: Yeah, it's it's a it's a really different model, right right, Yeah,
Speaker 3: I mean Visual Studio Code doesn't have a lot of
Speaker 3: visual in it either, right, So he doesn't have the
Speaker 3: designers and those kinds of things, and they avoid.
Speaker 2: But it's also the difference between an IDE and an
Speaker 2: editor with extensions. It just seems like a different philosophy.
Speaker 2: I don't really use the designers anyway.
Speaker 3: Yeah, so Visual Studio Code is getting closer to that
Speaker 3: IDE model now, right, some of these some of the extensions.
Speaker 3: C sharp dev gets a great example where you know,
Speaker 3: I always said that, like you know, an ID is
Speaker 3: the thing that kind of lays down the whole tool
Speaker 3: chain for you, so you have everything there ready to
Speaker 3: go to build your solution. But vis code like some
Speaker 3: of the extensions they do that and and it's it's
Speaker 3: becoming more id like in that sense.
Speaker 1: And you have hot reload so you can you know,
Speaker 1: work on it and look at it in another window
Speaker 1: and you know, h So, yeah, that's about all I
Speaker 1: use the designers for is just to check, you know,
Speaker 1: if I'm doing examle or something like that, just to
Speaker 1: check to make sure it looks right.
Speaker 3: And we're working hard on making that better and better too.
Speaker 3: So I'm the hot reload great.
Speaker 2: So how much time is your language and how much
Speaker 2: is tooling when you're working?
Speaker 3: When I'm working most of it when I'm coding, most
Speaker 3: of it is tooling. I don't. I do very little
Speaker 3: work on say, like the compilers. I work on the
Speaker 3: Razor compiler a little bit right now, just because there's
Speaker 3: there's a lot of low hanging performance fruit in there.
Speaker 3: But I but mostly I'm working in the tooling space,
Speaker 3: so doing things in hot reload, doing things and you
Speaker 3: know and see sharp and mostly in Razor. For like
Speaker 3: the last couple of years, I've had a lot of
Speaker 3: fun work. I swapped over and said, I'll work on
Speaker 3: Razor for a while. That's been really fun cool. Before that,
Speaker 3: I did the wind forms designer for dot net Core
Speaker 3: and so that that was the thing. So I kind
Speaker 3: of try and bounce around a little bit and sometimes
Speaker 3: I want to go really deep on something. And it's
Speaker 3: been Razor for a little bit.
Speaker 2: Awesome.
Speaker 1: Well, I can't wait till I'm looking forward to those
Speaker 1: upcoming things that you talked about.
Speaker 3: We see, Yeah, they're not They're in the open. You
Speaker 3: can go look them up.
Speaker 2: Yeah, I mean there's no secrets anymore, right, Like it's
Speaker 2: always yeah, Yeah, you're right. Yeah. I think it's kind
Speaker 2: of nice too. I mean it's it's weird. It's just yeah,
Speaker 2: it's a different world. We just know. We just talk
Speaker 2: about this is what we're making. You've seen us debate
Speaker 2: it on GitHub as we've come up with the ideas. Like,
Speaker 2: it's all pretty public.
Speaker 1: I don't usually use the preview versions of visual Studio anymore.
Speaker 1: I'm not sure why. Maybe I'm just afraid of crashes
Speaker 1: and stuff. When I'm working, kisses me off.
Speaker 3: I use dailies. When I get in, I install a
Speaker 3: newldivisual job, right, it is, and sometimes you should be
Speaker 3: glad that I did.
Speaker 2: Sometimes you than me.
Speaker 3: Sometimes F five doesn't work.
Speaker 2: Sometimes and then you're literally like, I'll wait for tomorrow's
Speaker 2: bills and then we'll see.
Speaker 3: Yeah, well, and I've got multiple visual studios installed, so
Speaker 3: I'll back down to some previous version.
Speaker 2: Really installs have been great, yeah, kind of and kind
Speaker 2: of essential.
Speaker 3: I guess, yeah, I.
Speaker 2: Don't know how much we've really talked about what's coming
Speaker 2: in the language for savings side extension members. But because there's.
Speaker 1: Maybe we should wait until after the break to do that. Okay,
Speaker 1: all right, this is a good time to take a break.
Speaker 1: We'll be right back with Dustin Campbell on dot ned rocks.
Speaker 1: Stay tuned. You know dot net six has officially reached
Speaker 1: the end of support and now is the time to upgrade.
Speaker 1: Dot Net eight is well supported on AWS. Learn more
Speaker 1: at aws dot Amazon dot com, slash dot net. And
Speaker 1: we're back. It's dot in a Rocks. I'm Carl Franklin.
Speaker 2: Yeah, I'm Richard Kembel.
Speaker 1: Dustin Campbell's here talking and we're shifting gears now into
Speaker 1: C sharp features. I guess what you're talking is what
Speaker 1: you were about to talk about.
Speaker 3: We can talk about Sea Shark features new things. I mean,
Speaker 3: like I said, extension members is obviously the big one.
Speaker 3: That's the one that, yeah, we've put a lot of
Speaker 3: energy into.
Speaker 2: When you talk about an epic feature that's been going
Speaker 2: on for a while like that, what has been going
Speaker 2: on for.
Speaker 1: Well, you mentioned that they're kind of like extension methods
Speaker 1: but different. So can you give us an elevator pitch?
Speaker 3: Yeah, So the the elevator pitch is kind of a
Speaker 3: more of a hey, why didn't you do this already
Speaker 3: for like extension properties or something like that, Why don't
Speaker 3: we have these already? And it turns out that extension methods,
Speaker 3: while very convenient to be able to say, I've got
Speaker 3: a static method, let me put this on one of
Speaker 3: the parameters, and all of a sudden, I can turn
Speaker 3: it into making it look like an instance method. And
Speaker 3: the very power of that is that, you know, in
Speaker 3: tell a sense, now allows me to discover APIs I
Speaker 3: didn't know we're there. And so the question is why
Speaker 3: didn't we do this before? Well, because it turns out
Speaker 3: that methods are uniquely you know, designed to be able
Speaker 3: to kind of support this sort of thing. They're the
Speaker 3: only thing other than a type that allows generic type parameters,
Speaker 3: which you kind of need, you know, if you want
Speaker 3: to do something on a list of T, you kind
Speaker 3: of need a place to put that T. And then
Speaker 3: they're the only ones that other than say an index
Speaker 3: or that takes a parameter so that you could put
Speaker 3: that this keyword there. Right. So the reason we never
Speaker 3: did anything else with it wasn't because we didn't want to,
Speaker 3: is because we kind of got ourselves kind of painted
Speaker 3: into a design corner very quickly. And so the reason
Speaker 3: now that we've got this the pitch is that, hey,
Speaker 3: extension members are a syntax that allows us to basically
Speaker 3: declare the members as if you were going to in
Speaker 3: the way that they would look if you were going
Speaker 3: to call them like essentially like their reduced forms what
Speaker 3: we call them. So instead of like the expanded calling
Speaker 3: it as a static member, I'm going to call it
Speaker 3: in its reduced form, and we put that inside a
Speaker 3: syntax that we call an extension block. And the real,
Speaker 3: you know, magic to the extension block is that's the
Speaker 3: place where you can hang all the stuff that methods
Speaker 3: get that no other members do. That's where you can
Speaker 3: put that first parameter that what we call the receiver
Speaker 3: parameter for an extension method where that this would have been.
Speaker 3: That's where you can put attributes on that parameters, where
Speaker 3: you can give it a name. That's where all that
Speaker 3: can go on the extension block. And that's also where
Speaker 3: you can put generic type parameters that will then apply
Speaker 3: to any member inside of that extension block. And so
Speaker 3: now all the other members get to inherit all this
Speaker 3: stuff and now they can become extensions.
Speaker 1: I missed in two thousand and two when we started
Speaker 1: dot net Rocks that we wouldn't read code on the show. Yeah, However,
Speaker 1: I'm dying to hear a good example of an extension
Speaker 1: member so I can grock it better. I mean, I
Speaker 1: really want to see it, But can you get me
Speaker 1: an example.
Speaker 3: I think a good example would be like if you
Speaker 3: wanted to put a property on something that was like
Speaker 3: I don't want to say count because counts the one
Speaker 3: that you really probably shouldn't do, and ie innumerable, Right,
Speaker 3: that's a method today, but that's the one that like
Speaker 3: it actually just enumerates the whole thing. It's you know, Oh,
Speaker 3: then to call this thing that you would expect on
Speaker 3: a collection to be a property, right, but we could
Speaker 3: add and is empty right as a property, you wouldn't
Speaker 3: want that to have the method syntax. You'd want that
Speaker 3: to be a property to kind of indicate that, yeah,
Speaker 3: that's that's that's that's a quicker syntax, right, that's a
Speaker 3: quicker thing to call. So that's the kind of thing
Speaker 3: that like, it's not there today, but you want to
Speaker 3: add it. That's the sort of thing that you might
Speaker 3: add things. And then the other piece that this gives us, Carl,
Speaker 3: is it gives you the ability to have extension members
Speaker 3: that are static. So you could have an extension method
Speaker 3: is a static on another type. So I, for example,
Speaker 3: I love the string dot create method. I use it
Speaker 3: all the time in dot Net, but it's not available
Speaker 3: on dot Net framework. But it was absolutely able to
Speaker 3: write it with an extension member for dot Net framework.
Speaker 3: I could write a create method that was static for
Speaker 3: the type string. And so now I have a great
Speaker 3: method that works across framework and then also use the
Speaker 3: correct one on dot Net.
Speaker 2: Wow, all right when I'm.
Speaker 3: Doing multi targeting scenarios and things, so's it helps. There's
Speaker 3: a lot of discoverability. So if you want to have
Speaker 3: a different kind of member and get that same discoverability.
Speaker 3: That's what you get out of US.
Speaker 1: So extension methods you get to sort of well I
Speaker 1: wouldn't say override, but you basically get to add things
Speaker 1: onto a static type. And these you can add static
Speaker 1: properties to a type that work on that type.
Speaker 2: Yeah, or or non static.
Speaker 3: Or properties that were are instant, yeah, like instance kind
Speaker 3: of looking exstance type. And so in this release you'll
Speaker 3: get statics and methods. You'll get instance methods. You'll get
Speaker 3: obviously instance methods because they were already there, but in
Speaker 3: the new syntax you'll be able to do methods as well.
Speaker 3: You'll get static properties and instance properties, and then other
Speaker 3: things are kind of coming. I think we've merged in
Speaker 3: one that's really exciting, which is extension operators. Which that's yeah,
Speaker 3: so you can have an operator that you didn't write
Speaker 3: on the on a type specifically, but you said no,
Speaker 3: we want to have this here, and we want to
Speaker 3: be able to by bringing in say a name space
Speaker 3: or bringing in that context. Say, now these operators are
Speaker 3: in scope and interesting. We've done that for like the
Speaker 3: tensor team wants to use that, and some others so
Speaker 3: we've brought we brought that one in and eventually we'll
Speaker 3: get to things like constructors stuff like that.
Speaker 1: So I have a little hack that I do. You know,
Speaker 1: the iclonable interface has been around forever and it's it's
Speaker 1: an interface a way forever. Yeah, that you implement a
Speaker 1: clone method and that returns a copy of your data
Speaker 1: basically a copy of your object, but a deep copy.
Speaker 1: But it's up to you to create that and return it.
Speaker 1: So what I do is if I want to make
Speaker 1: a clone of a deep object now, instead of implementing iclonal,
Speaker 1: because I might not have eye clonable, right, I just
Speaker 1: serialize it and de serialize it. Yeah, Jason serializer. And
Speaker 1: that's how you get a deep copy of something. And
Speaker 1: that's a nice little hack that might be you could
Speaker 1: turn into an extension member.
Speaker 2: That's what I'm thinking of.
Speaker 3: Yeah, absolutely, you could do that today though, right, you
Speaker 3: could make an extension method just put on a like object.
Speaker 3: Could this is Carl's clone and then and and you
Speaker 3: know Carl's JSON clone and make that happen.
Speaker 2: I just don't know if it's a good idea.
Speaker 3: Yeah, that's the extension members thing. Other things that are
Speaker 3: coming that we don't talk about a lot, but that
Speaker 3: are kind of cool we're doing. The one that I
Speaker 3: think is is going to be kind of kind of
Speaker 3: a quiet, sort of like sleeper hit. Possibly, we'll see
Speaker 3: when people realize it's there is null conditional assignment. And
Speaker 3: this is one of these things we didn't do for
Speaker 3: a long time because we had reasons. We thought, well,
Speaker 3: this will make it things confusing, and then we just
Speaker 3: realized after times like now we're kind of already used
Speaker 3: to all this stuff, so it's probably going to be fine.
Speaker 3: We were just we were worried then, yeah, ever since,
Speaker 3: you know, but this is about like, you know, null
Speaker 3: conditional stuff, as we call it, the Elvis operator, right,
Speaker 3: the question dot ye right, So using it for invocations
Speaker 3: and that kind of thing, and using it within your
Speaker 3: conditions for like an if statement. But null conditional assignment
Speaker 3: is like, but why do I have to check if
Speaker 3: something's null just to be able to sign a property
Speaker 3: on it? Right? I gotta say if X is not null,
Speaker 3: then X dot y equals this for example, Well why
Speaker 3: can't I just say X, question dot y equals this?
Speaker 3: And that's kind of the that's the pitch. That's something
Speaker 3: we thought would be confusing. It turns out to look
Speaker 3: really that. It just looks fine, and it so flows fine,
Speaker 3: and that's so. So essentially it puts the null check
Speaker 3: in for you, so that assignment doesn't happen if X
Speaker 3: is noll.
Speaker 1: Well, what if you want to assign it to something else?
Speaker 1: If it's all so for example, a command parameter, sure,
Speaker 1: adeo net command parameter, Well, you don't want to send
Speaker 1: the database and null. You want to send it a
Speaker 1: dB null value.
Speaker 3: Right, absolutely, and you should do that today. Yeah, yeah, yeah,
Speaker 3: you can do that today. You know, for those kinds
Speaker 3: of cases, you've you've got those code patterns to write that, right.
Speaker 2: Yeah.
Speaker 3: For for this that simple kind of thing of like
Speaker 3: why do I always have to do this? Why can't
Speaker 3: I just do this in a one liner? We're given
Speaker 3: some of the kind of those kinds of things. They're
Speaker 3: just kind of small, simple features. Yeah, what else are
Speaker 3: you interested in? Some of are really really really pretty small.
Speaker 3: But a lot of time we're just trying to find
Speaker 3: things that really, I don't know, that kind of alleviate
Speaker 3: just a little bit of pain. Sure, help kind of
Speaker 3: elevate the expressiveness that people feel, so they don't feel
Speaker 3: like they're bumping into rules all the time, you know,
Speaker 3: just make it feel a little more I don't know,
Speaker 3: natural and intuitive. And so sometimes it's just removing, you know,
Speaker 3: barriers that didn't really need to be there, we determined
Speaker 3: didn't need to be there in the first place.
Speaker 1: I've learned some things about sea sharp that I didn't
Speaker 1: know just by letting co pilot do its thing.
Speaker 2: Yeah, you know, and I say, huh, that's that's a
Speaker 2: really cool way to do that. I didn't know you could.
Speaker 3: And we try to keep Copilot updated with with the latest,
Speaker 3: latest stuff. Sometimes hard because it's got to be there,
Speaker 3: but like you know, we pass along, like because the
Speaker 3: GitHub repo for the sea sharp line languages out there
Speaker 3: and we are just big nerds with writing out all
Speaker 3: the notes and everything, and those feed right into it. Yeah,
Speaker 3: those are those are those are that's great training data.
Speaker 1: So yeah, yeah, so you mentioned you're working on Razor stuff. Ye,
Speaker 1: and I d Forrasor and I was I was complaining
Speaker 1: about in visual studio. You know, when you have a
Speaker 1: Razor file and a code block that I miss little
Speaker 1: things that I get in a code behind file or
Speaker 1: a regular c sharp file. And so what are you
Speaker 1: what are you working on?
Speaker 3: Over on that side, there's a there's been some investment there.
Speaker 3: We so a while ago there was an attempt, well
Speaker 3: not an attempt, but to start to getting towards moving
Speaker 3: the entire Razor editor stack over to kind of a
Speaker 3: language server model where it lives, you know, as a
Speaker 3: separate server that Visual Studio talks to, so we could
Speaker 3: kind of share a code better with vis codes experience
Speaker 3: and that kind of thing. And I came in to
Speaker 3: look at it and it was like, hmm, this is uh,
Speaker 3: this needs love. It's getting there, but it's it needs
Speaker 3: some it needs it needs work to get to get
Speaker 3: over the finished line, to really get there. And what
Speaker 3: we what we eventually discovered that is that we're kind
Speaker 3: of Razor was kind of doing too much on its own,
Speaker 3: because really what Razor is is it's like it's a
Speaker 3: pass through. Most of the time. It's like, oh, you're
Speaker 3: in c sharp here, let me pass you through to
Speaker 3: c sharp's editor. And it goes and it asks c sharps.
Speaker 3: You know, the Rosalind language server, Hey, give me intellisen's
Speaker 3: in this location in the generated code behind file for
Speaker 3: a razor Or. It does the same thing if you're
Speaker 3: in HTML. The times that you're in those transition points
Speaker 3: where you type an at or code, or you're in
Speaker 3: a directive, a Razor directive, those are few compared to
Speaker 3: how often you're just typing in C sharp hedtmail. And
Speaker 3: so this is so so what we decided to do
Speaker 3: with it was this instead of making it a sense,
Speaker 3: So that makes it essentially three language servers right where
Speaker 3: you've got Razor, and then it's like going off to
Speaker 3: two different language servers and serializing all the data, passing
Speaker 3: it back over potentially you know, in vs code over
Speaker 3: named pipes, you know, and then taking it, munching it
Speaker 3: up and passing it again, serializing and passing again back
Speaker 3: to VS code. It seemed kind of kind of wasteful,
Speaker 3: and most of the challenges actually with C sharp. C
Speaker 3: sharp is the one that has the most i would say,
Speaker 3: kind of sophisticated experience when it comes to, you know,
Speaker 3: the editor. So we're implementing a model we're calling co hosting,
Speaker 3: which is essentially because Roslin's there as a language server
Speaker 3: as well. In VS code. It actually has one in
Speaker 3: Visual Studio, though it's not used by default, but there
Speaker 3: is there's one there where we've changed kind of the
Speaker 3: Rosen language server to be able to load other languages
Speaker 3: that kind of piggyback on C Sharp. So and Razor
Speaker 3: has all this code also to generate that the C
Speaker 3: shark code behind and the HTML pieces and kind of
Speaker 3: push those the text of those into other language the
Speaker 3: other language servers. But in a co hosting model where
Speaker 3: we're living in the same process as as Roslin, we
Speaker 3: can just make the Razor compiler that runs the code
Speaker 3: generator or runs runs the code generation to build that
Speaker 3: code behind. We could just turn into a source generator
Speaker 3: and so now instead of running code and Razor to
Speaker 3: compile it and then push that code into C sharp,
Speaker 3: we let Roslyn use this entire source generator kind of system,
Speaker 3: and we can pull on and say, oh, just give
Speaker 3: me the latest, give me the latest that I need here,
Speaker 3: and then the code is already in Roslin, and we
Speaker 3: could just ask at this position, hey, what's intellisence, and
Speaker 3: being in the same process, now we get back instead
Speaker 3: of serialized JSON data that we've then decerialized and we
Speaker 3: don't know anything about it other than the strings we
Speaker 3: have the rich rosalins. We know what symbol. This came
Speaker 3: from we know we can do a lot more with it. Wow,
Speaker 3: And so the idea is that then we're kind of
Speaker 3: leaning more into the idea that really Razor is kind
Speaker 3: of about views and about generating really C sharp code
Speaker 3: with with htmo as opposed to HTML with some c
Speaker 3: sharp script but kind of you know, saying no, no,
Speaker 3: this is c sharp. And we've done the same thing
Speaker 3: with sample for VS code, so because it's a C
Speaker 3: sharp based kind of thing where it's got very much
Speaker 3: C sharp code behind and it's a very much adotinant language.
Speaker 3: And so for VS code, the intelligence runs inside the
Speaker 3: rasinal Language Server. We all live in the same process.
Speaker 3: We call that call that co hosting. That's something we're
Speaker 3: working on. It is something that's on a feature flag
Speaker 3: right now. It's actually can be turned on in VS
Speaker 3: but we're we're going to be using it for Visual
Speaker 3: Geo code pretty soon.
Speaker 2: Okay, So yeah, that was my question.
Speaker 1: I heard you talked a lot about Visual Studio code,
Speaker 1: but I thought I heard that this is also in
Speaker 1: Visual Studio.
Speaker 2: Yeah.
Speaker 3: Yeah. The language server is used for both the and
Speaker 3: VUS code. So there is like a.
Speaker 1: And the language server is a process outside of both
Speaker 1: of the IDEs is that.
Speaker 3: It doesn't have to be It can just be a
Speaker 3: logical service that's created and running there that you talk to.
Speaker 3: You know, it doesn't have to go over it just
Speaker 3: needs to go over a stream. It doesn't have to
Speaker 3: be a name. I could just be right there in process.
Speaker 3: And that's how it is ADS today. When we move
Speaker 3: it to co hosting. However, when it runs inside Roslin's
Speaker 3: language server, it does move. Most of it moves out
Speaker 3: of process because Rosin wrote a lot of Roslin runs
Speaker 3: out of process in visual Studio and it lives in
Speaker 3: what we call Visual Studios Service Hub, and it runs
Speaker 3: as part of that service over there.
Speaker 1: It sounds like you'd be passing less data more efficiently.
Speaker 3: Yeah, and well, but less data between between Razor and
Speaker 3: c sharp, which is a big ball of nick.
Speaker 4: Yeah.
Speaker 3: So my hope is that improves performance, but it also
Speaker 3: just makes it easier to get more c sharp in there.
Speaker 2: Right.
Speaker 3: And then the other thing, Carl, that we've been doing
Speaker 3: is that we've been pulling more on the Razor compiler
Speaker 3: and trying to make that more Roslin like. It started
Speaker 3: out kind of being Rosin like, and then it kind
Speaker 3: of I think part of the problem is that being
Speaker 3: needing to serve like the needs of like a really
Speaker 3: like rapidly developing space at web speed essentially, like you know,
Speaker 3: as every technology comes on, Razor needed to be there,
Speaker 3: and so there was never time to kind of go
Speaker 3: and say, well, let's what should we do. What's the
Speaker 3: right thing to do? Like, no, just go, just go
Speaker 3: and get it done. And so there's a lot of
Speaker 3: that debt go and while you're going go faster. Yeah,
Speaker 3: and there's a lot of that debt in the compiler.
Speaker 3: So trying to make it a little more rosin like
Speaker 3: so that we can then bring in pieces of Roslin
Speaker 3: to say, you not have a separate saf for example,
Speaker 3: C sharp tokenizer in Razor as we have in you know,
Speaker 3: from Roslin. So we brought in an API to bring
Speaker 3: in Roslin c sharp tokenizer. So now you know, nobody
Speaker 3: has to go to the Razor compiler to say just
Speaker 3: to give you things that you you know, you would
Speaker 3: hope would be there, like I don't know, binary literals,
Speaker 3: things like that that would be at the token level
Speaker 3: that they would have to code specifically into the race
Speaker 3: or compiler again to get those features from c sharp
Speaker 3: that when we add them. So we're trying to do
Speaker 3: a better job of bringing over more features from you know,
Speaker 3: modern features, because as soon as you use you know,
Speaker 3: as soon as they're in C sharp, if they're not
Speaker 3: in Razor, everybody's confused about what the dacoder ring is
Speaker 3: for what C sharp features I can use here? Yeah,
Speaker 3: and where I can use them. So we're trying to
Speaker 3: trying to smooth that out.
Speaker 1: To code lens would be nice in the Razor code editor.
Speaker 3: Oh yeah, yeah, that is not on the It's something
Speaker 3: we were working on, but yeah, that would be nice.
Speaker 1: Well, is that because of the Roslin thing? Like, is
Speaker 1: that like a Roslin feature? Code lens?
Speaker 3: It's it's not a Roslin feature so much as it's
Speaker 3: it's just an expensive feature. It's it's because you know,
Speaker 3: you're running you're running final references on everything all the time,
Speaker 3: and uh, you know, Razor is I would say Razor
Speaker 3: has some fundamental challenges with how its model, how how
Speaker 3: it kind of works, like it kind of parses everything
Speaker 3: on one every keystroke and rebuild everything on every keystroke,
Speaker 3: whereas Roslin's much more incremental. And so when you're typing
Speaker 3: in a method body for example, in Roslin, we're we're
Speaker 3: not parsing the rest of the file, it's just just
Speaker 3: the bits that you're changing. And so to keep a
Speaker 3: line up there with the final references kind of updating
Speaker 3: it's it's not terrible. It would be much harder for
Speaker 3: I mean Razor would. It would just be challenging. I
Speaker 3: would say, so we but as we move the compiler forward,
Speaker 3: maybe and get maybe get there.
Speaker 1: Well, I'm I'm mostly using code behind files now anyway,
Speaker 1: So okay, and it's for that reason that you know,
Speaker 1: I miss all the things that.
Speaker 3: Yeah, now I get it, I totally get it.
Speaker 1: Yeah, well, that that sounds good, Dustin, I can't wait
Speaker 1: for that. And is that coming in the next version
Speaker 1: of dot net or or the next version of c
Speaker 1: sharp or both.
Speaker 3: Well, the tooling things I'm talking about will be coming
Speaker 3: in like kind of like the next next the next
Speaker 3: visual studios we get going, yeah.
Speaker 2: Oh, the next visual studio. Wow.
Speaker 3: Great, And then whenever they show up in VS code,
Speaker 3: probably in vs code maybe sooner, maybe not.
Speaker 2: We're not expecting a new studio fort net ten.
Speaker 3: These are not things I can speak to.
Speaker 1: Well, okay, I think there are new versions of the
Speaker 1: studio all the time. But they're subversions.
Speaker 3: Yeah, right, that's right, there are, but that's what you're
Speaker 3: talking about, right, major versions or things like that.
Speaker 2: I'm not sure, Okay, Yeah, it's just there's been no
Speaker 2: announcement about a Studio twenty twenty five at this point,
Speaker 2: and normally, like you think back to see to dot
Speaker 2: net six, like that was very much tied together with
Speaker 2: twenty nineteen, like they had to have both, Like you
Speaker 2: couldn't even run the preview if you didn't download the
Speaker 2: preview bits at twenty nineteen as well. Not that I
Speaker 2: love that like that, I've felt like those were two close,
Speaker 2: closely tied. You know. It kind of made an impossible situation,
Speaker 2: Like I feel for the Maui team because they were
Speaker 2: also trying to push Maui out at the same time.
Speaker 2: It's like, wait, language is changing, dead platform is changing,
Speaker 2: and you're trying to build a new SDK. Ah gee,
Speaker 2: I wonder why that's hard.
Speaker 3: Yeah, yeah, it's tough. Coordination is hard for sure.
Speaker 2: Yeah, So it's just quite you know. It's not like
Speaker 2: Studio doesn't commonantly update anyway, right, it gets its quarterly.
Speaker 2: It's like there's new features all the time. It's really
Speaker 2: a question of when do you declare a new version.
Speaker 3: Yeah, And there's been a lot of summer releases on
Speaker 3: that too. As we've been you know, putting out new
Speaker 3: co pilot experiments, trying new things. There's been a lot
Speaker 3: that e any that haven't hit the previu channel that
Speaker 3: hit the release channel. So there's been a lot of
Speaker 3: a lot of updates lately. Yeah, in that space, but.
Speaker 2: It's also been a while. Twenty two is the current version, Like,
Speaker 2: is it really going to be twenty two? Yeah, it's funny.
Speaker 2: We were talking about that on the dev team. I
Speaker 2: was trying to I had to remind people. It was like,
Speaker 2: do you guys remember what the big depths like we called,
Speaker 2: you know, twenty twenty two, what the big thing was? Gosh,
Speaker 2: that was a long time ago. It was sixty four
Speaker 2: bit that was the big thing.
Speaker 3: That was my gosh, that seems like a lifetime ago
Speaker 3: that we were trying to get everything out of sixty fourth. Yeah.
Speaker 3: So yeah, it's been a while.
Speaker 2: Yeah, just make it all work.
Speaker 1: But there's been inter releases like I was talking about
Speaker 1: before that, you know, just not they're not just bug fixes,
Speaker 1: but you have new features.
Speaker 2: In these interim releases.
Speaker 3: That's right.
Speaker 2: So what's a version actually it is?
Speaker 3: I mean, you know, maybe we'll just get high enough
Speaker 3: that will be in kind of chrome version numbers where
Speaker 3: you just don't even know what you're running anymore. Yeah,
Speaker 3: I don't know. This is version six thousand or something.
Speaker 2: Right, reopen it and it updates, updates every time you
Speaker 2: close it, right.
Speaker 3: Yeah, yeah, let's see.
Speaker 2: Oh my goodness, I just pulled up the release notes.
Speaker 2: There have been fourteen releases on twenty twenty two.
Speaker 3: Yeah, fourteen, and that's just the minor releases, right, the dots. Yeah, yeah,
Speaker 3: this is the dots, and that means and I think
Speaker 3: every other one of those I can't remember. It's the
Speaker 3: even ones are long care support. So yeah, it's crazy.
Speaker 2: It just yeah, it speaks to it's getting really hard
Speaker 2: to understand what version numbers are when you're yeah constantly, right,
Speaker 2: it's the even numbers. Seventeen point two is LTSC.
Speaker 1: Yeah, how long is the list of is your barn list?
Speaker 1: Your list of features.
Speaker 3: To implement for the language, for tooling for.
Speaker 1: Yeah yeah, well yeah, for the ide actually for visual studio.
Speaker 3: Gosh, that's never ending. We have so much we want
Speaker 3: to do. We never have enough fingers to type them
Speaker 3: all in.
Speaker 2: Yeah.
Speaker 1: So yeah, do you get help from the community. We do,
Speaker 1: I mean it is open source. Do you get pull requests?
Speaker 3: Roslin gets a fair number of full requests. We even
Speaker 3: have somebody we roslin we uh in the c sharp
Speaker 3: language design team. We've been we experimented with this where
Speaker 3: the kind of that we have a community member on
Speaker 3: the language design team who's not a Microsoft employee, so
Speaker 3: we we we work very closely with with with it.
Speaker 3: Then there's a handful of community members that are comfortable
Speaker 3: putting in compiler features and doing the entire tooling stack
Speaker 3: and all the features all the way up, which is
Speaker 3: great because that means because if you know, you submit
Speaker 3: a language feature and it's like, oh, that's cool, but
Speaker 3: now we've got a lot of work to do.
Speaker 2: Uh.
Speaker 3: And so the guys that will come in and just
Speaker 3: do it all, it's like thank you, Yes, we want
Speaker 3: this too, this is a great feature.
Speaker 2: But can they really do it all? Because I think
Speaker 2: about the cultural adaptations you have to make for stuff.
Speaker 3: Like oh sure, no, those sorts of things are yeah,
Speaker 3: globalization and all those kinds of things are different. But yeah,
Speaker 3: but do but just to get the feature working, make
Speaker 3: sure it works an inteli sense, put a refactoring in
Speaker 3: or two, you know those kinds of things. That's pretty great.
Speaker 2: Do you get prs from Mark Miller?
Speaker 3: No?
Speaker 2: And would you accept them anyway? Yeah?
Speaker 3: No, absolutely not. I mean, guy, who's going to accept
Speaker 3: an all emoji all caps PR?
Speaker 2: I mean, really, you gotta look at yourself in the
Speaker 2: face afterwards, you know, No, I'm sorry. Yeah, yeah, you know,
Speaker 2: you guys are all friends.
Speaker 3: Don't get you're trying to get me in trouble. I
Speaker 3: can tell no, no.
Speaker 2: Of course not.
Speaker 3: Yeah.
Speaker 2: Yeah, you worked for Devax back in the day. It
Speaker 2: was a long time ago. Now, mind you, it.
Speaker 3: Was a long time. So if it, if it, if it,
Speaker 3: there's you at all when I say this, it's that's fair.
Speaker 3: I have been at Microsoft for seventeen years.
Speaker 4: Wow.
Speaker 2: Oh man, wow wowow.
Speaker 3: And it seems like it doesn't seem that long ago that,
Speaker 3: you know, you guys were doing dot net rocks trips
Speaker 3: and I'd show up for a while ark or something.
Speaker 3: It's like that was that seems like not that long ago.
Speaker 2: Last tour was twenty thirteen. Man, it's been a long time.
Speaker 3: Yeah, I was already there for five years, so it's
Speaker 3: it's been. Yeah, it's been a while since I've been
Speaker 3: at Microsoft, and it's been it's been a lot of fun.
Speaker 2: Yeah, they took our RV away. They said no more
Speaker 2: tours for you. Ye know, it was batted around. I
Speaker 2: had a conversation with a team that's like, would you
Speaker 2: consider another road trip? It's like, you know, I'm fifty eight, right,
Speaker 2: come on? Yeah, I mean I would do it. I
Speaker 2: would totally do it, but I just don't. I don't know.
Speaker 3: Would you do it like the Iron Maiden way? Would
Speaker 3: you have to get like a jet to fly yourselves
Speaker 3: instead of an RV? You know you can't. I can't
Speaker 3: sleep in an RV anymore. I'm too old.
Speaker 2: Yeah. Well, we never slept in the We never did
Speaker 2: sleep in the area.
Speaker 3: Oh yeah, that's true. I guess you stopped in each place.
Speaker 2: We stayed in little hotels. It smelled bad enough as
Speaker 2: it was. We stayed at.
Speaker 1: Laking To Ends, mostly on the last one. On the
Speaker 1: first one, we were looking whatever we could find.
Speaker 2: Yeah, there's a couple where we did, like he did,
Speaker 2: standing for beside the Denny's. Yeah, next to Denny's.
Speaker 1: Yeah, Okay, what's next after you hang up with us?
Speaker 2: What are you? What are you going to go do?
Speaker 2: You're on vacation, right.
Speaker 3: I'm on vacation. I'm going to go play mini golf
Speaker 3: with family.
Speaker 2: That's great. There you go, that's a great thing.
Speaker 3: It's yeah, we're kinds great.
Speaker 1: And when you get back, it's just more more razor
Speaker 1: code work.
Speaker 3: Yeah it is.
Speaker 2: It's it's the grind to November.
Speaker 3: There's a lot to do and I kind of feel
Speaker 3: like I shouldn't really be on vacation, but it was,
Speaker 3: it was planned. It's like and it's never a good
Speaker 3: time to go.
Speaker 2: It's always you need to take vacations.
Speaker 3: Yeah, for your agreed, and I planned it. But yeah,
Speaker 3: it's there's just always too much and it's hard to
Speaker 3: be away sometimes.
Speaker 1: I totally get it. I totally get it. And my
Speaker 1: wife looks at me and when we're on vacation, you're
Speaker 1: thinking about code, aren't you.
Speaker 2: How do you know that? Well, yeah, because I'll see
Speaker 2: it in your eyes.
Speaker 3: I don't. I don't. I don't separate code from vacation.
Speaker 3: I mean that's just what I'm coding. Let's not get
Speaker 3: crazy now, Yeah, whoa no vacation can be code. That's okay,
Speaker 3: it's just got to be like an nes emulator or something.
Speaker 1: Ah, all right, well, good, well man, it's been great
Speaker 1: talking to you again, and keep up the good work.
Speaker 1: I know we're in good hands with you at the
Speaker 1: at the wheel. So thanks, thank you. We'll talk to
Speaker 1: you next time.
Speaker 4: I'm dot net rocks.
Speaker 1: Dot net Rocks is brought to you by Franklin's Net
Speaker 1: and produced by Pop Studios, a full service audio, video
Speaker 1: and post production facility located physically in New London, Connecticut,
Speaker 1: and of course in the cloud online at pwop dot com.
Speaker 1: Visit our website at d O T N E t
Speaker 1: R O c k S dot com for RSS feeds, downloads,
Speaker 1: mobile apps, comments, and access to the full archives going
Speaker 1: back to show number one, recorded in September two.
Speaker 2: Thousand and two.
Speaker 1: And make sure you check out our sponsors. They keep
Speaker 1: us in business. Now go write some code.
Speaker 2: See you next time.
Speaker 4: You got JAD Middle Vans
Speaker 3: And