MIX-9 === [00:00:00] James: Welcome back everyone to another merge conflict. We are in the height of .NET eight preview season, and I cannot be more excited. This has been a big week. Um, we are recording this on the 12th and on the 11th. Seven-eleven. Seven-eleven. Frank, yeah. Sure, why not? So like, like the chain, uh, things dropped. We've got new previews do .NET eight, preview six. I mean, that is like literally it's basically done and it feels like it's done. But then also they're dropping new features left and right and I'm so excited about. And we, I have three big things to talk about today, Frank, that I want to dive into with the .NET eight preview six. Some things don't even need it do .NET eight, preview six. Some of them do, and some of them are new tooling things. I wanna talk all about them. First and foremost, Frank. I wanna talk about. New C# 12 features new, new C# 12 features. Have you seen this? Do you know [00:00:51] Frank: about this? No. Okay. Well see, you know, I did preparation for this video. I was already, I, I'm, I'm ready on the tooling side. Okay. And then you come swinging out with a C# 12. I wasn't ready for this. Didn't we cover C# 12 already? Uh, All right. We covered it twice already. [00:01:07] James: They're, they're taking one of my favorite features. So useful. One of the most useful features in the history of, of c Well, there's so many features, but more one of the more maybe the C# six feature and they're like, we're doubling down. Do you know it's double the release from Donnet six, or we're going in with that, this name of. [00:01:26] Frank: Name of, oh, [00:01:27] James: name of, name of, name of, oh, you were gonna guess. And then I didn't let you guess, did I? I'm sorry. No, you, you [00:01:33] Frank: totally talked over me. Name of though. Wow. Um, what's sort of ad? It works [00:01:39] James: fine. Ah, but it didn't work with member names, uh, things in Initializers, static members or an attributes. And now it does. [00:01:48] Frank: It didn't work with us. Okay. I'll take your word for it. Puppy always worked when I needed it to. Maybe I always just used it with properties. Maybe I was just a boring [00:01:58] James: person. Yeah. I always thought it, it'd always work too, but apparently it didn't work with certain, certain things. Member names and, okay. Initializers and well, [00:02:07] Frank: yay. Great. Awesome. [00:02:10] James: Yeah. So for example, like you could do like, you know, let's say you have a string named. Frank, you could do Frank, do length, and then you could do a name of that, um, as a length. [00:02:22] Frank: Yeah. Okay. I like it. I like it. Um, again, I'm just a little surprised, but I like it. It should have been there in the first place. Glad [00:02:32] James: it's in the box. Um, what, what were you thinking? I was thinking C# CRP [00:02:37] Frank: are are gonna abuse it. No, I I wasn't thinking of a C# six feature. I, I, I was worried you were gonna say something completely different and we were just gonna be ruined here in the podcast. C# 12, man, I, I, I was worried that you were gonna say extension methods or extension everything as they like to call it. Because No, someday we will have extension everything. But let, let's not even bring it up. Let, let's not even mention the name anymore. [00:03:06] James: Dot C six. Um. Okay. C# six we got using static, eh, pretty good. That's pretty good. No, I, I don't use it as much as I thought I would, but Sure. Same. Same. Uh, yeah. That I agree with that. Yep. Uh, name of expressions, I love name of these all the time. That's, that's a feature that I use more of now. The name of feature is really great for refactoring, but also just. Mostly refactoring, but also you don't want random stringing allocations as [00:03:34] Frank: hanging around. No, it's, it's, it's, it's a good safety. I, I, it's caught mistakes I've made [00:03:39] James: for sure. Here's another big one that came in. C# six. C# six. Honestly, one of my favorite Cs. No conditional operatings, the question mark dot the Elvis operator. Wow. [00:03:51] Frank: Yeah. Null propagation. Um. Mm-hmm. I think it's good. I think it's good. It was a little bit scary because I think that was before null referenced checking. I think that came in C# eight. Yeah. So it's a little bit scary that we're making things even more null. But yeah, I guess, I guess like if the null reference exception happens earlier or later, I guess maybe later is better. So good job null propagating thing or. I prefer you ready for this checking. [00:04:20] James: Okay. Here. You ready for this one? In C# 6? It's a big one. [00:04:24] Frank: Mm. Is it? Is it 16 bit floating point that came at some [00:04:31] James: point? It, no, I don't think it did. No. String and interpolation. That is a big [00:04:37] Frank: one. I was using that ginormous just like an hour or two ago. Yeah. I was string interpolating everything. Yeah, [00:04:44] James: we got you. Like it, [00:04:45] Frank: I I don't like the dollar sign in the front. I, I don't like putting the dow sign. What [00:04:49] James: do you, what do you want it to, what do you, what's it to magically know? What do you want it to be? What do you want it to be? Frank? You're, you're meds coon. You design it. [00:04:58] Frank: Okay. Well, I, I do like that. What in C nine or something? You could put like $30 signs and 300 quotation marks. [00:05:08] James: Yeah. [00:05:09] Frank: Just in case, you know, just in case. [00:05:12] James: Uh, we got a bunch of initialization updates. Auto property, initialization index, initializers expression, bodied function members. [00:05:22] Frank: Expression. That's really important. Yeah. I try really hard not to write squiggly braces anymore. That's right. C#. That was a big release. Wow. Okay. Which, uh, which uh, version of do .NET Core was that, was that like two or three? We're, we're just going down memory lane. Hi everyone. Enjoying the view. I don't trees [00:05:47] James: on the left. I don't know. It says you, you have to have mono four or newer, so whatever that, that means, who [00:05:55] Frank: knows? Okay. Yeah, I like that we're in a more simplified version number world, at least today. [00:06:04] James: Yeah, they also had, um, exception filters and also my favorite, one of my favorites. You can do awaits in the finally block in the catch and the finally. That's huge. [00:06:15] Frank: What were you doing? Why? Why are you doing awaits in the, finally you gotta [00:06:21] James: fi, you gotta finalize stuff asynchronously. [00:06:23] Frank: No. Yeah. That's like a precursor to the Async four H then yeah, the awaiting on that one. Interesting. [00:06:33] James: Um, okay. We also got, uh, uh, you have to tell me about these two specifically. One is inline arrays. Apparently they added a, a thing where you can do a attribute called inline array. It's a compiler service. Uh, and here they're creating a struct called buffer of 10. Yeah. And it's basically pre locating 10 to the array or something like that. Can you explain this one to me? Yeah, [00:06:59] Frank: sure. Um, I'm making a slight guess here. So 90% correct. Uh, I think what they're doing is exposing a feature that's available in IL in the immediate intermediate language at the assembly level. And that is when you stack, allocate, or even heap allocate, I think in both conditions you can just have memory tucked away in the assembly and you can say whatever you memory you allocate in ram. Like I said, I think both heap and stack, it'll just copy over what's already in the assembly or maybe even do fancier things with crazy memory management tricks and all that kind of stuff. So it's just a clever way to store a bunch of data inside of your assembly and get pre initialized arrays. [00:07:47] James: Not [00:07:48] Frank: sure what the runtime advantages are and that kind of stuff, that that's some pretty low level optimization. When you start caring about how quickly your arrays, your constant data arrays are initialized in memory. [00:08:01] James: Yeah, I mean, Kathleen literally said in this blog post that it was pretty much made just for the compiler. You know, and Donnet library. Yeah. So [00:08:11] Frank: yeah, it's one of those things, it's one of those low level, there's still a few low level things in il, in the intermediate language that are a hundred percent exposed in C. So it's almost like just kind of getting closer to the edge of what's possible with [00:08:25] James: the language. Makes sense. And here's another one for you. Do you know anything about interceptors? [00:08:34] Frank: No, but I, I could make guesses. Tell me more, James, [00:08:38] James: I dunno if you've heard of something called ahead of time compilation. Frank, a o t. [00:08:44] Frank: Uh, yeah, I, yeah. Hi. Hi, I'm Frank. A o t Krueger. This is what I do for a living. [00:08:52] James: Oh, so what if I told you that sometimes you write code. But it's maybe not opt, maybe it's not optimized for a o t compilation. What if when you compile the code, your code could be intercepted and then statically generated over what you wrote with more friendly a O T code? Here's an example, Frank. Imagine you're writing a red X and you said red X is match and you give it a Rod X. That's fine. Not really optimized for a o t. So an interceptor when enabled it will swap it out with a concept pattern that is intercepted and it'll use statically generated code that is then optimized and friendly for a o t. It'll do it behind the scenes for you. So basically they're swizz in your code, Frank, they're getting in there, they're swizz it up and they're making it all super duper nice. And they, they show like minimal APIs and dependency injection graphs and serialization. They're like, It's just gonna be better. We're just gonna fix it for you. [00:09:49] Frank: This is my very surprised face. Are you still talking about C# six or are you talking about C# 12 now? Uh, 12. We're back on 12 train. Okay. Because I'm like, this sounds very new to me. I have not heard of this. Okay. Crazy. Um, I am curious, is this a run time thing? Is it only an a o. It must only be an a o T when it does this. [00:10:13] James: I guess it's both. This one. It's both. This one, this one requires T .NET eight. You know how some of those C# features are compiler only and some of them are like the, you need both two in one. This one is a, uh, this is a two in one. [00:10:28] Frank: I am really curious what they're intercepting because that's in the blog. I, I will read the blog. Uh, we should do a whole episode because I am very curious what these interceptors [00:10:40] James: are. Maybe we can get someone on the pod about it. Mm-hmm. Maybe Cyrus. [00:10:46] Frank: I like these low level things too. I knew the Xamarin low level things much better than I know the .NET low level things, so I gotta catch up James. [00:10:57] James: Well, Frank, just like the interceptors are gonna intercept your code and make it a T friendly, what if I told you, Frank, that there are more platforms now that can be native, a td, and what if I told you one of those platforms? The only one that's been added is one. That we develop for every single day. Frank, and what if I told you it is your main platform and what if I told you it was iOS? [00:11:25] Frank: Wait, wait, what platform? [00:11:27] James: iOS for .NET. And what if I told you Frank aot, what if I told you that this native AOT compared to the mono A O t could .NET you a 40% reduction in your size on disc and your i P a size? [00:11:45] Frank: We'll see, that's what I'm gonna say. We'll see. Um, I love, I love my l VM compiler. Um, I know every time, uh, a Microsoft person posts how, how, how great their a o t is, I'm like, I don't know. I like my L V M, but, uh, hey, I'm willing to give it a shot. We'll see. We'll see. [00:12:07] James: Uh, so I wanna talk about a little bit about this because you know, this little blurb, and I'll put the links in the show notes to it, it seems like. You know, when you talk about, you know, it's been, I've been working at Microsoft now for seven and a half years since acquisition, and when people ask us like, well, what was that like? Right? And I said, when, you know, there's a lot of advantages to it, which is like the Don .NET team and the Zamarin team are now closer than ever. You can literally see in this feature the amount of people that are working on it, in just the issues that are there. Mm-hmm. Like half of the issues. Are in the Donnet runtime repo. Half of them are in the Zarin iOS one, some 'em in different places. And there are fixes that are happening in the runtime and inside of Zarin, uh, iOS and iOS for dot .NET to basically make this thing even better. And in correlation with not only the iOS team, but also the Donnet MAUI team because they gotta make other stuff more compatible too, which they document. They document the, here's the interesting part, this is a really cool blog cuz it talks about the current state, which is like, Just doing iOS? No, .NET MAUI, everything's gravy doing with .NET MAUI. Uh, well, we got, there's, here's this, and then we hot fix this other thing, and then here are these four issues and here's why X, Y, Z. And then like, like the worlds are combining into this magical thing. It's really kind of fun to see, like this is how things get more close together in a good way. But I wanted to talk a little bit about. Now this is gonna be a preview feature in Do .NET eight gonna be released in .NET nine from what I can read here at least. Okay. Um, so it's got some, a long way to go here, but, uh, overall it seems going. Now I want you to kind of walk me through here. The, the, what we had, like where, where did it start with? You know, mono, L o v m a o t, did it get any better? There was like an Android thing and then like, you know, now there's, then there was like the, the startup tracing stuff, and now we've got native A O T. We've talked about native A O T before, right? But like mm-hmm. What's the main differences and why does someone care about these things? [00:14:12] Frank: You just want me to recap 15 years of history real quick here. Okay. Um, yeah, yeah, yeah. Okay. Well let's start with, uh, I, I know the iOS side much better than I know the Android side, so I'm I'm gonna be iOS heavy surprise. Do it. Yeah. Uh, so a o t started out because, uh, you just can't run a jet on an iPhone, and so we had to run native code only. So we had to have a way to turn our beautiful intermediate language programs into native code, uh, blessing in disguise because our apps run really fast when they're turned into native code. So you can still write, write code in the manage runtime. A o t runs on the iPhone, turns it into native code. That's your a o t that was built on the mono. A o t which had existed before. It was something they had built. Um, it was around for way back in the day. Uh, we used to put our assemblies in this huge global repository and it was gross, the gac, and we don't do that anymore. So we don't talk about it anymore. Let's all forget it never happened. Whew. Throw it out the door. But, uh, the mono A was written to support that. Um, the mono a did have a few deficiencies though, especially around. Um, generics. Generics didn't work well in the early days, and so they beefed up the mono a t. We've talked about it in episode after episode, adding feature setting features to it. So over many years, the mono AOT got awesome, [00:15:45] James: but James, but you know, there was a problem with it. What's the problem with it? [00:15:51] Frank: We can make it faster. People like faster, they focused on small for a long time, like the big goal was get everyone's app size down, right? And so they accomplished that. I remember, I think the minimum we hit at some point was like three five megabytes for like the smallest UI kit, iOS app. You could find native code executing, but in a C# context, but it wasn't fast enough. We can make it faster. So then came a feature called, um, L L V M, uh a t where, uh, it still does the a o t pass, but instead of actually outputting the ARM code or X 86 code, it passes it on to the L L V M compiler. Which is a highly optimizing compiler. And so it would take, so everything became kind of two passes and it would go from c well, many passes, C# to il, il down to um, this a o t kind of intermediate form. Pass that onto to L L V M, it compiles it down to really good machine code. So then we got very small apps running very fast through the magic of that process. That's all on the mono side. Any questions, James, until we talk about the Microsoft side? [00:17:08] James: No, I'm good. I'm ready. [00:17:10] Frank: Okay. Microsoft side, Microsoft, like I said, had the gak, am I saying that right? I thought it was called the Gak, whatever the, yeah. Global Simply Something Collection. Um, so Microsoft has also had some, uh, ahead of time compilation stuff, but they, they never had the need to go. Ahead of time. And so that the system just wasn't designed for that. What it was designed to do is, um, execute some code, notice it executes, sometimes maybe write it to disc so it doesn't have to do that again. That's kind of how it was built. It wasn't built to take an entire assembly, an entire app and just turn it into native code. Just wasn't in the design. So at some point they decided, well, this native code thing is kind of nice. Uh, it'd be nice to just. Turn all our apps into that just for performance reasons. Yeah, makes sense. And I, I think this happened around, like, did they do this for Windows phone? I don't recall, but maybe definitely around the Windows UW P time and maybe a tiny bit before that, um, they started to work on their own, uh, a AOT technology that would do, do what I was saying before, take like an entire app and turn. They weren't going for a hundred percent, they were going for like 90%, 90% native code with the tiniest little hooks for gross things like p invokes and red Xes. You mentioned gross things where they'd, uh, just kinda get to work and, um, you know, it started out with. Some funny limitations. I think, you know, generics were a limitation of it in the early days also. Mm. Obviously surpassed lately. Um, and over the years that one has been built up also. And so what we have are these two technologies that really did start in two very different places. Evolved over two different timelines. And truly they are a big difference between the two run times, the mono runtime and the do runtime and the whole unification of all this .NET stuff. It, this is a huge step towards, uh, towards that unification because these are, uh, two big pieces that really don't talk to each other right now. And so it's nice to see them actually putting the [00:19:30] James: effort into merging them. Nice. There we go. Little, little history. I like it. Very cool. I think [00:19:40] Frank: that that was fun. I think I did, I I, I don't think I left anyone out. Please, please write in and, uh, send, send all the messages to James. [00:19:49] James: So one question I have for you is like, does this remove any of the. Bits of the tool chain that would be required? Or are you still basically, you know, I think one of the things with, with it I thought is like, wasn't some of them code, like you said, like kinda like run through the. The Xcode, L v m compiler and optimizer, like that's allows, has to happen for iOS. [00:20:11] Frank: Uh, it doesn't have to happen. You don't have to use L L V M because it's just a, there, it's just being used as an optimizer essentially. Gotcha. So if in your Xamarin projects it's always been a check box, Um, especially because it is an optimizer, it can change your code and potentially introduce bugs. So anyone who did use that option, and honestly, I don't know how many people did I did cause I love speed. Uh, it could introduce bugs and so you had to thoroughly test your apps with that option on, uh, Microsoft's uh, a o t is really good. Um, does it compete with lvm? I don't know. It's, it's really one of those tricky things where I'll just have to do side by side comparisons to find out. Um, it, it, it's neat like, uh, I guess this will be v one of them on iOS. So this is v one of them having the deal with the evil sandbox and not being able to run an Egypt code. Uh, but I'm excited because native A O T. Kind of works on Mac, but it, I don't think it's technically supported. Um, they kind of don't want you using it. Mm-hmm. So it's kind of neat that, um, if iOS gets it, then maybe we can bribe them into also making it work on Mac and that would be pretty hot also. So this is all good news from my point of view. [00:21:33] James: Nice. I like that. Yeah. I'm excited to see out where it goes and, you know, anytime that I can get my application reduced in size with a checkbox, it's a good day. [00:21:47] Frank: It's a good day. It's a good day. I, I want that speed too, though. You know? App size, speed. You know, we, we all have our constraints. Me, I want that floating point. Speed. You know what I'm hoping for? Uh, what's that? Remember all the, remember all the vector stuff? Do you remember I wrote a blog post about vector performance? Yes. Years and years ago. Mm-hmm. It's one of those funny little places where like, You know, between the run times, how do the run times diverge? The threading libraries diverge, the garbage collectors diverge. Um, another one is where Vector support. SIM support, like the processor support for these kinds of things. That was a neat thing. The L L V M compiler would give you to be like auto vectorizing. Whereas on the Microsoft side, there's just more sophisticated types like in system numerics vector, those things exist and the JIT and the a o t are aware of them and output good code for them. So it's funny, like um, on the mono side, you would not use the system numerics types cause they were a little bit slow. You do the other things and LLVM would make them fast. Whereas on the Microsoft side, you definitely should use system numeric vectors because they're very fast. And so the unification of all this, I hope I can finally just, you know, stop caring about all these stupid minor details and, uh, be happy that the system, numeric specs library will hopefully be merged also [00:23:19] James: with all this. That'd be cool. Yeah. Big, big things come in like down the road, you know what I mean? I know that's done at eight. We got done and nine done at 28 down the road. But each of these kind of years, there's like some fundamental shifts. So it's kind of interesting how this goes and how it improves overall. So. I'm excited. I'm excited overall and mm-hmm. Talking about evolving, there's been two big changes in the world of, uh, donnet development with, uh, a little, uh, code editor called VS. Code. I dunno if you heard of that little vs. Code visual Studio code. Uh, [00:23:52] Frank: I kind of live in it these days. I, I, I use it. Way too much. You know how people have like a hundred tabs open in their browsers? Mm-hmm. Have like a hundred vs code windows open. It's not, nothing [00:24:05] James: wrong with that. I always, nothing wrong. I got, you know, I got my, I got my, my VS code pinned right next to my Vs. Like they're, they're there and they're both active mostly throughout the entire day. Mm-hmm. Use 'em for different reuses, different purposes based on what I'm building. Uh, but. Last month there was the C# dev kit announcement, which was actually two announcements in one, which was one. The C# extension, which has been around forever, um, was basically written from the ground up with a new L S P A Language Server Protocol, uh, hosts support. To use Roslyn. Uh, and that uses, makes sure it's like more performant, extensible, flexible, more flexible and just makes things more stable and better basically. So think of it as the L s P system that Visual Studio uses is now what VS code is using, which is pretty awesome. And there's, so if you were just literally using it before, it just upgrades you get. A new one. Right? It's like, here it is. Right. That's pretty cool. And they, um, it's fully open source. Um, there's just basically the next version of, of Omnis Sharp. It's the evolution of Omnis sharpp into this thing. And then there's no changes in licensing. It's just, here it is. It's the same thing. M i t boom, boom, boom. Now the team said, well, we can think about how do we improve that even. More, right? How do we make C development even better, right? How do we make it things that are in Visual Studio or ides that would be common for C developers that aren't really. Vs. Code isms cuz vs. Code is folder based. How do we make that better? Well, they came up with the C# dev kit extension, which adds in solution explorer support. So you can see your projects and a solution. Who would've thunk? Um, which is really cool. And you can see like your dependencies. You can see your new package, you can see all this different stuff. They have a native test explorer. Um, in there. And they also have Intelli code for the C# dev kit, which is AI powered whole line completions, which is pretty cool. Now those two things are licensed under the Visual Studio subscription, including the community edition, right? Those are two closed source extensions that build on top of the C# extensions. So if you're saying, I don't wanna log in with anything which keep using the CS extension, it's fully open source. M mit, you're good to go. No licensing, you're boom, boom. If you're like, whoa, I want even more awesomeness. Let me get this awesomeness. We're good to go. Have you tried this new stuff? It's been a month since it's been out. Have you played around with the, the, the, the kits and the devs and the stuff? [00:26:32] Frank: I have to admit I installed it, but it never worked because I didn't activate it. I didn't log in. James. I wasn't being a good Microsoft customer and I wasn't authenticating because honestly, I get lost in popups in VS code sometimes it's a little true. It's a little popup heavy vs code. You're getting a little popup heavy. But I finally, I finally cracked down this week and I finally did log into everything, especially when we talk about what you're gonna talk about next. Um, I hope you're gonna talk about next, uh, I, I, I logged into my Microsoft, I logged into my GitHub and there was still one more thing it wanted me to log into that activate the C# extension. But once I did, yes, I had my solution explorer. Finally, a good solution explorer and, uh, it, it, you have to tell me, is this a part of it, but there's also a new gate. Gallery, uh, was that a part of the C# extension or is that just some other extension I might have installed or something? Because I wanna compliment the Newgate Gallery also. It was working [00:27:38] James: very well. That's a great question. Um, I think package management says, yeah, it has it in it, I think. [00:27:49] Frank: Yeah, it worked pretty well. Uh, whatever was providing that newa, so I, I definitely noticed the solution explorer cause it's totes there. Yeah, I, I was a little upset because the solution explorer had dependencies. I tried right cook and dependencies to add a package and there was nothing there. But fortunately there is the, um, gallery, just type it in and your projects show up there and you can just put a checkbox by whatever you want. Easy peasy. Um, I would say everything worked. It installed yet another .NET runtime on me because that's what it likes to do. It just, it, it likes to install that .NET runtime. I get it. Uh, it did complain about one of my workloads missing because workloads are the most annoying thing on the planet, but, uh, I just restarted vs code and everything worked so. I want to tell you about my favorite feature of it yet, but I'll, I'll, I'll let you take back [00:28:47] James: control for a moment. No, I think that's fairly accurate. I'm, I have to double check on the Newgate package thing. Maybe you saw some other one. I think it might be in there, maybe not. I want whoever, whoever did it, that's I guess who we want to give credit to right At the end of the day. Um, yeah, no, I think that there are, there are lots of popups in VS code and it's a little bit tricky to figure out X, Y, Z, uh, that's for sure. But yeah, I mean I've definitely been using it in some of my projects, been working fairly well, so, I mean, I don't know much else else to add. You're, you're crushing it, but you said you have a favorite feature. [00:29:19] Frank: Oh, uh, I have a favorite feature by very far, and it's very simple, but, um, look here, here's the deal, James. I. I can press F five and my app runs and it debug. It's been, yes, it's, it's been a little bit, a long time to be able to find way you have that feature, but it is wonderful. It is the most important thing ever. Um, I have tried the Hackiest versions of getting, uh, I was playing around with a Mac Catalyst thing. We have to announce that there's a MAUI thing, there's a MAUI vs code thing, uh, which enables. Debug, which thank goodness, because I, I tried the hackiest, uh, launch configurations, whatever they're called in vs code trying to trick the debugger into working. And I could never trick the debugger into working. And now I just press that five and it just works. And I'm just happy and I'm just happy to say that it's just my favorite feature cuz it's, it's just debugging, but I'm just happy it's there. [00:30:24] James: It's true. Now, I will say this, I was a little confused the very first time that I, uh, tried to debug a app because I'm used to, uh, let's say I create a asp .NET core like api. I'm used to, when I create that in Visual Studio, there's like a js o n file that has the configurations for the launch settings. And actually it's a little bit tricky because VS. Code doesn't use that. That's for Visual Studio. It actually. Has its own launch configuration. So you kinda have to figure out and play this little dance a little bit, I would say, to get kind of used to that. Um, but once you do and you figure that out, it, it does kind of walk you through it. And in fact, I think when you, you go to debug, it's like, do you wanna use the donnet cord debugger or do you wanna use the C# debugger? Like, why do you wanna configure it? But really what you wanna do is like just go into your like run and debug, create like the, the, the configuration file and then like have it work. That's what I've noticed at least. [00:31:22] Frank: See, I don't even like that now because, um, so everyone should go install the c. Extension and tool clip hangers and then go install the great new MAUI extension. Yes. And the MAUI extension adds yet another debugging target. So yeah, you're right. When you hit F five, it says something like, um, .NET cord debugger, C# debugger. I don't know what the. Quite differences. Um, but now a new debugger shows up called Debug MAUI app or something like that, and you just hit that one and everything just works, even without any configuration files or anything because. It knows everything, all that information's there. Of course it can debug the process, but, um, I have noticed one annoying thing is every time I hit F five, I have to keep choosing MAUI. I haven't figured out how to get it to like default to it. For that I might actually have to create a launch. Settings configuration thing, but I don't know how to tell that to use the MAUI debugger. But anyway, don't care because at least I have MAUI debugging at the [00:32:27] James: moment. Yeah, it's super cool. I, uh, have known about this for a while, but I couldn't have said anything about it, which is cool. And this is nice cuz the dominant .NET MAUI extension builds on top of this user. Dev kit. So it's all kind of this big ecosystem evolving around. Cause extensibility was one of the big things to kind of build in this ecosystem. And what I love about it is that, yeah, you get a lot of the core features in .NET MAUI plus the C dev kit. So you get the solution explorer, you get like a lot of the package management stuff, right? You get this nice stuff and then what's really nice is, yeah, you can easily select your target. There's like little dropdowns you can create new. Um, you know, solutions obviously open things up, just kind of work so you can have things side by side. In vsco, that was the problem before is like your back end, your front and all this stuff. And then additionally, um, you have all the profiles, which I think are nice. Um, but at the same time, what I think is really cool about the Donnet MAUI stuff is that it works not only on Windows, but it works on Mac and it also works on Linux for Android development, which is kind of cool too. It's all, that's pretty neat. Well, that's crazy. Yeah. Yeah. And it's kind of cool. Just, you know what I like about it is if you go into, you know, the Pallet Command pal in vs Co, you type in dot .NET, you type in C like just. There's so much stuff in there now, like I felt so lonely for so long, and now it's, there's so much awesome stuff kind of happening right there. [00:33:56] Frank: Yeah. Um, I haven't played with all the device stuff. Um, I've just been messing around on the Mac, but I, I've course had to play around with, can I actually select an iOS device and do that kind of stuff. Uh, I think there's, and there's a million options by the way. I hit the settings button by accident. Oops. And there were 8 billion settings. So there's a lot to look through there. Uh, but I, uh, I'm excited for this. Um, I think VS. Code is a very nice i d e to use, uh, especially at handling multiple. Projects, especially at handling folders full of multiple projects in different languages, which is kind of my shtick. I do a lot of that and yeah, it, it handles it sometimes gracefully, sometimes not, but it mostly handles it and so it's nice that I can. Fully edit because let, let's be real, I was all tabbing between um vs for Mac and VS code a lot of times because I would wanna take advantage of different features. I think it's search and replace are fantastic. Um, yeah, and so now it's just kind of nice. I can hang out there a little bit more. Thanks. [00:35:08] James: Yeah, it's cool. It's all, it's all there and yeah, it's, it's, it's pretty rad. I, I think it's a good, you know, first start, you know, I think like it's in technically preview, like I actually think all these things are in preview, so, you know, it's kind of nice to see it evolve and you know, and see where it's kind of be going and mixing all these things together into one nice space and you know, again, whether you're using VS or vs. Matic or VS code, you're on Linux, wherever you're at, like. You know, do you get to use your tools and what you want? So to me, this is a nice option. Like there's a lot missing and still kind of coming that Maddie put in her blog post, which I'll link in the show notes. But it's a good, you know, first step in my opinion, just doing, I, I like, I can do file new project and like NVS code, which is the thing I've never been able to do. And I can say Gimme a .NET MAUI project and like creates one for me. Like, I don't know. That's pretty cool. I'm just saying, I [00:35:56] Frank: don't know. And they baked in a few templates. I noticed also, so like if you hit the add button next to a project, yes. There's like a good five to 10 ish little templates there for random little things. All sorts of little code file thingies. [00:36:11] James: Yeah, I did. I did sort of forget that. It's like, yeah, add new file and it's like, oh, here's a class, here's a struct, here's an medium, whatever. So I could see them building that out even more. Yeah. Which would be pretty nice. [00:36:22] Frank: I think there's still some big features from VS for Mac that prevent me from being a hundred percent in VS code. Um, mostly property editors that aren't CS pro editors cause who's got, who's got time for a CS pro. Um, but that's true. Lots of little details like that, but oof, you add debugging to this thing. And just going back to that, that's pretty, that's pretty game changer [00:36:48] James: there. Yeah, it's pretty nice. Yeah. And I like it, like, you know, you just open it up and you got little things, you got little deployment things like bing boom, boom, bao. Yeah. That's pretty neat. So, yeah, that's it. That's all I got, Frank. That's all I [00:37:04] Frank: got. That's all, that's all I wanted to talk. I just wanted to talk about debugging my apps and vs code today. So we, we covered way more than that, but I, I'm, I'm glad I got my chance to just, uh, sing some praises here. And say hashtag fine. Way. [00:37:19] James: Good. Good. Well, if you've tried any the new stuff, let us know. Write us into the podcast. Merge Conflict out fm. There's a contact button. You can just up on Twitter or anywhere on the internet really. Uh, James Montemagno app, pro Clam on the Twitters. I'm on the threads at James Montemagno. Are you on the threads? Franker the threads. Avoiding it so far. Ready? So good. Yeah, I'm not really on the threads. I'm barely checking it. I don't know, like my Instagram was private, so when I moved to Threads, it's like I don't have anyone there cuz my, I only have like 12 followers on Instagram cuz it's private, right? So to me it wasn't good. You know, I think I talked to handsome, he's like, well I got, I got like a billion people. It's like, oh yeah, cuz you're Scott and you, you're probably at a public Instagram and like blah, blah, blah. So I think it's a good move, but for me it didn't, it wasn't helpful that I didn't build a. Presence on the Instagram, but that's okay. Social [00:38:08] Frank: nets. Social nets seem to be better when they're social and large, you know? Yeah. [00:38:14] James: Too bad. I've been trying to stay off all the things recently, so maybe the best way to do it is just to email us. Maybe we'll just get more active in Discord. I don't know too many things, too many open boxes, but one place we are active, Frank is our Patreon, where you can get exclusive behind the scenes access to Merge, conflict Merge or Patreon. Dot com slash emerge conflict fm. It's in the show notes. We put out a bonus podcast almost every single week, um, including video bonus stuff too. And we read all the comments. You can join our 55 plus growing member list of Patreon subscribers all the way for. $2 a month up to as much as you want. That money goes directly into the hosting fees. And, uh, Frank and I split that money, uh, whenever I remember to pay him, um, from the fund. [00:39:07] Frank: He's an okay boss. Yeah, he pays me sometimes. [00:39:11] James: Yeah, I do what I can, um, but i's gonna do it for this week's merge conflict. So until next time and next week, I'm James Martha Magno. [00:39:19] Frank: And I'm Frank Krueger. Thanks for watching [00:39:21] James: and listening. Peace.