The Wire · Showcase
F# INTERPOLATED STRINGS GO NATIVEAOT, ORLEANS HARDENS SECURITY
By RepoJournal · Filed · About .NET
F# ships String.Concat optimization for interpolated strings that cuts reflection overhead and unlocks NativeAOT compatibility, while Orleans enforces type allow-lists to close a deserialization vulnerability.
The F# team landed a major performance win for interpolated strings by switching to String.Concat where possible, eliminating reflection and making code trimmable for NativeAOT targets [1]. This ships alongside record spreads, a language feature that lets you build new records by spreading existing ones: `{ ...r1; ...r2; E = 5 }` [2]. Over in Orleans, a breaking change enforces type allow-lists in the default JSON storage serializer to block unsafe deserialization attacks [3], paired with nullable reference type rollout across the codebase [4]. The reminders subsystem saw optimization work that defers loading distant schedules until they enter a configurable window, cutting unnecessary work [5]. On the platform side, .NET Android now applies `runtimeconfig.dev.json` files to CoreCLR debug builds, enabling Hot Reload feature switches [6], and MAUI automated inter-branch forward merges to keep release branches in sync [7]. Orleans also landed a three-silo rolling upgrade test with sustained traffic to verify distributed directory handoff works end-to-end [8].
One email a day. Unsubscribe in one click.
Keep up with .NET in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Review Orleans serialization changes if you store grain state in JSON - the type allow-list is breaking dotnet/orleans [immediate]
- → Test F# interpolated string codegen in your NativeAOT deployments once this ships dotnet/fsharp [plan]
- → Monitor Orleans rolling upgrade tests in your cluster staging environment dotnet/orleans [monitor]
References
- [1] Implement interpolated strings via String.Concat ↗ dotnet/fsharp
- [2] Record spreads: `{ ...expr }`, `{ ...ty }` ↗ dotnet/fsharp
- [3] fix(serialization)!: enforce type allow-list in default JSON storage serializer (#10268) dotnet/orleans
- [4] refactor: enable nullable reference types across Orleans (#10291) dotnet/orleans
- [5] perf(reminders): drop reminders that are not due soon (#10259) dotnet/orleans
- [6] Apply `*.runtimeconfig.dev.json` to CoreCLR apps ↗ dotnet/android
- [7] Auto-merge clean inter-branch forward merges ↗ dotnet/maui
- [8] fix(directory): support rolling upgrades to distributed directory (#10309) dotnet/orleans