Speaker 1: How'd you like to listen to dot net rocks with
Speaker 1: no ads? Easy? Become a patron for just five dollars
Speaker 1: a month. You get access to a private RSS feed
Speaker 1: where all the shows 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, and welcome back to dot net rocks.
Speaker 1: I'm Carl Franklin, I'm Richard Campbell, and Jason Bacha is
Speaker 1: here with us. We're gonna be talking to him in
Speaker 1: a minute. And of course, Jason, while we're doing the intro.
Speaker 1: You can feel free to jump in at any time.
Speaker 1: But we got a few things to do first. Should
Speaker 1: we talk about nineteen eighty eight and what happened?
Speaker 2: Do the history thing? Huh?
Speaker 1: The history thing?
Speaker 2: Okay, we'll try and keep it brief. But what do
Speaker 2: you got?
Speaker 1: Soviet Union began significant economic restructre churing you might have
Speaker 1: remembered Peristroika Peristroika and started to break apart and allowed
Speaker 1: some free travel.
Speaker 2: This is the beginning of the end, beginning of the end.
Speaker 1: YEP. George H. W. Bush was elected President of the
Speaker 1: United States defeating Michael Ducacas. I ran air flight six
Speaker 1: fifty five the USS Vincennes Vincennis mistakenly shot down. I
Speaker 1: ran air flight sixty five, six fifty five, killing all
Speaker 1: two hundred ninety people on board. At least that's what
Speaker 1: my report says. Did they determine that it was an accident?
Speaker 2: Yep, yeah, okay, it was yeah, you know operator air Ultimately,
Speaker 2: let's see.
Speaker 1: The lockerby bombing, of course, was a kind of historic
Speaker 1: thing that happened a lot of flight stuff. Here a
Speaker 1: hailstorm in Nepal at a soccer match and Katmandu caused
Speaker 1: a stampede, killing at least seventy people.
Speaker 2: Wow.
Speaker 1: We had the nineteen eighty eight Winter Olympics in Calgary, Canada.
Speaker 2: Yeah, interested the right of me.
Speaker 1: And this Olympics in Seoul, South Korea.
Speaker 3: That's back when they still had them in four year intervals.
Speaker 2: Yeah, all the same years. Yeah, I mean, then we
Speaker 2: figured out to offset them because you make more revenue
Speaker 2: that way.
Speaker 1: Andy Gibb died that year. And let's talk about some movies, right.
Speaker 2: M hm, So you like your movie collection in the eighties.
Speaker 2: This just shows our bias, I think.
Speaker 1: Yeah, die Hard you know, yeah, die Hard is on
Speaker 1: that list.
Speaker 2: Yeah. Best Christmas movie ever?
Speaker 1: Yes, kaym who framed Roger Rabbit was the number one
Speaker 1: grossing movie of nineteen eighty eight. Rain Man Coming to America.
Speaker 2: Oh man, I saw Eddie. I can't even tell you
Speaker 2: how many times I've seen that movie.
Speaker 1: Yeah, Yeah, Rambo, three big, three men in a baby beetlejuice, cocktail,
Speaker 1: and my favorite, a fish called Wanda. The car, sing
Speaker 1: It Sing It the Car.
Speaker 3: The best scene in that movie he was when he
Speaker 3: was going to get run over by a steamroller or whatever.
Speaker 2: That was right. Yeah, the whole trying to get the
Speaker 2: old lady and keep hitting the dogs. Like, there's so
Speaker 2: many funny bits in that movie. That's hilarious. And do
Speaker 2: you remember when they did the press tour and they
Speaker 2: all agreed, all of the big you know, Kleine and
Speaker 2: Clease and all these folks all agreed to say the
Speaker 2: same thing, which was, I carried this movie. The others
Speaker 2: are worthless, right, And so like every single interview, each
Speaker 2: one of them said exactly. They they just sort of
Speaker 2: blew up.
Speaker 3: I had no idea about that.
Speaker 2: That's great, It's just hysterical.
Speaker 1: So one of the iconic scenes in that movie is
Speaker 1: where Kevin Kleine is holding John Cleese by his legs,
Speaker 1: dangling him outside of a window to get him to
Speaker 1: apologize for calling him stupid.
Speaker 2: Apologize.
Speaker 1: And when Cleese was on the tour promoting movie, he
Speaker 1: was on Letterman and he said, he said, well, the
Speaker 1: whole apology thing is Britain's just, you know, they apologize
Speaker 1: for everything. You know, you're in America and you're at
Speaker 1: the dinner table. It's like a saw in Britain's are like,
Speaker 1: I'm sorry. So he was poking fun at BRIT's in
Speaker 1: their apologety ways.
Speaker 2: That's so funny. All right, what do you got, Richard?
Speaker 2: We'll start space. Of course, the return of the Shuttle
Speaker 2: after the Challenger disaster in January of eighty six ers
Speaker 2: now in nineteen eighty eight, so it's September twenty ninth.
Speaker 2: Discovery is return to flight, deploying the third of the
Speaker 2: TDR satellites. Use the satellites to allow the Shuttle be
Speaker 2: to continue his communication and that was the third and
Speaker 2: last needed now though the member replacements in there. And
Speaker 2: then later that later Atlantis will fly one of the
Speaker 2: last military payloads to Shuttle. Well or Fly, which is
Speaker 2: one of the Lacross satellites, which should be its own show.
Speaker 2: So we're not gonna talk about that, okay.
Speaker 3: Because they had to take a two year break in
Speaker 3: between Challenger.
Speaker 1: Yeah.
Speaker 2: From Challengers Yeah and last show in eighty seven, I
Speaker 2: talked about the Rogers Commission and just the complete failure
Speaker 2: of NASA to be able to change their culture. They
Speaker 2: just fixed the tech stuff, but also just committed to
Speaker 2: the reality that they would never fly that many shuttles,
Speaker 2: and they never would again. Yeah, the shuttle was supposed
Speaker 2: to be an airliner. It simply wasn't, which that argument
Speaker 2: is the reason we even have the geek outs. Carls,
Speaker 2: you told me we should record that, and I said
Speaker 2: that was stupid, and you said, but I was wrong,
Speaker 2: Clearly I was wrong.
Speaker 1: Well, I don't remember where we were, but we were
Speaker 1: having scotch after a conference somewhere.
Speaker 2: It was when Atlantis landed for the last time at
Speaker 2: twenty eleven. That's why I was raging.
Speaker 1: You were brain dropping. I mean, it was just like NonStop,
Speaker 1: and I'm like, you know, this would just be a
Speaker 1: great show.
Speaker 2: Yeah.
Speaker 3: The whole history behind the Space Shuttle program is just fascinating.
Speaker 2: Yeah, but also terrible. Yes, it cost a lot of
Speaker 2: lives and money. And I remember who was it, Dan,
Speaker 2: the old NASA administrator, saying, if we had not done shuttles,
Speaker 2: we'd stuck with Saturn. We would have done six missions
Speaker 2: a year, including two to the Moon every year the
Speaker 2: entire time, for the same amount of money. Yeah, presumably
Speaker 2: it would have improved things, but you know they always
Speaker 2: argument is it didn't spend enough on shuttle to make
Speaker 2: it as good as it needed to be. They just
Speaker 2: limped it over the line and it limped the whole time.
Speaker 2: Speaking of shuttles, in nineteen eighty eight, we have the
Speaker 2: second flight of the Energy A booster by the Soviet Union,
Speaker 2: the only flight of the Burran the Russian shuttle the
Speaker 2: Soviet Union trying to keep up with the Americans, arguably
Speaker 2: a superior shuttle. It was flown unmanned. All of the
Speaker 2: engines were actually on the Energy A boosters, so it
Speaker 2: didn't have to carry that weight into space, did need
Speaker 2: the external tank. I didn't do any of those things,
Speaker 2: but it was it was a very capable machine. It's
Speaker 2: terrible that they built three of them, flew one of them,
Speaker 2: and then they sat in hangars until those hangars clopped
Speaker 2: around them. So that's the end of that. And Energy
Speaker 2: it would never fly again. An Energy actually had a
Speaker 2: design again, this could be a whole show to have
Speaker 2: recoverable flyback boosters and things like. They really did pursue
Speaker 2: all the things that Shuttle could have had that never
Speaker 2: actually happened. Other than that, you know, nineteen eighty is
Speaker 2: a quiet year for space. The Soviet Union's running out
Speaker 2: of money, so they don't fly. A whole bunch of
Speaker 2: the Americans are just getting back on their feet again.
Speaker 2: So that's all I got to say about that. But
Speaker 2: on the computing side, let's go.
Speaker 1: For a ride. Come some good stuff, some good.
Speaker 2: Stuff, right, I got to lead off with the next.
Speaker 2: So Steve Jobs, who've been forced out of Apple in
Speaker 2: nineteen eighty five, has now founded a company called Next.
Speaker 2: He builds the most outrageous computer ever, the Next Cube,
Speaker 2: which actually has three Motorola processes and an eight megs
Speaker 2: a RAM in nineteen eighty eight, eard of yeah, sixty
Speaker 2: five hundred dollars US in nine.
Speaker 1: I can't remember where I saw it, but I saw
Speaker 1: it and I used it, and I.
Speaker 2: Was well blown away. To be clear, this is the
Speaker 2: machine that Tim berners Lee will invent the World Wide
Speaker 2: Web with. Right, His next cube is insern behind glass
Speaker 2: and it's still got the sticker on it says do
Speaker 2: not turn off server. For the first web server and
Speaker 2: web browser were on that machine. It's great. Also, that's
Speaker 2: when Next licenses objective C. That will come back to
Speaker 2: haunt us all for a couple of decades.
Speaker 3: Thank you for expressing it that way.
Speaker 1: That haunt is right. What was a Rory Bleise's comment
Speaker 1: about objective C programm Stockholm syndrome?
Speaker 2: And of course we don't know it in nineteen eighty eight,
Speaker 2: but eight years later in ninety six, Apple will acquire
Speaker 2: Next and get Jobs back and so forth. Also related
Speaker 2: to Apple.
Speaker 3: There's one project that I did real quick on objective
Speaker 3: C and that was enough.
Speaker 2: Yeah, I oh man, terrible. Well, you know then it
Speaker 2: was always supposed to be a internal language, right, Jobs
Speaker 2: had never intended us to write directly to the iPhone
Speaker 2: at all. Those are all internal tools. But when we
Speaker 2: jail broke the phone, he had to do something, and
Speaker 2: that's when he came up with a store and released
Speaker 2: all those internal tools. Is why they were so terrible,
Speaker 2: you know, and admittedly like I'm not a big Swift fan,
Speaker 2: but objectively, no pun intended, Swift is a pretty damn
Speaker 2: good language. That's what it should have been. Yeah. Apple,
Speaker 2: same year nineteen eighty eight files the copyright infringement lawsuit
Speaker 2: against Microsoft for the look and feel of Windows two
Speaker 2: against the Mac os. This is the beginning of that,
Speaker 2: and it won't be settled till the nineteen eighty five.
Speaker 2: The only thing that will take longer is Apple acquiring next,
Speaker 2: but not by much.
Speaker 1: I wrote a program that if Windows equals Mac call FTC.
Speaker 2: Ninety eight, the first release of Microsoft Office, the bundling
Speaker 2: of Word and Excel and PowerPoint and eventually Access and others.
Speaker 3: That was the first year nineteen eighty eight.
Speaker 2: Wow, first year was nineteen eighty eight, and it came
Speaker 2: on three and a half inch fluppies, how many and
Speaker 2: lots of of them? Yeah, twenty eight was always bad.
Speaker 2: Oh then you'd only find that out the hard way.
Speaker 2: Ask you you know that happened to me too.
Speaker 1: I don't know if it was twenty eight, but it
Speaker 1: was one of the one of the ones at the end.
Speaker 2: Yeah. Uh, sound Blaster Creative Labs, Yes, eleven Voice FM synthesizer,
Speaker 2: Texas Speech MIDI and a joystick port dun dun dum.
Speaker 3: I got a sound blaster card in college and that
Speaker 3: was Oh, that was so much fun.
Speaker 2: So it was such a big deal.
Speaker 1: Yeah, did you play any of the sample MIDI files?
Speaker 3: I think I did. I think it also had if
Speaker 3: I remember right, it had some kind of like a
Speaker 3: voice pitch, yeah, the parrot. But yeah, so you could
Speaker 3: you could change your voice. And of course in college
Speaker 3: that was so much fun.
Speaker 2: It's all you would do, doing well if you ran
Speaker 2: the MIDI files. I wrote those, Oh you did. I
Speaker 2: did well.
Speaker 1: Once the MIDI pack came out from Voyetra, which was
Speaker 1: in the nineties, and we'll get there. Yeah. Yeah, I
Speaker 1: did the MIDI files that came with that, but they
Speaker 1: would just work for hire, you know.
Speaker 2: That was my job, the musician with the text chops,
Speaker 2: so you make it work any got Yeah, MIDI was
Speaker 2: part of that. A couple other hardware pieces, the IBM
Speaker 2: AS four hundred sucked up a few years of my life.
Speaker 2: The Helid Packard desk jet printer, the first commercial inkjet printer. Wow,
Speaker 2: that's beginning the true demise of printing worldwide. Right, These days.
Speaker 2: They are essentially disposable. Right, it's cheap printed by Ink
Speaker 2: for it.
Speaker 1: Yeah, I was gonna say. And the onset of the
Speaker 1: Ink Subscription.
Speaker 2: Revolution Intel three eighty six s X released that year
Speaker 2: by Intel. Okay, let's talk Internet stuff. This is the
Speaker 2: release of the specifications for S and MP NTP right
Speaker 2: in the network Protocol and IRC Internet Relay Chat. I'll
Speaker 2: begin in nineteen eighty eight.
Speaker 1: Oh did you say NTP or n NTP NTP. Okay,
Speaker 1: that's different.
Speaker 2: And NTK comes a little later. Yeah, And finally the
Speaker 2: Morris Worm. So Robert Morris, twenty three year old father
Speaker 2: works for the NSA, gets access to the Internet, writes
Speaker 2: a non destructive propagating worm that is eventually found on
Speaker 2: six thousand of the sixty thousand hosts currently connected to
Speaker 2: the Internet nineteen eighty nikes ten percent of the Internet,
Speaker 2: and he was the first person ever committed under the
Speaker 2: Computer Fraud and Abuse sack. Wow, we're writing a propagator.
Speaker 2: There you go, There you go. That's my story. I
Speaker 2: could mention Sega Genesis, but eh, you know video. Yeah,
Speaker 2: she's oh in the McChicken.
Speaker 1: Don't forget the McChicken, No kidding, I think that was
Speaker 1: the Larry Bird commercial, right, yeah, oh.
Speaker 2: In lunchables plunchables do.
Speaker 1: Oh wow, Well, the McChicken Larry Bird commercials are funny
Speaker 1: because he kind of looks like a chicken and his
Speaker 1: last name is bird Bird. Yeah, he was the perfect
Speaker 1: guy to advertise the McChicken sandwich. All right, let's roll
Speaker 1: the music for better note of framework.
Speaker 2: Awesome. All right, man, what do you got?
Speaker 1: Here's a trending repoll on GitHub. This is from Microsoft
Speaker 1: Data Science for beginners.
Speaker 2: We love it.
Speaker 1: A curriculum Azure Cloud advocates at Microsoft are pleased to
Speaker 1: offer a ten week twenty lesson curriculum all about data science.
Speaker 1: Each lesson includes pre lesson in post lesson, quizzes, written
Speaker 1: instructions to complete the lesson, a solution, and an assignment.
Speaker 2: Wow.
Speaker 1: Our project based pedagogy allows you to learn while building
Speaker 1: a proven way for new skills to stick some good
Speaker 1: names behind it too.
Speaker 2: It's good stuff, nice well, and you know, speaks to
Speaker 2: the fact that there's just so much training available out
Speaker 2: there if you want to learn, take the time. And
Speaker 2: the fact is that Microsoft knows that there are less
Speaker 2: and less people interested in programming and data science at
Speaker 2: least at youngins and so this is a good way
Speaker 2: to you know, to invest in the future. Well then
Speaker 2: demand you know, I'm going into high schools a few
Speaker 2: times a year, and I keep pointing at like, this
Speaker 2: is an area that as interesting as you if you're
Speaker 2: into figuring stuff out and finding prout, you know, digging
Speaker 2: through data, like, you'll find interesting things that can be
Speaker 2: really valuable to companies. You can make a company a
Speaker 2: lot of money and make yourself a lot of money
Speaker 2: in the process. So, yes, still a fine area to follow.
Speaker 2: And it's it's the non insane part of machine learning too, right, Yeah, cool.
Speaker 1: So that's what I got. I was talking to us today,
Speaker 1: Richard Campbell.
Speaker 2: I went to the way back machine. My friend will
Speaker 2: not literally, I just went out. You know, I don't
Speaker 2: even know this. We have quite a few episodes of
Speaker 2: dot net Rocks, but I know we were talking. We're
Speaker 2: going to talk about a little about so our generation.
Speaker 2: It made me think of Kathleen Dollar, who we need
Speaker 2: to get back. I haven't talked to her in ages too.
Speaker 2: And Kathleen did a show with us back in twenty fourteen.
Speaker 2: This is episode nine thirty eight. It's only a thousand
Speaker 2: shows so called co generation and Rosalind because that's the
Speaker 2: year that Roslyn comes out. Yeah, and got a ton
Speaker 2: of comments. I mean this was actually one of the
Speaker 2: tour shows. We had Kathleen fly in to Saint Louis,
Speaker 2: right and we did we did it in person in
Speaker 2: front of hers, so we had a big audience, you know,
Speaker 2: lots of fun with that. And get this, this is
Speaker 2: a comment from twelve years ago. This is Stephen Morowski,
Speaker 2: another past guest on the show and somebody who's frequented
Speaker 2: running as it was a big DevOps believer, So you'll
Speaker 2: love this. Comedy goes ah around the thirty seven minute
Speaker 2: mark when the conversation detoured from PowerShell to script cs.
Speaker 2: Your script cs. Oh yeah, yeah, I've used it to DevOps.
Speaker 2: My it was great stuff at the time. Was that
Speaker 2: was that? Nikhel?
Speaker 1: I think that rings a bell?
Speaker 2: Nick Heil, Yeah, Karthur Parthy, something like that. From PowerShell
Speaker 2: to script CS to DevOps my hope sword. I love
Speaker 2: that you talked about building a PowerShell API and possibly
Speaker 2: co generating some of the plumbing. Then Kathleen implied the
Speaker 2: DevOps is a job which is a person with a
Speaker 2: split skill sheet and you didn't correct her Richard, Yeah,
Speaker 2: I would have. I should have, because DevOps is not
Speaker 2: a job. Meanwhile, one of the true intents of DevOps
Speaker 2: was never really talked about or identified, talking between the
Speaker 2: teams and sharing ideas and concepts, yes, developers and operators
Speaker 2: and stakeholders, and keeping everybody communication together. That being said,
Speaker 2: the rest of the show is pretty awesome, so I'll
Speaker 2: let that mischaracteris position of DevOps slide this time. Thanks
Speaker 2: Steven twelve years.
Speaker 1: Ago keeping us honest.
Speaker 2: I enjoyed the conversation around languages used by devs and
Speaker 2: ops coming together, but Kathleen hit on a key point.
Speaker 2: PowerShell is a shell first and foremost it could be
Speaker 2: used for programming, but it is a shell and offers
Speaker 2: shell semantics. Sea sharp is a programming language and script
Speaker 2: cs offers the ability to write scripts in it. But
Speaker 2: it's still not Oh and I cannot wait to see
Speaker 2: what Kathleen kicks out around ETW. That's event tracing for Windows.
Speaker 2: This is all about the telemetry back twelve years ago.
Speaker 2: That might fill a huge gap in operations ability to
Speaker 2: tap into the ETW stream in a more straightforward manner.
Speaker 2: And I don't know that it ever became anything. Of course,
Speaker 2: these days that's not even how you think about. It's
Speaker 2: all open telemetry, right, you've changed the whole standard for that. Hey, Steven,
Speaker 2: nice flash from the past, man, Thanks so much for that.
Speaker 2: And a coffee of music Koba is on its way
Speaker 2: to you. And if you'd like a copy of music,
Speaker 2: go buy. I read a comment on the website at
Speaker 2: donat Rocks dot com or on the facebooks. We publish
Speaker 2: every show there and if you comment there and I
Speaker 2: read on the show, we'll send you a copy of
Speaker 2: music Goba.
Speaker 1: You know, we did an episode with Glenn Block on
Speaker 1: script CS March tenth, twenty fifteen.
Speaker 2: Yeah, and you know what this one? That was the
Speaker 2: period where the roslins Sharp run time didn't have a
Speaker 2: license for you to use it freely, so you had
Speaker 2: to force anybody using it to download it themselves. Yeah,
Speaker 2: I could had all this weirdness around it because this
Speaker 2: is before open source and before that whole mindset. Although
Speaker 2: it's imminent, right this is January of twenty fourteen. We
Speaker 2: published this, like in April they will release rosalin As
Speaker 2: on GitHub as cross platform open So it.
Speaker 1: Was Glenn Block that started was CS so March twelve,
Speaker 1: twenty thirteen, we did episode eight fifty three with him
Speaker 1: and it's called Glenn Block goes open source with script cs.
Speaker 2: Right, so there you go. Sort of we're still battling
Speaker 2: with what that would even mean, but right, it's funny
Speaker 2: in the context you just bring it up because this
Speaker 2: is from January twenty fourteen. Four months later at the
Speaker 2: Bills conference, they'll announced it.
Speaker 1: Yeah, so there you go. And Richard mentioned music to
Speaker 1: code Buy still going strong and have downloads every day,
Speaker 1: twenty two tracks currently. You can get him in wave,
Speaker 1: flak or MP three format. All right, Jason, it's your turn.
Speaker 1: Jason Bock is a staff software engineer at Rocket Mortgage
Speaker 1: and a Microsoft MVP for c Sharp. You can find
Speaker 1: out more about him at jasonbok dot net. Welcome Jason,
Speaker 1: thanks for having me.
Speaker 3: I appreciate being here, looking forward to it.
Speaker 1: Yeah, so we're talking about source generation or source generators
Speaker 1: and kind of an open topic. So let's just start
Speaker 1: with the elevator pitch. What is a source generator and
Speaker 1: how does it work?
Speaker 3: So a source generator is a feature in the compiler.
Speaker 3: You know, Richard, you already mentioned Roz and that's the
Speaker 3: compiler underneath the scenes for c sharp and bend that
Speaker 3: way since twenty fifteen. And initially there were extension points
Speaker 3: in the compiler where you could write analyzers, code fixes,
Speaker 3: and refactorings, which is cool. That has a lot of
Speaker 3: interesting stuff and it plus the Holy API was there.
Speaker 3: You could build whatever tools you wanted on top of
Speaker 3: that to do code analysis. So it really a lot
Speaker 3: of developer to do all sorts of wild interesting things
Speaker 3: and also beneficial for other developers. At some point they
Speaker 3: added in another extension point. I believe this was for
Speaker 3: c sharp nine, and it's called source generators. So effectively
Speaker 3: it allows you during the compilation process to look at
Speaker 3: code that currently exists in that compilation and say, hey,
Speaker 3: I want to generate some code, and there's a couple
Speaker 3: of reasons why you want to do that. But you
Speaker 3: participate when you write, When you author a source generator,
Speaker 3: you participate in that compilation pipeline. And so you can
Speaker 3: see literally, like in an idea, as somebody's changing code,
Speaker 3: you can react to that and potentially change what you
Speaker 3: generated if the use case that you're trying to hit
Speaker 3: needs to do something like that. So it's native to
Speaker 3: the compiler, it's not like a tool that you do
Speaker 3: cogeneration as a separate step. Though there's nothing wrong with that,
Speaker 3: but you don't have to have that separate tool. Do
Speaker 3: all that you were talking beforehand about tool or pre
Speaker 3: existing tools like T four T four templates is something
Speaker 3: that I think if you've been in dotnet for a while,
Speaker 3: you probably have heard of again, a nice fine tool,
Speaker 3: except that's something you have to manually run. So source
Speaker 3: generators are part and parcel of the Roslin compilation pipeline.
Speaker 2: Yeah, you know what. I found the blog post by
Speaker 2: Philip Carter, who was the PM at the time, Yeah,
Speaker 2: for the preview of source generators in DAT five.
Speaker 3: Yes, yep.
Speaker 1: And we had talked about them a couple of times.
Speaker 1: And one thing I can remember is the verb squirt
Speaker 1: you want to just squirt some code in there.
Speaker 3: I'm not going to be using that. I still use
Speaker 3: that term.
Speaker 1: Or I laughed at the time too, Richard. I laughed
Speaker 1: like Richard's doing right now.
Speaker 2: I'm offering at how uncomfortable Jason is.
Speaker 3: That's what's funny.
Speaker 1: You know, you just want to squirt a little code
Speaker 1: in there.
Speaker 2: There really no no code squirting.
Speaker 3: You can use that curl I probably.
Speaker 1: Won't actually picked it up from the Microsoft guests we
Speaker 1: were interviewing at the time. I don't remember who it was,
Speaker 1: but it wasn't my word. I'm just a messenger.
Speaker 2: But I mean, yeah, so now I can't even see
Speaker 2: code injection because it's ruined. Now you've read it, sorry,
Speaker 2: like about code injection.
Speaker 1: So I'm taking it that the answer to my question
Speaker 1: is now they don't use that term anymore.
Speaker 3: I haven't heard of that related to source generators. And
Speaker 3: maybe it was Von Ever and I don't think I
Speaker 3: ever would have used that as a way to describe
Speaker 3: source generators.
Speaker 1: Maybe it was Eva Lowe that might have been talking
Speaker 1: about it. I don't all right, I've I've derailed this
Speaker 1: long enough. Let's move on. So the source genera the
Speaker 1: source generator in the compiler. Then how do you decide
Speaker 1: when and what to uh, you know generate? Is it
Speaker 1: something that is just built into the pipeline that you configure,
Speaker 1: you know, if this is that, then put this code
Speaker 1: in or I don't understand.
Speaker 3: So there's I'll kind of break the answer up into
Speaker 3: two parts. There's the kind of the mechanism of what
Speaker 3: you do if you're authoring a source generator, and then
Speaker 3: maybe why you'd want to do this in the first place. So, okay,
Speaker 3: the the what or the how part of it is
Speaker 3: you essentially write a class library where you have a
Speaker 3: class that implements one interface I incremental generator. There's another one,
Speaker 3: but that's considered obsolete and I'm not even going to
Speaker 3: bring it up because I don't want anybody to even
Speaker 3: use it anymore. That's the c sharp team really wants people.
Speaker 3: If you're offering a source generator, use I incremental generator, okay.
Speaker 3: And what you do in the implementation of that interface
Speaker 3: is you effectively want to trigger your source generation off
Speaker 3: of the existence of an attribute. So an attribute exists
Speaker 3: somewhere in code, and your source generator is looking for
Speaker 3: that attribute, and when it shows up, then you're going
Speaker 3: to do whatever you want it to do. And we
Speaker 3: can cover some examples later on, but that's really the
Speaker 3: trigger point. You see that attribute there, and then you say, okay,
Speaker 3: that attribute is maybe on a class, or it's at
Speaker 3: the assembly level, or it's defined on a method. And
Speaker 3: so now what I'm going to do is I have
Speaker 3: all the information of the compilation, the syntax, the semantics,
Speaker 3: all that stuff, and so now I can say, well,
Speaker 3: this attribute'es on a class. So maybe I want to
Speaker 3: look for all the properties on a class and I'll
Speaker 3: use the rosal API to find that stuff and potentially
Speaker 3: build another class. Or maybe the class is partial, so
Speaker 3: I want to extend that class with some other implementation
Speaker 3: so that all gets combined up during compilation. So that's
Speaker 3: what as an author of a source generator is going
Speaker 3: to do. You'll define an attribute, you'll write an implementation
Speaker 3: of this interface, and then you'll basically look for that
Speaker 3: attribute to exist and generate some code. Now that's some mechanics,
Speaker 3: but I think it's also important to discuss why would
Speaker 3: you want to do this in the first place. Sure,
Speaker 3: what's the benefit of it. There's a couple of things
Speaker 3: that go at least for me that when I've written
Speaker 3: source generators that I try to keep in mind. One
Speaker 3: of them is does this it makes something that a
Speaker 3: developer has had to do and take it essentially out
Speaker 3: of their hands because it's repetitive. It's something that you
Speaker 3: know is very mechanical, mechanistic, and you don't as a developer,
Speaker 3: can do it. It's just time consuming and I don't
Speaker 3: want to do it. So that's one place where source
Speaker 3: generators can be helpful because it takes that out of
Speaker 3: your hands. You can just put an attribute somewhere and
Speaker 3: the source generator does it all for you.
Speaker 1: So I think what you're getting at is something that
Speaker 1: you'd have to do a lot, like duplicate over a
Speaker 1: collection or something like that.
Speaker 3: Yeah, and not all the time, but that's definitely something
Speaker 3: that if you see you might go that might be
Speaker 3: a case to write a source generator so that I
Speaker 3: don't have to do exactly that all the time. Another
Speaker 3: one is, for example, if I am building an application
Speaker 3: and I want to do ahead of time compilation. So
Speaker 3: if people know what that is, it's listening to this
Speaker 3: ahead of time compilation is essentially saying I've got my code,
Speaker 3: but instead of building it so that they're done to assemblies,
Speaker 3: I'm going to build it so that it's targeting a
Speaker 3: specific run time like Windows or MAC or something like that.
Speaker 3: And so it does some things in the AOT compilation
Speaker 3: step so that it's specific to that run time.
Speaker 1: But don't the pragma things that you know, the hashtag
Speaker 1: if this OS, then do this or if that OS.
Speaker 1: Isn't that kind of addressing the same problem.
Speaker 3: It can just for you know, depending on your case,
Speaker 3: that you're just trying to say, hey, if I'm running
Speaker 3: on a particular run time, I want to do this.
Speaker 3: If you're using some of the the types that are
Speaker 3: for Cindy instructions that you want to say, well, if
Speaker 3: my processor supports it, I need to make that check
Speaker 3: before I actually use them. This is saying I want
Speaker 3: to have some optimizations done that I know. You know,
Speaker 3: I've written my code that's maybe more generalistic and I
Speaker 3: don't care about the runtime, but I wanted to run
Speaker 3: for these run times, specifically for potential performance benefits. The
Speaker 3: thing with source generators that we want to keep in
Speaker 3: mind with AOT compilation is that this is all code
Speaker 3: that's generated for compilation at compile time. If you've ever
Speaker 3: done things with reflection, that's all done at runtime, and
Speaker 3: AOT in reflection is like oil and water. They don't mix.
Speaker 3: They really become problematic because AOT will see, well, you
Speaker 3: have this amount of code that's actually never being touched,
Speaker 3: So I'm going to just shake it out of the
Speaker 3: tree and get rid of it because I don't need
Speaker 3: it anymore. But then your code runs and goes, wait
Speaker 3: a minute, I expected this to be here for reflection reasons.
Speaker 3: So that's another thing that is nice about source generation
Speaker 3: is that you can take those runtime reflection things that
Speaker 3: you're doing, make it a compile time process, and then
Speaker 3: they'll stick around with AOT as well.
Speaker 1: So it's very cool. Yeah, and all these things I'm
Speaker 1: trying to envision, you know, how you would do it
Speaker 1: without source generator. It's pretty obvious to see how something
Speaker 1: that's repetitive would be you know, impossible, especially if you know,
Speaker 1: don't know what those you know, what's in that list
Speaker 1: or how many there are, that kind of thing. But
Speaker 1: the other one I'm just still trying to wrap my
Speaker 1: head around.
Speaker 2: It's a very meta way to think, yes, yeah, I'm
Speaker 2: going to generate this code and with some parameters. You know.
Speaker 2: This is also it feels like the Java factory model too, right,
Speaker 2: that I beat a set of parameters and it spits
Speaker 2: out something for me. And this case is instead of
Speaker 2: just spitting out a class, is spitting out you know,
Speaker 2: potentially all kinds of things different.
Speaker 3: Yeah, and when you said the word meta, I was
Speaker 3: fortunate enough to be a co author in a book
Speaker 3: I came out like years ago. It's called metaprogramming in
Speaker 3: dot net and wrote it with Kevin Hazzard. Really good guy.
Speaker 2: Oh yeah, great guy.
Speaker 3: Yeah yeah, And that was one of the things he
Speaker 3: had the first chapter. We split the book in half
Speaker 3: and he got the first one, and he did a
Speaker 3: really good job at that first chapter, especially because he said,
Speaker 3: really everything with meta programming, people think about expression trees
Speaker 3: and reflection and aspector of programming and all these terms.
Speaker 3: And he said, beta programming is just treating your code
Speaker 3: as data.
Speaker 2: Right, that's great thinking. Yeah, it's just another kind of thing.
Speaker 3: And you're just looking at that data. Instead of looking
Speaker 3: at his code, you're looking at it probably as a tree,
Speaker 3: looking through the tree and saying, this happens here, So
Speaker 3: now I want to do something because of the existence
Speaker 3: of that data.
Speaker 2: Yeah. Well, and that's you know, that's what compilers do, right,
Speaker 2: They treat that code as data to turn into a
Speaker 2: set of actions in a machine. And we should take
Speaker 2: a break.
Speaker 1: Yeah, let's do that. We'll be right back after these
Speaker 1: very important messages. Stick around. Now we're back. It's dot
Speaker 1: net Rocks. I'm Carl Franklin. That's my buddy Richard Campbell
Speaker 1: either and that's Jason Bach you're listening to. We're talking
Speaker 1: about source generators, and I'm wondering, do you know if
Speaker 1: Microsoft is using source generators, you know, in their own
Speaker 1: code eating their own dog food?
Speaker 3: Yeah, I love I love that phrase. Yeah, eating eating
Speaker 3: your own dog food. They are. When source generators first
Speaker 3: came out, there wasn't anything in dot net proper, like
Speaker 3: a lot of developers like me and others were jumping
Speaker 3: on this because well it's so it's a cool thing,
Speaker 3: you know, but it was also helpful for certain circumstances.
Speaker 3: But it wasn't in as far as I remember, nothing
Speaker 3: in the dot need run time that did this. And
Speaker 3: now at this point there there are implementations. So for example,
Speaker 3: I think one of the most prevalent ones is regular expressions.
Speaker 3: So I want to be very clear off the top,
Speaker 3: I am not a reg ex expert.
Speaker 1: To nobody is exactly said you where i'd have less
Speaker 1: respect for you.
Speaker 2: Yeah. No, there are noble to understand rejects, and one
Speaker 2: of them is lying, Yeah.
Speaker 3: There are things I know and there are things I
Speaker 3: don't know, and I have no problem talking about what
Speaker 3: I don't know and I don't know. If I want
Speaker 3: to look up how to parse something. I will go
Speaker 3: you know, now these days I'll just say, in copilot,
Speaker 3: how do I write it? Rejects for this?
Speaker 2: You know, yeah, you know, we say rejects is the
Speaker 2: ultimate cut and paste language. But but now it's clearly,
Speaker 2: you know, an ll M language.
Speaker 3: I'm very impressed by people who know it actually, who
Speaker 3: know it inside and out. It's it's it's kind of weird,
Speaker 3: but it's also very impressive because people can do some
Speaker 3: very cool things with it when when needed.
Speaker 2: Without a doubt. Yeah, it's like I feel like it's
Speaker 2: like PowerShell too. It's like one of those things. If
Speaker 2: you use it every day, it will stick, but if
Speaker 2: you don't use it every day, it fades fast. Yeah, yeah,
Speaker 2: it's not going to hang around.
Speaker 3: So with ready expressions in NET, they've always been something
Speaker 3: that's actually interpreted, compiled, and run time. So if you
Speaker 3: write your rejects, nothing happens until somebody wants to do
Speaker 3: a match or they want to do something with the rejects,
Speaker 3: and that can lead to potentially some performance issues. Sure,
Speaker 3: So with rejects in C sharp, now what you can
Speaker 3: do is, I think the attribute is called generated rejects,
Speaker 3: but you put this attribute in your code, and you
Speaker 3: put the rejects string in the code or in the
Speaker 3: attribute I should say, and then there's a source generator
Speaker 3: that kicks in and will basically show you the implementation
Speaker 3: and see sharp of what that rejects will do. It's
Speaker 3: actually wha wow. It's really cool because you can use
Speaker 3: tools like visual Studio or writer and you can see
Speaker 3: what that generated code looks like. So if you really
Speaker 3: want to know what it takes to implement a rejex,
Speaker 3: the source generator shows you. And I'll even give Microsoft
Speaker 3: props on this that they went. I think that small
Speaker 3: but nice extra step in that when you have your
Speaker 3: rejects source generated to see sharp, they'll put in a
Speaker 3: whole bunch of XML comments and also just putting comments
Speaker 3: in the code, so if you really are interested in
Speaker 3: what it does, you can follow it fairly well. And
Speaker 3: it's nice because it puts this header XML comment at
Speaker 3: the top of what it's doing, so when you hover
Speaker 3: over the attribute, you'll see you know this this rejects
Speaker 3: will do the following things, and they will tell you
Speaker 3: we're looking for characters zero to nine and then we're
Speaker 3: going to skip and do the end it's great, it's amazing.
Speaker 3: And again, all this now gets put in your compilation.
Speaker 1: Does it go back the other way? Does if you
Speaker 1: change the code, will it update the rejects? Yes?
Speaker 3: And that's also a great thing about source generators is
Speaker 3: that when you're writing one, if somebody's changing something underneath
Speaker 3: the scenes for you, you genera your code, that generator
Speaker 3: code is going to be triggered, and so then you
Speaker 3: can now say, well, they change rejects from this to this,
Speaker 3: So now I'm going to change my rejex implementation to
Speaker 3: what the new state is and you'll see that change
Speaker 3: as the thing you're targeting will change.
Speaker 1: That's very cool, n mind blown.
Speaker 2: So yeah, no, and super powerful. And you know, the guy,
Speaker 2: the person who wants to look at that code is
Speaker 2: really uncomfortable with source generators sort of nondeterministic effects. I
Speaker 2: want to see what this thing is doing. Yeah, And
Speaker 2: it occurs to me we're living with some really serious
Speaker 2: non deterministic code generators these days. We just call them
Speaker 2: large language models.
Speaker 3: Right yeah, and with source generators that they're actually very deterministic.
Speaker 3: If I put in this rejex, I'm going to get
Speaker 3: this output now every time, right now, the implementers of
Speaker 3: that source generator may or versions go hey, we can
Speaker 3: improve this, or we could change this, and so that
Speaker 3: generated code may change underneath the scenes. But me as
Speaker 3: the user, I don't care because I just want to
Speaker 3: essentially work and if.
Speaker 2: They need to make me as a developer, my care
Speaker 2: a bit, but not a whole lot. You should you
Speaker 2: expect the same results, Like if it doesn't work the same,
Speaker 2: that's a buck yes.
Speaker 3: Yes, exactly. But if it works the same, and maybe
Speaker 3: it doesn't allocate as much memory or it works a
Speaker 3: little faster because they made improvements, great, I don't. In fact,
Speaker 3: typically with source generators, by default they make files, but
Speaker 3: they're not really files that exist in your project. That
Speaker 3: may sound a little weird, but they're projects that are
Speaker 3: there are files that are part of the project. That's
Speaker 3: what gets compiled. If you really want to save them
Speaker 3: the disc and you want them to be part of
Speaker 3: your repository, you can do that. But by default they're
Speaker 3: kind of these sort of a few you know, I
Speaker 3: can't even say the word right now, but these kind
Speaker 3: of ghost files, I'll use that term that they're there.
Speaker 3: They do exist, but they're not actually put to disc
Speaker 3: If that makes sense, so you're more if you're using
Speaker 3: something that as a source generation At least I feel
Speaker 3: this way as a developer, I just wanted to do
Speaker 3: what it needs to do it does it well? Does
Speaker 3: it match my coding style? Does it match any of
Speaker 3: that stuff? I really don't care. I personally don't care.
Speaker 3: I wanted to actually just do what it needs to
Speaker 3: do and do it well. So regular expressions is one
Speaker 3: of them. In Microsoft, there's also places with p invokes,
Speaker 3: with serialization, logging configuration. You know that they've added in
Speaker 3: source generators for various advantageous scenarios.
Speaker 1: That's cool.
Speaker 2: I haven't heard P and voke in a while.
Speaker 3: Yeah, yeah, neither of I. I heard about it and I went, oh,
Speaker 3: that's great that they did that, and then it just
Speaker 3: went right out of my head because I haven't done
Speaker 3: a P and vulcan in decades.
Speaker 1: So can you give me a scenario where a developer
Speaker 1: working on a project is facing, you know, something that
Speaker 1: they have to do and a code a source generator
Speaker 1: would be the solution.
Speaker 3: It's a it's a good quest question because typically at
Speaker 3: least what and me as a developer day to day
Speaker 3: with the stuff that I do. It's not a common thing,
Speaker 3: and I think I want to stress that because while
Speaker 3: I think source generators are cool and if the opportunity arises,
Speaker 3: people should use them. But I think that's a key
Speaker 3: part of this is that if the opportunity arises for
Speaker 3: a lot of things that we do as developers, I
Speaker 3: shouldn't say a lot, but there's typically even though there's
Speaker 3: things that we repeat, that doesn't necessarily mean we should
Speaker 3: go run off and do it as a source generator.
Speaker 2: Yeah, don't turn this into a hammer you whack everything.
Speaker 3: Well, yes, exactly. It's a great tool, but it's still
Speaker 3: a tool that you don't need to use that tool everywhere.
Speaker 2: It reminds me of aspect orated in general. Right, yeah, yeah,
Speaker 2: it's a way of thinking.
Speaker 3: It is it is, and it's also it's also again
Speaker 3: because it's part of that compilation pipeline, you have to
Speaker 3: be very aware of how fast it runs. If you're
Speaker 3: going to do like I've heard some people say, well,
Speaker 3: we generate this code because we read from a database. Nope,
Speaker 3: source generators don't do that enough, because you're going to
Speaker 3: kill performance as it looks in a tool like Visual
Speaker 3: Studio Writer. So don't do that at all. You can
Speaker 3: build a tool to do that. That's great. Don't use
Speaker 3: a source generator for that. You really want to just
Speaker 3: look at things that are in code and then generate
Speaker 3: new code off of that. So a lot of the
Speaker 3: things that you see source generators written for are kind
Speaker 3: of these generalistic like patterns or things that people do,
Speaker 3: like serialization, like mocking. That's one of the things I
Speaker 3: wrote a source generator for, and funnily enough, cold rocks.
Speaker 3: So but that one uses source generation, you know. It's
Speaker 3: it's things that I think have a more general pattern
Speaker 3: that you're going to write a source generator for. It's
Speaker 3: not maybe necessarily what you do specifically with things that
Speaker 3: are related to your business or whatever you're working on.
Speaker 2: Okay, fair enough.
Speaker 1: Yeah, if you do find yourself in that position where
Speaker 1: you know what, I think we need a source generator,
Speaker 1: here give us some tips for people when they're writing
Speaker 1: their first source generator.
Speaker 3: The first tip is the one I said before, which
Speaker 3: is considered not doing it. Yeah, and I know that
Speaker 3: I know it well, it's it sounds.
Speaker 2: You almost have to not care about performance, right like well.
Speaker 3: And it's also writing a source generator has kind of
Speaker 3: a I don't want to say it has a it's
Speaker 3: not an insurmountable cliff you got to come over. But
Speaker 3: there is something you do have to understand at least
Speaker 3: some parts of Rosmond. You don't have to be a
Speaker 3: compilation expert, but you have to understand what a sintexturee is,
Speaker 3: what a semantic model is, at least have somewhat of
Speaker 3: a high level of that stuff. You have to understand
Speaker 3: how to build a source generator, which long story short,
Speaker 3: can be a little interesting, especially as you try to
Speaker 3: pasckage these things up into nu get packages. There's a
Speaker 3: couple of things over time that have been problematic that
Speaker 3: the community has kind of rallied around and figured out
Speaker 3: what's the best way to write these source generators. So
Speaker 3: that's why I don't mean to discourage people. It's just
Speaker 3: if you think you want to write one, it might
Speaker 3: be a better approach just again, write a command line
Speaker 3: tool as a console app, or write a custom MS
Speaker 3: build task that might actually be easier.
Speaker 2: There's probably another way to do that. Some question is
Speaker 2: is it.
Speaker 1: Better maybe go find a package that's already written and
Speaker 1: that's popular, so that you can see how they did.
Speaker 2: It exactly be a good idea. I just said this
Speaker 2: horrible chill where it's like I invoke it. I use
Speaker 2: a source generator to call to an LLM to spin
Speaker 2: out code for me that I ain't started in my application.
Speaker 2: I mean, what could go wrong with that?
Speaker 3: A lot wrong with that? You know, Richard, go for it.
Speaker 3: That would be awesome, really cool, But.
Speaker 1: That concludes the anti pattern session that rock.
Speaker 2: Yeah the best.
Speaker 3: There's a lot of good resources out there now for people.
Speaker 3: There is some sites that actually list like all the
Speaker 3: known open source implementations for various source generators out there
Speaker 3: and the ones that Microsoft does in the box. There
Speaker 3: are some discord servers out there that people from the
Speaker 3: c sharp team are on, so if you have questions,
Speaker 3: you can go in there and if anybody knows, they
Speaker 3: know because they effectively built the features, so they'll they'll
Speaker 3: give you tips.
Speaker 2: I really like these, you know, source generators for Jacks,
Speaker 2: source generator for p and Vogue, like these rarely used
Speaker 2: technologies where sometimes it's a good solution to a problem
Speaker 2: and now I can introduce this additional mechanives that gives
Speaker 2: me more observability, more understanding of what's happening. Yes, that's
Speaker 2: exciting to me. That seems like one of my favorite
Speaker 2: cases here.
Speaker 3: Yeah. Yeah. But the other case that I briefly mentioned
Speaker 3: is the one with the mocking frameworks. With this one
Speaker 3: that I've created, I started it in twenty fifteen, and
Speaker 3: it was mostly just because, like I mentioned at the beginning,
Speaker 3: when Roslin first came out, it was analyzers co fixes
Speaker 3: for factories, and I wanted to sit there. I sat
Speaker 3: there and I went, what could I do with Roslin
Speaker 3: That isn't one of these things? And so I looked
Speaker 3: at mocking frameworks, and I said, instead of using a
Speaker 3: way to generate types that run time with like castle
Speaker 3: Dynamic or Castle core and all that stuff, could I
Speaker 3: do that somewhat with just generating c sharp. So originally
Speaker 3: I just generated c sharp in this, and then I
Speaker 3: rosin was actually a very small part of it. It
Speaker 3: just compiled that c sharp.
Speaker 2: I had a lot about Castle project in ages a
Speaker 2: great point.
Speaker 3: But then when source generators came in as a feature,
Speaker 3: I went back and I said, okay, take all of
Speaker 3: what I did and move that into a source generator.
Speaker 3: One other thing, well, one of the things with mentioning
Speaker 3: this that I think is also really important is that
Speaker 3: with a lot of the mocking frameworks that are out there,
Speaker 3: they use and I mentioned this before, the concept of
Speaker 3: an expression tree, which expression trees are these great little
Speaker 3: things in dot Net or I should say, She's sharp,
Speaker 3: but they really haven't been updated in quite a long time,
Speaker 3: and in fact, they're not going to be updated. That's
Speaker 3: actually been stale.
Speaker 2: Of course twenty seventeen. Dude, that's a long time ago, now, yeah.
Speaker 1: Wow.
Speaker 3: So there are features that have been added in C
Speaker 3: sharp that don't exist in an expression tree. And so
Speaker 3: the nice thing about writing a source generator is it's
Speaker 3: in C sharp. I can generate anything in C sharp,
Speaker 3: so there's no limitation as to what I can support.
Speaker 3: So for Rocks, one of the things, for example, that
Speaker 3: I can do is support restructs spans, which are becoming
Speaker 3: more prevalent as time goes on. Other mocking frameworks can't
Speaker 3: because they're tied to expression trees and they won't be
Speaker 3: able to mock types that have these types within their definition.
Speaker 3: So that's another advantage of source generators. It's all c sharp.
Speaker 3: Anything you can do in C sharp, you can generate
Speaker 3: with a source generator.
Speaker 2: Right, Yeah, And it all comes back to Roslin this
Speaker 2: re entrant compiler. Essentially, this compiler is a service where
Speaker 2: you can create you can create stuff from that compiler
Speaker 2: that you can feed back to that compiler.
Speaker 3: Yeah, I mean I remember, you know, and you probably
Speaker 3: remember this too, But way back in PDC days, I
Speaker 3: started to hear that the you know, honors would be
Speaker 3: on stage with what's in new and C sharp and
Speaker 3: then he would hint right at the end this thing
Speaker 3: maybe called compilers a service, you know, and you would
Speaker 3: only talk about it for a couple of minutes. But
Speaker 3: I heard about that and I kind of got hooked.
Speaker 3: I was like, what is this, what is this new thing?
Speaker 3: And you know, as we found out, it was this
Speaker 3: whole rewriting of the compiler. Yeah, and not just rewriting
Speaker 3: it in SEA sharp, but making it so they use
Speaker 3: a developer could use it. And I personally think it's
Speaker 3: one of the one of the best things or Microsoft
Speaker 3: ever did with dot.
Speaker 2: So that it was always an argument that they got
Speaker 2: to it too late, like it's supposed to be. The
Speaker 2: fun of the fundamental metrics of any language is that
Speaker 2: you can write the language, and the language they didn't
Speaker 2: get to it for a long time.
Speaker 1: I think it's funny that Anders chose to use like
Speaker 1: Columbo style to drop that one at the end.
Speaker 2: The one thing, well, and it's the story as I
Speaker 2: heard it, and let's face it, I'm the guy who's
Speaker 2: been collecking the story for a long time. Is they
Speaker 2: hit a point where you had the regular C sharp
Speaker 2: compiler and its features, and then you had the compiler
Speaker 2: that ran in visual studio to do all the intelligence
Speaker 2: for you, and they were having a tough time keeping
Speaker 2: those things in sync. It's like this should be the
Speaker 2: same thing, Like why are we doing this twice? Yeah,
Speaker 2: And that was finally the impetus to spend the sheer
Speaker 2: amount of money it took to rewrite that.
Speaker 3: Yeah, I've heard numbers, and it does not sound like
Speaker 3: it was cheap, No.
Speaker 2: But it but it was going to get only more expensive.
Speaker 2: The other side of this was, and we did this
Speaker 2: on the show, was this sort of you know what
Speaker 2: really happened, all the C sharp developers, the folks that
Speaker 2: were building C sharp became C sharp developers because then
Speaker 2: they were C plus plus developers that's how they were
Speaker 2: writing C sharp And so suddenly, yeah, good point the
Speaker 2: shape of from C sharp six on this it changed
Speaker 2: because oh yeah, there was all these remarkable minds working
Speaker 2: in c sharp every day and all of that. You know,
Speaker 2: I wish I could just I think on the Matt's
Speaker 2: targets you were talking to us, says this is a
Speaker 2: Cambrian explosion like this, and then look at what's happened,
Speaker 2: you know, eight versions later to c sharp. It's just
Speaker 2: a different beast now, and I would argue better in
Speaker 2: every way.
Speaker 3: Well with also it becoming open source, I think was
Speaker 3: a huge part of that too. You look at the
Speaker 3: pace and the evolution of c sharp before that and
Speaker 3: now after. It's funny because developers that I talked to
Speaker 3: sometimes or you'll hear in the community, it's almost like
Speaker 3: the pendulum has swung to the point of now they're
Speaker 3: complaining about it moving too fast. There's too many features,
Speaker 3: there's too many versions, and I can't keep up, and
Speaker 3: you know you're going to go, well, which one do
Speaker 3: you want? But I think by them moving it to
Speaker 3: open source, that was also a big part of it,
Speaker 3: because now you know, people like you and me, we're
Speaker 3: you know, well maybe you're Richard, but you're not just
Speaker 3: going to go into rosalind clone it and say I
Speaker 3: want to add a new feature and submit a PR
Speaker 3: and it's going to go in. That doesn't happen.
Speaker 2: To be very clear, I am not going to do that. No, no, no, no,
Speaker 2: am I okay. And when we've actually had people on
Speaker 2: the show that became Microsoft employees because of their contributions
Speaker 2: into dot nowt Yes, but it's incredibly rare, like that
Speaker 2: is not a career path you should pursue, true kind of,
Speaker 2: you know.
Speaker 3: But there have been people that will, not not just
Speaker 3: with Roslin, but the Dune on time. They'll go in
Speaker 3: and maybe add in a new method to something, or
Speaker 3: maybe they'll do a little bit of an improvement. I
Speaker 3: think Ben Adams, if his name comes on my head,
Speaker 3: he did a lot of stuff underneath the scenes for
Speaker 3: a while to help out. Those are just community members
Speaker 3: outside of Microsoft that just want to help this open
Speaker 3: source effort, and I think that's also really helped things
Speaker 3: evolve faster and also better over the years.
Speaker 2: Totally. Yeah, yeah, awesome stuff.
Speaker 1: So what's next for you?
Speaker 2: Man?
Speaker 1: What are you working on? For me?
Speaker 3: Yeah? Well, my day job, which you know this is
Speaker 3: all audio, but over my shoulder there I'm pointing. Now,
Speaker 3: that's that's my day job, and that's pretty much what
Speaker 3: I do. My focus is within Rocket and where I'm
Speaker 3: at and the team I'm on. We spend our time
Speaker 3: focused on building packages and libraries. You know, my focus
Speaker 3: is on dot net, but we also have people that
Speaker 3: do stuff with JavaScript. We've also we don't really evolve this,
Speaker 3: but there have been some stuff done in PHP that
Speaker 3: we inherit. That's the fun of being in a corporation. Sometimes,
Speaker 3: sure that gets thrown.
Speaker 2: On you, but that code still makes the company money.
Speaker 2: Otherwise it wouldn't be there, exactly.
Speaker 1: Yeah.
Speaker 3: So, but most of my stuff is in dot net
Speaker 3: and just building stuff that other teams can use, other
Speaker 3: engineers can use to make things so they don't have
Speaker 3: to build that stuff.
Speaker 2: The definition of an enterprise architect, my friend, that's what
Speaker 2: it sounds like.
Speaker 1: Kinda yeah, so I take it some of that it
Speaker 1: has been source generators.
Speaker 3: Not yet, we haven't really found anything yet to do
Speaker 3: that internally, but I do keep that. I keep my
Speaker 3: eyes open to see if that's ever needed.
Speaker 2: This is a good answer to a particular problem the
Speaker 2: company has.
Speaker 3: Yeah, exactly. So that's you know, that's my day job.
Speaker 3: But I still go out. I still speak at conferences
Speaker 3: when I can and and if I can make that happen,
Speaker 3: I do that. Don't write books anymore for lots of reasons.
Speaker 1: I guess I write books anymore.
Speaker 3: Yeah, exactly.
Speaker 2: Writing one book is a good idea. You need to
Speaker 2: have that thing in your hand. It's an example of
Speaker 2: your effort. Writing more books means you're just not learning, right.
Speaker 3: I was about to say, like, I've been part of
Speaker 3: I think six or seven books in my life. Yea.
Speaker 2: Sometimes you have to learn these mistakes over and over again.
Speaker 3: Yeah. Yeah. The last one I wrote was in twenty fifteen.
Speaker 3: That was actually for something on Rosalind and I said,
Speaker 3: I'll do it if one of the stipulations is I
Speaker 3: don't have to pad the.
Speaker 2: Book, right, I just want to stick with the meat.
Speaker 2: It doesn't have to be eight hundred pages.
Speaker 3: Yeah, And so they were fine with that, and so
Speaker 3: it's like one hundred and fifty pages and like something
Speaker 3: like that. And that was great, and I sold tens
Speaker 3: of copies and I.
Speaker 2: Both guys, you bought it. Just awesome, Jason time.
Speaker 3: I did have somebody come up to me at a
Speaker 3: conference once and say to me, I really want to
Speaker 3: thank you for writing that book. Because I was doing
Speaker 3: my master's thesis on compilers and I was using C
Speaker 3: sharp and I was stuck in your book actually helped
Speaker 3: me and I was.
Speaker 2: Like, that's awesome, that's cool, that's great, that's cool here.
Speaker 2: You only get so many of those ever. Yeah, yeah,
Speaker 2: once in a while you can affect some people like
Speaker 2: that's a good day. That's why you really make that stuff.
Speaker 3: Yeah.
Speaker 2: I thought about this a lot. I would hope you
Speaker 2: don't have to. Here's an approach.
Speaker 1: Ye.
Speaker 3: So, but that's the last time I did it, and
Speaker 3: that's probably the last time I'll ever do it.
Speaker 2: Yeah. Yeah, the world's moved on. Yeah, very good.
Speaker 1: Well, the website is Jasonbock dot net. You can read
Speaker 1: all about him there. And Jason, thank you very much.
Speaker 1: This has been very informative.
Speaker 3: Thank you for having me. I appreciate it.
Speaker 1: Thanks you bet all right, We'll talk to you next
Speaker 1: time on dot net rocks. Dot net rocks is brought
Speaker 1: to you by Franklin's Net use by Pop Studios, a
Speaker 1: full service audio, video and post production facility located physically
Speaker 1: in New London, Connecticut, and of course in the cloud
Speaker 1: online at pwop dot com. Visit our website at d
Speaker 1: O T N E t R O c k S
Speaker 1: dot com for RSS feeds, downloads, mobile apps, comments, and
Speaker 1: access to the full archives going back to show number one,
Speaker 1: 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, See you
Speaker 1: next time you got javans am