.NET 11’s JIT ships real codegen wins: guarded devirtualization, wider escape analysis, a smaller delegate layout, and sharper bounds-check elimination.
All of them are conditional on shapes the JIT can prove, not blanket speedups; here is what changed, why, and how to check whether your hot path qualifies.
Closed hierarchies let the compiler prove a switch over a class tree is exhaustive, no discard arm required. Genuinely useful for internal domain models, and something to think through carefully before using it in a public library API, where adding a subtype breaks every consumer’s build.
C# 15 preview ships union types with real compiler-checked exhaustiveness, no more hand-rolled
sealed hierarchies for a Result type. The catch: it is a union of pre-existing types, not
F#-style discriminated cases, and value-type cases box unless you write non-boxing boilerplate
yourself. The quieter sibling feature, closed hierarchies, may be the safer bet for enterprise
teams right now.
NetEvolve.Analyzer enforces null-check idioms and file organization on other people’s code, but had never run against its own. Fixing that surfaced 39 warnings, a silent Visual Studio MEF failure, and a follow-up NE0008 bug where DateOnly and TimeOnly got flagged blind to which target framework actually has them, the same multi-targeting blindness in a different corner of the codebase.
The EU Cyber Resilience Act’s headline deadline is December 2027, but the
reporting clock starts more than a year earlier. Article 14 vulnerability
reporting applies from September 2026. Here is the engineering map I built
for my own NuGet release pipeline: what the CRA regulates, the 24/72-hour
cadence, SBOM tooling for .NET, and where the open-source carve-out holds.