Top all-time · #1529
Matt Warren
Personal blog · mattwarren.orgprogrammingsystems
Matt Warren writes Performance is a Feature!, a personal blog at mattwarren.org about programming and systems. Since 2014, 49 different Hacker News readers have linked it 222 times, most often “CoreRT – A .NET Runtime for AOT”. The last post was in 2020, but the archive is still widely read.
Most-linked posts?
- CoreRT – A .NET Runtime for AOT5 people · 5 mentions · first linked 2018-06-07
- How generics were added to .NET4 people · 4 mentions · first linked 2018-03-02
- Stop the .NET GC Running with TryStartNoGCRegion()3 people · 5 mentions · first linked 2016-08-16
- A Look at the Internals of 'Tiered JIT Compilation' in .NET Core3 people · 3 mentions · first linked 2017-12-16
- Is C# a low-level language?3 people · 3 mentions · first linked 2019-03-01
- Research papers in the .NET source3 people · 3 mentions · first linked 2016-12-12
- /2018/03/02/How-generics-were-added-to-.NET/2 people · 4 mentions · first linked 2020-01-29
- Why Exceptions should be Exceptional2 people · 3 mentions · first linked 2016-12-20
- Exceptions should be Exceptional (2016)2 people · 3 mentions · first linked 2016-12-20
- The .NET IL Interpreter2 people · 3 mentions · first linked 2017-03-31
What Hacker News says?
On .NET Core's focus, that's not actually true: http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a-method-... Android optimizes for battery life, but it's also worth noting that Dalvik was a really rudimentary JIT, having no benefits from JIT compilation, only drawbacks, the ART with AOT being a good upgrade. But tiered compilation is in a different league, being about speculating what's going to happen depending…
Comment linking /2017/12/15/How-does-.NET-JIT-a-method-and-Tiered-Compilation/
on “Firefox’s new streaming and tiering compiler”Submitted Adding a new Bytecode instruction to the .NET runtime as a story · 287 points
HN discussionIt looks like the number of threads in the threadpool is fixed. If have 1 one thread in the thread pool, is it possible to dead lock it by queuing a Task A the blocks waiting for Task B to do something, where A starts executing before B? Do you think it would make sense to dynamically adjust the number of threads in the pool? An example of a thread pool that dynamically adjusts the number of threads is .NET. The alg…
Comment linking /2017/04/13/The-CLR-Thread-Pool-Thread-Injection-Algorithm/
on “Making the Tokio scheduler 10x faster”Submitted Exploring the .NET Core Runtime as a story · 251 points
HN discussionC# is not faster than Rust - but you can get near Rust performance with all the safety and memory management goodness. On benchmark C# is giving go run for its money! But again, it is easy to get carried away by benchmarks. Go-routines are a killer feature, .Net async/await come with gotchas. The weird space of .Net/.net is because the first 15 or so years - it was hostage to Windows. There by tainting its mind-shar…
Comment linking /2019/03/01/Is-CSharp-a-low-level-language/
on “.NET Myths Dispelled”Submitted Guide to the CoreCLR Source Code as a story · 229 points
HN discussionI tried to figure some actual numbers related to this, see http://mattwarren.org/2017/12/19/Open-Source-.Net-3-years-la... for a write-up
Comment linking /2017/12/19/Open-Source-.Net-3-years-later
on “Bing.com now runs on .NET Core”Submitted How generics were added to .NET as a story · 225 points
HN discussion.NET also has the TryStartNoGCRegion API, which allows you too prevent all GC collections (for a certain while). See http://mattwarren.org/2016/08/16/Preventing-dotNET-Garbage-C... for the full details
Comment linking /2016/08/16/Preventing-dotNET-Garbage-Collections-with-the-TryStartNoGCRegion-API/
on “Sub-millisecond GC pauses in Go 1.8”Submitted Open Source .NET three years later as a story · 216 points
HN discussionInteresting enough .NET doesn't use the "memory access" trick, instead is uses either a direct poll against a variable, or for user code can sometimes just rudely abort the running thread (if it knows it's safe to do). See http://mattwarren.org/2016/08/08/GC-Pauses-and-Safe-Points/ for all the gory details
Comment linking /2016/08/08/GC-Pauses-and-Safe-Points/
on “Sub-millisecond GC pauses in Go 1.8”Submitted Tools for Exploring .NET Internals as a story · 180 points
HN discussionI agree that generics should probably be a strong consideration right from the beginning. I disagree that this would mean that it would necessarily be done correctly or that it's impossible to add it later. That was the case with .Net and C#, it wasn't until the 2.0 release that generics were added. [0] [0]: http://mattwarren.org/2018/03/02/How-generics-were-added-to-...
Comment linking /2018/03/02/How-generics-were-added-to-.NET/
on “The Java type system is broken”Submitted Research papers in the .NET source as a story · 180 points
HN discussionAny obvious reasons currently; or just historic ones? i.e. its been fully open source for 4 years https://mattwarren.org/2018/12/04/Open-Source-.Net-4-years-l... and is under the .NET Foundation rather than Microsoft https://dotnetfoundation.org/
Comment linking /2018/12/04/Open-Source-.Net-4-years-later
on “Memory usage of a toy C# server and client with 500K concurrent connections on”Submitted A History of .NET Runtimes as a story · 176 points
HN discussion> I wonder if the author considered writing a book.. Now there's an idea :-) BTW I've been bugging/asking the author of the SSCLI book if he has any plans to update it, see http://mattwarren.org/2017/05/19/Adding-a-new-Bytecode-Instr...
Comment linking /2017/05/19/Adding-a-new-Bytecode-Instruction-to-the-CLR/
on “Adding a new Bytecode instruction to the .NET runtime”Submitted How the .NET Runtime Loads a Type as a story · 170 points
HN discussionExcellent post. The blog [0] is an incredible boon for anyone interested in CLR internals. I wonder if the author considered writing a book, kind of modern Shared Source CLI Essentials (that I read years ago and hold in high regard)? [0]: http://mattwarren.org/
Comment linking /
on “Adding a new Bytecode instruction to the .NET runtime”Submitted Is C# a low-level language? as a story · 167 points
HN discussion>Does F# offers native builds ? I thought it was CLR only. i would guess that it will eventually support aot: https://mattwarren.org/2018/06/07/CoreRT-.NET-Runtime-for-AO...
Comment linking /2018/06/07/CoreRT-.NET-Runtime-for-AOT/
on “Nim vs. Crystal”Submitted CoreRT – A .NET Runtime for AOT as a story · 166 points
HN discussionSo where should I look? It doesn't seem to be a particularly popular or well-documented topic. The best I've found is this [1]. [1] https://mattwarren.org/2018/06/07/CoreRT-.NET-Runtime-for-AO...
Comment linking /2018/06/07/CoreRT-.NET-Runtime-for-AOT/
on “Why you should learn F#”Submitted Open Source .NET – 2 years later as a story · 158 points
HN discussion> I also love that people are doing write ups about the source of .NET Core and it's internals. Me too! BTW, if you want more on the same topic check out http://mattwarren.org/2018/07/12/Presentations-and-Talks-cov... and http://mattwarren.org/2018/01/22/Resources-for-Learning-abou...
Comment linking /2018/01/22/Resources-for-Learning-about-.NET-Internals/
on “Exploring the .NET Core Runtime”Submitted Visualising the .NET Garbage Collector as a story · 148 points
HN discussionWhy the hate on C#? Are you perhaps thinking of languages like Ruby and Python and grouping them into the same bucket as C#? This[0] shows an example of C# vs C++ having a 10% performance gap on ray tracing. There is also no reason that extremely performance sensitive parts couldn’t be rewritten in Rust or C or C++ and called from C# over a FFI. [0]: https://mattwarren.org/2019/03/01/Is-CSharp-a-low-level-lang...
Comment linking /2019/03/01/Is-CSharp-a-low-level-language/
on “Emulating Nintendo Switch Games on Linux”Submitted DotNetAnywhere: An Alternative .NET Runtime as a story · 147 points
HN discussionThere's a few challenges with doing something like this. - arrays (which most collections use under the covers) will need to allocate `elements*size_of_struct`. Unless the structs are the same size, you'd have to do some level of thunking/offsetting. - Even if they are the same size, when you're iterating the list, how would the runtime know whether it's `A`, `B`, or `C`? Structs don't have header information that c…
Comment linking /2017/08/02/A-look-at-the-internals-of-boxing-in-the-CLR/
on “A curated list of .NET performance resources”Submitted Why is .NET reflection slow? as a story · 144 points
HN discussion