these blog posts have really turned me into a dotnet evangelist. love the framework & language.
By rsalus 22 minutes ago
Runtime async is certainly an interesting development. Really excited to see how this plays out.
By adzm a day ago
Saw a noticeable startup time boost on a recent project migration. Always appreciate the continued focus on speed.
By d_finch an hour ago
Dumb Q: should a non-systems-language dev know/read assembly?
; Arm64
--- .NET 10
+++ .NET 11
@@ -13,8 +13,6 @@
ble G_M000_IG04
G_M000_IG03:
- cmp w1, w2
- bhs G_M000_IG05
str wzr, [x0, w1, UXTW #2]
G_M000_IG04:
@@ -25,4 +23,4 @@
bl CORINFO_HELP_RNGCHKFAIL
brk #0
-; Total bytes of code 68
+; Total bytes of code 60
I know C#/F# decently well, but is there any reason to actually pull out the ol textbooks and learn wtf the above is saying?
By AlexErrant 2 hours ago
You don’t need to, but if you ever want to really optimise some code, understanding what it turns into on the target CPU really helps. Especially if you know the implications for any particular instruction (cost of memory access, potential branch prediction misses, etc)
The three* letter mnemonics are usually pretty easy to decode, even if you don’t know the architecture: anything beginning with ‘B’ will be branch, so ‘ble’ is branch if less than or equal. L and S based mnemonics are unusually Load and Store from and to memory. After that it’s understanding the stack and registers and you’re pretty much good to go.
Everything in assembly is loading something from memory into registers doing something basic with those registers, like add/divide/etc and then putting the result back into memory or using the result to make a decision to jump to processing instructions from another place in memory.
Most devs won’t ever need to know this stuff, but as someone who grew up with computers that could barely do anything without grinding to a halt (8bit computer, 2mhz processor, 32kb of RAM, 20kb of which is for the screen), knowing this stuff was essential; however I still find this stuff useful today, even with my C# work.
I am a bit of a performance tuning nerd though, so…
[*] or more
By louthy 2 hours ago
No. If you're a low-level C language programmer then it is useful.
By flowerlad 2 hours ago
Not really, you only need to know you can get at it. One day you might be doing something like processing images or video and you are finding it slow and getting down to this level can be helpful. But it wouldn't necessarily be the first thing you'd look at.
By keithnz an hour ago
Very thorough write up. Clearly a lot of performance improvements across their stack. As if it wasn't detailed/long enough already, I would have loved to see some application-level benchmarks that gave a hint of the cumulative performance gains we should expect.
By pseudosavant an hour ago
Spinal Tap's "put it up to 11". My laptop (Kubuntu) has volume controls that allow me to override 100% and take it to 150%.
I can wind it up to 15! \||/ (is there an official ASCII art four finger devil's horns)
By gerdesj 3 hours ago
\m/
By parineum 2 hours ago
I stared at my keyboard for bloody ages and came up with || instead of m.
nob end!
By gerdesj 2 hours ago
Always appreciate the continued perf gains. Our existing services just get faster for free, which is a nice win.
By Sorrel47 an hour ago
Impressive technical work and authorship. My quibble, which seems significant in context, is what happened with AoT?
By mlhpdx 2 hours ago
AoT is still a thing. Presumably a lot of the JIT improvements would also improve the generation of AoT-compiled code.
By CurtHagenlocher 2 hours ago
I hope that’s the case but I’d feel a lot better to see it in print.
By mlhpdx 2 hours ago
do you mean NativeAoT? it's mentioned a few times in the post
By rsalus 21 minutes ago
Ah the traditional browser stress test from the .NET team. :)
Joke aside, yet another interesting read of all little improvements that go across all the runtime, and very much appreciated that they put out the effort to go through this detail level.
By pjmlp a day ago
Thanks Stephen for this, it is very rewarding to read something very technical that is not AI slop these days.
By equasar a day ago
C#/.NET are very well-represented in LLM data - from enterprise back-end code to games. A language to use for sure.
By dude250711 2 hours ago
Flip side: LLMs have to be very explicitly told to code in "modern" .NET and C# due to lack of representation in the training set.
Case in point: extension members from C# 14 is one that LLMs commonly stumble on and requires an explicit example. It still sometimes says that this is not valid syntax.
extension(SomeType instance)
{
public OtherType DoSomething() { ... }
}
Agents really struggle on this one for some reason.
Even older releases have a few that I notice LLMs making mistakes on like use of `System.Threading.Lock` over `Object` when locking.
By CharlieDigital 2 hours ago
With Claude I never had that problem. However Claude does not use the pattern by default
By merb 34 minutes ago
Buildings games in Unity feels like magic with frontier reasoning models.
Assuming you are competent with scene work and the various art pipelines, the rest of the problem is significantly easier now.
I've been using the Unity CLI to run arbitrary C# code against Unity 6 scenes without requiring domain reloads. It uses Roslyn to compile the snippet in a special Unity editor component instead of running the normal compilation pipeline.
The implications for a reasoning model are significant. Domain reloads in my projects can take 10-20 seconds. Compound across 5-10 tool calls and the difference adds up very quickly.
By bob1029 an hour ago
> The sections that follow are full of real improvements. A bounds check removed, an allocation that no longer happens,
Annoyingly the.net blog seems to have started to use LLMs to write their copy. Using "real" twice in one paragraph - do LLMs do that? Lots of commas is a tell for me.
> This is a long one. It’s meant to be. Grab your hot beverage of choice, settle in, and let’s turn it up.
Ugh.
By kristianp 3 hours ago
These comments about potential LLM usage are so boring. Stephen is doing this kind of blog post since 6+ years. They all look the same. Read it! It’s very good. Performance deep dives with this kind of quality are rare.
By pestkranker 3 hours ago
Ok, fair enough. I may have over compensated for this one. I found the Spinal Tap, "this one goes to 11 stuff" so irritating that I might have not thought it through. It's such a tired joke by now. I did enjoy his Frozen reference last year.
By kristianp an hour ago
Not too sure here. I use quite a few commas, too.
I suspect it was done old school: Written by Stephen and passed to a LLM to fill in all those links and other garnish and then passed back for final polish by Stephen. That's how I do my write ups (but generally without the LLM bit for shorter efforts).
This is a long write up, and I'm sure it will have been assisted, but in the right way, and not a sloppy way.
I've dropped several commas before conjunctions, soz!
By gerdesj 3 hours ago
FWIW the .NET 10 release also had 2 occurrences of "real" in literally the first paragraph.
I, too, tire of the constant YOU WROTE THIS WITH LLMs outrage. An incredible engineer dumped an ENORMOUS amount of technical knowledge at your feet, and you're commenting on the smell? Is that all you have to contribute?
I saw this too on the Ryan Carniato/SolidJS 2.0 announcement post. A world-class engineer makes a great blog post, and all the comments can focus on are the LLM-smells. Oh well. Any reason not to learn, I guess.
By AlexErrant 2 hours ago
For some people LLM-spotting feels like a sport they need to compete in
By tester756 2 hours ago
Backing you up on this. I smelled LLM and hit cmd+w.
By rsalus 22 minutes ago
By adzm a day ago
By d_finch an hour ago
By AlexErrant 2 hours ago
By louthy 2 hours ago
By flowerlad 2 hours ago
By keithnz an hour ago
By pseudosavant an hour ago
By gerdesj 3 hours ago
By parineum 2 hours ago
By gerdesj 2 hours ago
By Sorrel47 an hour ago
By mlhpdx 2 hours ago
By CurtHagenlocher 2 hours ago
By mlhpdx 2 hours ago
By rsalus 21 minutes ago
By pjmlp a day ago
By equasar a day ago
By dude250711 2 hours ago
By CharlieDigital 2 hours ago
By merb 34 minutes ago
By bob1029 an hour ago
By kristianp 3 hours ago
By pestkranker 3 hours ago
By kristianp an hour ago
By gerdesj 3 hours ago
By AlexErrant 2 hours ago
By tester756 2 hours ago
By sltr 29 minutes ago
By wolttam 2 hours ago
By y1n0 2 hours ago