Summary
Drop netstandard2.0 from the main library's target frameworks, retaining only net8.0;net9.0;net10.0.
Previous NuGet releases will remain available for consumers on .NET Framework or older .NET Core runtimes.
Motivation
- net8.0 is the current LTS floor. .NET 6 and 7 are already end-of-life. net8.0 as the lowest target is standard practice.
- Performance. This is an instrumentation library where performance matters. The netstandard2.0 code path uses a slower, lookup-table-based
LeadingZeroCount instead of the hardware intrinsic (BitOperations.LeadingZeroCount).
- Simplification. Removing netstandard2.0 eliminates conditional compilation and dead code paths.
- Legacy users are covered. Previously published NuGet packages remain available for anyone who needs netstandard2.0 support.
Scope of changes
HdrHistogram.csproj — Remove netstandard2.0 from <TargetFrameworks>, remove the netstandard2.0 PropertyGroup condition.
Utilities/Bitwise.cs — Remove #if NET5_0_OR_GREATER guards and the entire Bitwise.Imperative class. Use BitOperations.LeadingZeroCount unconditionally.
HistogramLogReader.cs — Remove #if NETSTANDARD2_0 block (line ~243), keep the modern StartsWith(char) overload.
spec/tech-standards/build-system.md — Update target framework documentation.
Acceptance criteria
Summary
Drop
netstandard2.0from the main library's target frameworks, retaining onlynet8.0;net9.0;net10.0.Previous NuGet releases will remain available for consumers on .NET Framework or older .NET Core runtimes.
Motivation
LeadingZeroCountinstead of the hardware intrinsic (BitOperations.LeadingZeroCount).Scope of changes
HdrHistogram.csproj— Removenetstandard2.0from<TargetFrameworks>, remove the netstandard2.0PropertyGroupcondition.Utilities/Bitwise.cs— Remove#if NET5_0_OR_GREATERguards and the entireBitwise.Imperativeclass. UseBitOperations.LeadingZeroCountunconditionally.HistogramLogReader.cs— Remove#if NETSTANDARD2_0block (line ~243), keep the modernStartsWith(char)overload.spec/tech-standards/build-system.md— Update target framework documentation.Acceptance criteria
net10.0;net9.0;net8.0only#if NETSTANDARDor#if NET5_0_OR_GREATERconditional compilation remainsBitwise.Imperativeclass is removed