Skip to content

v12.0.0

Compare
Choose a tag to compare
@colgreen colgreen released this 14 Mar 15:06
  • Target framework upgraded from netcoreapp3.1 to net5.0; this allows use of some new API surface in net5 which improves performance in places.

  • The redzen assembly is no longer strong named, as this is no longer necessary or helpful within a dotnet core runtime environment.

  • The following classes, interfaces, and methods have been 'spanified':

    • TimSort{T}, TimSort{K,V}, TimSort{K,V,W}
    • IntroSort{K,V,W}
    • SortUtils
    • NumericsUtils
    • Base64EncodingOutputStream
    • ISampler, IStatelessSampler
    • MemoryBlockStream
    • NonClosingStreamWrapper.
  • TimSort: Replaced BinarySort() method with a simple InsertionSort() method that performs much better.

  • IntroSort{K,V,W} performance tweaks.

  • Added MathSpan.Min(), Max() for double, float, and Int32.

  • Added MathSpan.SumOfSquares() for double, float values.

  • Added MathSpan Int32 overloads.

  • EnumerableUtils.RangeRandomOrder() now gets a temp array from ArrayPool (to reduce memory allocs and garbage collection).

  • Added DiscreteDistribution.SingleOutcome singleton field.

  • FileByteArray now uses smaller buffer size.

  • DefaultRandomSeedSource: Sealed the class. Use stackalloc for obaining crypto random bytes. Integer arithmetic using bitshifts (performance tweak).

  • Rename: NumericsUtils.ProbabilisticRound() to StochasticRound().

  • Rename: CalculateMedian() to Median(), and moved from NumericsUtils to MathSpan.

  • Rename: DoubleCircularBufferWithStats to CircularBufferWithStats.

  • Fix: MathUtils.Log2Ceiling(uint) gave incorrect results when the high bit was set.

  • MathUtils.IsPowerOfTwo() implementions changed to use BitOperations.PopCount() instead of arithmetic trick (performance tweak).

  • IRandomSource.NextBytes(Span{byte}) implementations reimplemented to use modern faster techniques for populating 8 bytes at a time (approx. 7% performance boost)

  • SpanUtils.Equals{T}() renamed to Equal{T}().

  • Multiple other small fixes and improvements; see repository git history for full details.