Skip to content

Latest commit

 

History

History
2578 lines (1950 loc) · 161 KB

CHANGELOG.md

File metadata and controls

2578 lines (1950 loc) · 161 KB

Release Notes

10-16-2023

DotNext.Threading 5.15.0

  • Added support of synchronous lock acquisition to AsyncExclusiveLock, AsyncReaderWriterLock, AsyncManualResetEvent, AsyncAutoResetEvent so the users can easily migrate step-by-step from monitors and other synchronization primitives to async-friendly primitives
  • Fixed random InvalidOperationException caused by RandomAccessCache<TKey, TValue>
  • Added synchronous methods to RandomAccessCache<TKey, TValue> to support 251 feature request

10-13-2024

DotNext 5.14.0

  • Added helpers to DelegateHelpers class to convert delegates with synchronous signature to their asynchronous counterparts
  • Added support of async enumerator to SingletonList<T>
  • Fixed exception propagation in DynamicTaskAwaitable
  • Added support of ConfigureAwaitOptions to DynamicTaskAwaitable

DotNext.Metaprogramming 5.14.0

  • Updated dependencies

DotNext.Unsafe 5.14.0

  • Updated dependencies

DotNext.Threading 5.14.0

  • Updated dependencies

DotNext.IO 5.14.0

  • Updated dependencies

DotNext.Net.Cluster 5.14.0

  • Fixed graceful shutdown of Raft TCP listener
  • Updated vulnerable dependencies

DotNext.AspNetCore.Cluster 5.14.0

  • Updated vulnerable dependencies

08-30-2024

DotNext 5.13.0

  • Improved interoperability of DotNext.Runtime.ValueReference<T> and DotNext.Runtime.ReadOnlyValueReference<T> with .NEXT ecosystem
  • Fixed 249
  • Improved codegen quality for ad-hoc enumerator types

DotNext.Metaprogramming 5.13.0

  • Updated dependencies

DotNext.Unsafe 5.13.0

  • Updated dependencies

DotNext.Threading 5.13.0

  • Redesigned AsyncEventHub to improve overall performance and reduce memory allocation
  • Improved codegen quality for ad-hoc enumerator types

DotNext.IO 5.13.0

  • Improved codegen quality for ad-hoc enumerator types

DotNext.Net.Cluster 5.13.0

  • Updated dependencies

DotNext.AspNetCore.Cluster 5.13.0

  • Updated dependencies

DotNext.MaintenanceServices 0.4.0

08-19-2024

DotNext 5.12.1

  • Added support of static field references to DotNext.Runtime.ValueReference<T> data type

DotNext.Threading 5.12.1

  • Smallish performance improvements of RandomAccessCache<TKey, TValue> class

08-13-2024

DotNext 5.12.0

  • Added DotNext.Runtime.ValueReference<T> data type that allows to obtain async-friendly managed pointer to the field
  • Deprecation of ConcurrentCache<TKey, TValue> in favor of RandomAccessCache<TKey, TValue>

DotNext.Metaprogramming 5.12.0

  • Updated dependencies

DotNext.Unsafe 5.12.0

  • Updated dependencies

DotNext.Threading 5.12.0

  • Introduced async-friendly RandomAccessCache<TKey, TValue> as a replacement for deprecated ConcurrentCache<TKey, TValue>. It uses SIEVE eviction algorithm.

DotNext.IO 5.12.0

  • Updated dependencies

DotNext.Net.Cluster 5.12.0

  • Fixed cancellation of PersistentState async methods

DotNext.AspNetCore.Cluster 5.12.0

  • Fixed cancellation of PersistentState async methods

08-01-2024

DotNext 5.11.0

  • Added DotNext.Threading.Epoch for epoch-based reclamation
  • Fixed one-shot FNV1a hashing method
  • Fixed 248
  • Minor performance improvements

DotNext.Metaprogramming 5.11.0

  • Minor performance improvements
  • Updated dependencies

DotNext.Unsafe 5.11.0

  • Minor performance improvements
  • Updated dependencies

DotNext.Threading 5.11.0

  • Fixed AsyncSharedLock.Downgrade behavior, so it can be used to release a weak lock
  • Updated dependencies

DotNext.IO 5.11.0

  • Minor performance improvements
  • Updated dependencies

DotNext.Net.Cluster 5.11.0

  • Updated dependencies

DotNext.AspNetCore.Cluster 5.11.0

  • Updated dependencies

07-15-2024

DotNext 5.8.0

  • Added FirstOrNone and LastOrNone extension methods back from .NEXT 4.x as requested in 247

DotNext.Threading 5.10.0

  • Added TaskQueue<T> class
  • Added Completion optional property to TaskCompletionPipe<T> that allows to synchronize on full completion of the pipe
  • Added one-shot static methods to TaskCompletionPipe to take IAsyncEnumerable<T> over tasks as they complete

07-09-2024

DotNext.IO 5.7.1

  • Improved performance of FileWriter in some corner cases

DotNext.Net.Cluster 5.7.3

DotNext.AspNetCore.Cluster 5.7.3

07-01-2024

DotNext.Threading 5.9.0

  • Added WaitAnyAsync overload method to wait on a group of cancellation tokens that supports interruption

DotNext.Net.Cluster 5.7.2

DotNext.AspNetCore.Cluster 5.7.2

06-26-2024

DotNext.Net.Cluster 5.7.1

  • Improved reliability of disk I/O for the new WAL binary format

DotNext.AspNetCore.Cluster 5.7.1

  • Improved reliability of disk I/O for the new WAL binary format

06-25-2024

DotNext.Threading 5.8.0

  • Introduced WaitAnyAsync method to wait on a group of cancellation tokens
  • Added cancellation support for WaitAsync extension method for WaitHandle class

06-20-2024

DotNext 5.7.0

  • Timestamp.ElapsedTicks returns a value that is always greater than zero
  • Fixed hidden copies of value types caused by in modifier
  • Added support of TimeProvider to Timestamp and Timeout types

DotNext.Metaprogramming 5.7.0

  • Updated dependencies

DotNext.Unsafe 5.7.0

  • Updated dependencies

DotNext.Threading 5.7.0

  • Fixed 241
  • Introduced API for implementing leases, see DotNext.Threading.Leases namespace

DotNext.IO 5.7.0

  • Various performance improvements

DotNext.Net.Cluster 5.7.0

DotNext.AspNetCore.Cluster 5.7.0

06-07-2024

DotNext.Metaprogramming 5.5.0

05-30-2024

DotNext.Metaprogramming 5.4.1

  • Smallish performance improvements for all synchronization primitives

DotNext.Net.Cluster 5.6.0

  • Added support of custom data to be passed to PersistentState.ApplyAsync method through WAL processing pipeline

DotNext.AspNetCore.Cluster 5.6.0

  • Updated dependencies

05-21-2024

DotNext.Metaprogramming 5.4.0

  • Smallish performance improvements of IndexPool instance methods
  • Added ability to instantiate empty IndexPool

05-15-2024

DotNext.Metaprogramming 5.3.1

  • Fixed 234
  • Updated dependencies

05-10-2024

DotNext.Net.Cluster 5.5.1

  • Fixed behavior of IRaftCluster.ConsensusToken when a node is in standby mode

DotNext.AspNetCore.Cluster 5.5.1

  • Updated dependencies

05-05-2024

DotNext.Threading 5.3.1

  • Fixed race condition caused by LinkedCancellationTokenSource.CancellationOrigin property that leads to incorrectly returned cancellation token

DotNext.Net.Cluster 5.5.0

  • Introduced IRaftCluster.WaitForLeadershipAsync method that waits for the local node to be elected as a leader of the cluster
  • Fixed 233
  • Fixed correctness of appending no-op entry by a leader used as a write barrier

DotNext.AspNetCore.Cluster 5.5.0

  • Updated dependencies

04-20-2024

DotNext.IO 5.4.0

  • Added FileWriter.WrittenBuffer property

DotNext.Net.Cluster 5.4.0

  • Changed binary file format for WAL for more efficient I/O. A new format is incompatible with all previous versions. To enable legacy format, set PersistentState.Options.UseLegacyBinaryFormat property to true
  • Introduced a new experimental binary format for WAL based on sparse files. Can be enabled with PersistentState.Options.MaxLogEntrySize property

DotNext.AspNetCore.Cluster 5.4.0

  • Updated dependencies

03-20-2024

DotNext 5.3.1

  • Provided support of thread-local storage for StreamSource.AsSharedStream
  • Remove type cast for Func.Constant static method

03-19-2024

DotNext 5.3.0

  • Added StreamSource.AsSharedStream extension method that allows to obtain read-only stream over memory block which position is local for each consuming async flow or thread. In other words, the stream can be shared between async flows for independent reads.

DotNext.Metaprogramming 5.3.0

  • Updated dependencies

DotNext.Unsafe 5.3.0

  • Updated dependencies

DotNext.Threading 5.3.0

  • Improved performance of IndexPool.Take method

DotNext.IO 5.3.0

  • Updated dependencies

DotNext.Net.Cluster 5.3.0

  • Smallish performance improvements of WAL

DotNext.AspNetCore.Cluster 5.3.0

  • Smallish performance improvements of WAL

03-08-2024

DotNext 5.2.0

  • Added Number.IsPrime static method that allows to check whether the specified number is a prime number
  • Fixed AOT compatibility issues

DotNext.Metaprogramming 5.2.0

  • Updated dependencies

DotNext.Unsafe 5.2.0

  • Updated dependencies

DotNext.Threading 5.2.0

  • Added specialized IndexPool data type that can be useful for implementing fast object pools

DotNext.IO 5.2.0

  • Updated dependencies

DotNext.Net.Cluster 5.2.0

DotNext.AspNetCore.Cluster 5.2.0

02-28-2024

DotNext 5.1.0

  • Added Span.Advance<T> extension method for spans
  • CollectionType.GetItemType now correctly recognizes enumerable pattern even if target type doesn't implement IEnumerable<T>

DotNext.Metaprogramming 5.1.0

  • Updated dependencies

DotNext.Unsafe 5.1.0

  • Added UnmanagedMemory.AsMemory static method that allows to wrap unmanaged pointer into Memory<T>

DotNext.Threading 5.1.0

  • Updated dependencies

DotNext.IO 5.1.0

DotNext.Net.Cluster 5.1.0

  • Updated dependencies

DotNext.AspNetCore.Cluster 5.1.0

  • Updated dependencies

02-25-2024

DotNext 5.0.3

  • Fixed behavior to no-op when GCLatencyModeScope is initialized to default

DotNext.Metaprogramming 5.0.3

  • Updated dependencies

DotNext.Unsafe 5.0.3

  • Updated dependencies

DotNext.Threading 5.0.3

  • Updated dependencies

DotNext.IO 5.0.3

  • Updated dependencies

DotNext.Net.Cluster 5.0.3

  • Attempt to fix 221

DotNext.AspNetCore.Cluster 5.0.3

  • Attempt to fix 221

02-17-2024

DotNext 5.0.2

  • Fixed XML docs

DotNext.Metaprogramming 5.0.2

DotNext.Unsafe 5.0.2

  • Updated dependencies

DotNext.Threading 5.0.2

  • Added correct validation for maximum possible timeout for all WaitAsync methods

DotNext.IO 5.0.2

  • Updated dependencies

DotNext.Net.Cluster 5.0.2

  • Prevent indexing of WAL files on Windows

DotNext.AspNetCore.Cluster 5.0.2

  • Updated dependencies

01-23-2024

DotNext 5.0.1

  • Smallish performance improvements of dynamic buffers

DotNext.Metaprogramming 5.0.1

  • Updated dependencies

DotNext.Unsafe 5.0.1

  • Updated dependencies

DotNext.Threading 5.0.1

  • Updated dependencies

DotNext.IO 5.0.1

  • Improved performance of FileWriter and FileBufferingWriter classes by utilizing Scatter/Gather IO
  • Reduced memory allocations required by async methods of FileWriter and FileBufferingWriter classes
  • Updated dependencies

DotNext.Net.Cluster 5.0.1

  • Improved IO performance of Persistent WAL due to related improvements in DotNext.IO library
  • Updated dependencies

DotNext.AspNetCore.Cluster 5.0.1

  • Updated dependencies

01-14-2024

.NEXT 5.0.0 has been released! The primary goal of the new release is migration to .NET 8 to fully utilize its features such as Generic Math and static abstract interface members. 5.x is not fully backward compatible with 4.x because of breaking changes in the API. Most of changes done in DotNext, DotNext.IO, and DotNext.Unsafe libraries. UDP transport for Raft is completely removed in favor of existing TCP implementation. There is a plan to implement multiplexed TCP connection and Raft sharding. New features:

  • Numeric ranges for LINQ. Thanks to Generic Math
  • Little-endian and big-endian readers/writer for various buffer types. Again thanks to Generic Math
  • UTF-8 formatting support for various buffer types

DotNext.Reflection library is deprecated and no longer maintained.

11-19-2023

DotNext.Net.Cluster 4.15.3

  • SustainedLowLatency GC mode is now applied for heartbeats round initiated by heartbeat timeout. A round forced by replication programmatically doesn't set this mode that allows GC to be more intrusive. This trade-off provides better balance between memory consumption and replication time
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.15.3

  • Updated dependencies

11-16-2023

DotNext 4.15.2

DotNext.Threading 4.15.2

  • Fixed 205
  • AsyncCountdownEvent.Reset now throws PendingTaskInterruptedException on every caller suspended by WaitAsync

DotNext.Net.Cluster 4.15.2

  • Raft performance: reduced memory allocation caused by heartbeat round
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.15.2

  • Updated dependencies

11-13-2023

DotNext 4.15.1

  • Merged PR 203

DotNext.Net.Cluster 4.15.0

  • Raft performance: improved throughput of IRaftCluster.ReplicateAsync method when cluster minority is not accessible (faulty node). Now the leader waits for replication from majority of nodes instead of all nodes
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.15.0

  • Updated dependencies

11-08-2023

DotNext.Net.Cluster 4.14.5

  • Fixed leader lease renewal
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.14.5

  • Updated dependencies

10-29-2023

DotNext.Net.Cluster 4.14.4

  • Clarified exception type when AddMemberAsync or RemoveMemberAsync is called on Follower node
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.14.4

  • Updated dependencies

10-25-2023

DotNext 4.15.0

  • Optimized performance of PooledArrayBufferWriter<T> and PooledBufferWriter<T> classes as a result of discussion in 192
  • Added Span.Swap and Span.Move extension methods
  • Updated dependencies

09-27-2023

DotNext.IO 4.15.0

  • Added fast UTF-8 decoding for streams and pipes
  • Updated dependencies

DotNext.Net.Cluster 4.14.3

  • Deprecation of partitioning configuration property
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.14.3

  • Updated dependencies

08-25-2023

DotNext.Threading 4.14.2

  • Removed redundant memory barrier from async locks and reduced size of wait nodes
  • Updated dependencies

DotNext.Net.Cluster 4.14.2

  • Updated dependencies

DotNext.AspNetCore.Cluster 4.14.2

  • Updated dependencies

08-23-2023

DotNext.Metaprogramming 4.15.0

  • Fixed broken compatibility introduced in C# 10 at language level. See 189 discussion. The change provides backward compatibility at source code level, but it's binary compatible. This means that all you need is to rebuild your project without any code changes
  • Updated dependencies

DotNext.Threading 4.14.1

  • Optimized AsyncEventHub and Scheduler performance
  • Fixed regression: reuse CancellationTokenSource used for timeout tracking by all async locks

DotNext.Net.Cluster 4.14.1

  • Updated dependencies

DotNext.AspNetCore.Cluster 4.14.1

  • Updated dependencies

08-16-2023

DotNext 4.14.0

  • Added implicit conversion from BoxedValue<T> to ValueType
  • SpawningAsyncTaskMethodBuilder reuses the same .NET internals as AsyncTaskMethodBuilder
  • Added non-generic TypeMap and ConcurrentTypeMap implementations acting as a set in contrast to existing generic counterparts
  • Introduced Optional<T>.ValueOrDefault property which is linked with existing HasValue property be means of nullability analysis
  • Updated dependencies

DotNext.Metaprogramming 4.14.0

  • Fixed 187
  • Updated dependencies

DotNext.Unsafe 4.14.0

  • Updated dependencies

DotNext.Threading 4.14.0

  • Fixed scheduling of continuation if it is represented by async state machine
  • Updated dependencies

DotNext.IO 4.14.0

  • Fixed abstract representation of Write-Ahead Log
  • Updated dependencies

DotNext.Net.Cluster 4.14.0

  • Fixed 185
  • Fixed 186
  • Reduced memory allocations by Raft leader
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.14.0

  • Fixed 185
  • Updated dependencies

08-02-2023

DotNext 4.13.1

  • Removed memory allocation inside of Sequence.AddAll extension method
  • Smallish performance improvements of SingletonList value type

DotNext.Metaprogramming 4.13.1

  • Updated dependencies

DotNext.Unsafe 4.13.1

  • Updated dependencies

DotNext.Threading 4.13.1

  • Updated dependencies

DotNext.IO 4.13.1

  • Updated dependencies

DotNext.Net.Cluster 4.13.1

  • Fixed 184
  • Reduced memory allocation when reading single log entry from WAL
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.13.1

  • Fixed 184
  • Updated dependencies

07-13-2023

DotNext 4.13.0

  • Added of AlignOf intrinsic method that allows to obtain alignment requirements for the specified type
  • ConcurrentCache recognizes types with atomic write semantics more precisely that allows to avoid memory allocations for certain generic arguments
  • Introduced TrimLength overloaded extension method for Span<T> data type that allows to retrieve the trimmed part of the span

DotNext.Metaprogramming 4.13.0

  • Updated dependencies

DotNext.Unsafe 4.13.0

  • Pointer<T>.IsAligned property is unmarked as obsolete because it is possible to determine memory alignment correctly
  • Updated dependencies

DotNext.Threading 4.13.0

  • Fixed 183
  • Updated dependencies

DotNext.IO 4.13.0

  • Updated dependencies

DotNext.Net.Cluster 4.13.0

  • Fixed cancellation of some async methods exposed by Raft implementation and WAL
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.13.0

  • Updated dependencies

07-02-2023

DotNext.Net.Cluster 4.12.5

DotNext.AspNetCore.Cluster 4.12.5

06-19-2023

DotNext 4.12.4

  • Fixed: sometimes ConcurrentCache.TakeSnapshot method may return evicted key/value pairs

DotNext.Metaprogramming 4.12.4

  • Updated dependencies

DotNext.Unsafe 4.12.4

  • Updated dependencies

DotNext.Threading 4.12.4

  • Deprecation of AsyncLock.TryAcquireAsync(CancellationToken) overload
  • Updated dependencies

DotNext.IO 4.12.4

  • Updated dependencies

DotNext.Net.Cluster 4.12.4

  • Perf: avoid Pre-Vote phase in case of concurrency between inbound Vote request and transition to Candidate state
  • Optimized memory consumption by RaftCluster implementation
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.12.4

  • Updated dependencies

06-08-2023

DotNext 4.12.3

  • Fixed concurrency between add and update operations of ConcurrentCache class

DotNext.Metaprogramming 4.12.3

  • Updated dependencies

DotNext.Unsafe 4.12.3

  • Updated dependencies

DotNext.Threading 4.12.3

  • Updated dependencies

DotNext.IO 4.12.3

  • Updated dependencies

DotNext.Net.Cluster 4.12.3

  • Fixed 173
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.12.3

  • Updated dependencies

DotNext.MaintenanceServices 0.2.0

  • Make probe timeout optional
  • Updated dependencies

06-07-2023

DotNext 4.12.2

DotNext.Net.Cluster 4.12.2

  • Fixed 165
  • Merged 170
  • Fixed 168
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.12.2

  • Updated dependencies

05-29-2023

DotNext 4.12.1

  • Fixed 162
  • Fixed other race conditions in ConcurrentCache
  • Improved performance of BitVector methods

03-22-2023

DotNext 4.12.0

  • Performance improvements of interpolated string handlers

DotNext.Metaprogramming 4.12.0

  • Updated dependencies

DotNext.Unsafe 4.12.0

  • Updated dependencies

DotNext.Threading 4.12.0

  • Reduced complexity of QueuedSynchronizer class internals
  • Fixed rare concurrency issues when multiple consumers trying to get task result from ValueTaskCompletionSource
  • Reduced number of work items submitted by async locks internally
  • Provided ManualResetCompletionSource.Cleanup protected virtual method for custom cleanup operations
  • Heavily reduced monitor lock contention that can be caused by ValueTaskCompletionSource or ValueTaskCompletionSource<T>
  • Updated dependencies

DotNext.IO 4.12.0

  • Performance improvements of interpolated string handlers
  • Updated dependencies

DotNext.Net.Cluster 4.12.0

  • Fixed initialization logic of PhiAccrualFailureDetector
  • Partially fixed 153. Optionally, the node which initial state cannot be recognized by failure detector (e.g., node never responds) is treated as dead
  • Fixed 155

DotNext.AspNetCore.Cluster 4.12.0

  • Fixed initialization logic of PhiAccrualFailureDetector
  • Partially fixed 153. Optionally, the node which initial state cannot be recognized by failure detector (e.g., node never responds) is treated as dead
  • Fixed 155

03-07-2023

DotNext 4.11.0

DotNext.Metaprogramming 4.11.0

  • Updated dependencies

DotNext.Unsafe 4.11.0

  • Added methods to Pointer<T> data type for unaligned memory access

DotNext.Threading 4.11.0

  • Added special methods to AsyncTrigger class to implement asynchronous spin-wait
  • AsyncTrigger<T> is deprecated in favor of QueuedSynchronizer<T>
  • Introduced QueuedSynchronizer<T> class that provides low-level infrastructure for writing custom synchronization primitives
  • Adoption of System.Diagnostics.Metrics instruments to provide compatibility with OpenTelemetry

DotNext.IO 4.11.0

  • Optimized memory allocations caused by FileBufferingWriter class
  • Added DotNext.Text.Json.JsonSerializable<T> wrapper acting as a bridge between binary DTO and JSON serialization infrastructure from .NET BCL
  • Adoption of System.Diagnostics.Metrics instruments to provide compatibility with OpenTelemetry
  • Reduced API surface requiring RequiresPreviewFeatures attribute

DotNext.Net.Cluster 4.11.0

  • Adoption of System.Diagnostics.Metrics instruments to provide compatibility with OpenTelemetry
  • Fixed 151
  • Fixed 153
  • Raft: reduced memory allocations when the node is Leader
  • Raft: fixed correctness of ForceReplication method when it is used as a write barrier in a distributed environment
  • Reduced API surface requiring RequiresPreviewFeatures attribute

DotNext.AspNetCore.Cluster 4.11.0

02-02-2023

Starting from the current release, DotNext.Reflection library is no longer published on regular basis. See this post for more information.

DotNext 4.10.0

  • Added API discussed and proposed in 143. The requested features are implemented as DotNext.Buffers.Binary.BinaryTransformations class.

DotNext.Metaprogramming 4.10.0

  • Updated dependencies

DotNext.Unsafe 4.10.0

  • Updated dependencies

DotNext.Threading 4.10.0

  • Updated dependencies

DotNext.IO 4.10.0

  • Optimized memory allocations caused by FileBufferingWriter class
  • Updated dependencies

DotNext.Net.Cluster 4.10.0

  • Fixed 146
  • Fixed 147
  • Reduced memory allocations caused by the implementation of the leader lease
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.10.0

  • Fixed 146
  • Updated dependencies

01-16-2023

DotNext 4.9.0

  • Introduced SpawningAsyncTaskMethodBuilder that can be used in combination with AsyncMethodBuilderAttribute to force execution of async method in parallel with the current flow
  • Updated dependencies

DotNext.Metaprogramming 4.9.0

  • Updated dependencies

DotNext.Reflection 4.9.0

  • Updated dependencies

DotNext.Unsafe 4.9.0

  • Updated dependencies

DotNext.Threading 4.9.0

  • Smallish performance improvements of async locks
  • Fixed upgrade lock acquisition using AsyncLock value type
  • Updated dependencies

DotNext.IO 4.9.0

  • Use ValueTask caching for hot execution paths
  • Updated dependencies

DotNext.Net.Cluster 4.9.0

  • Reduced memory allocation caused by WAL and TCP/UDP transports
  • Reduced managed heap fragmentation
  • Added support of DNS and Unix Domain Socket addresses of cluster nodes for better compatibility with containers
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.9.0

  • HTTP transport: optimized memory allocations
  • Updated dependencies

12-23-2022

DotNext.Threading 4.8.3

  • Smallish performance improvements of async locks
  • Updated dependencies

DotNext.Net.Cluster 4.8.3

  • TCP/UDP Raft transport: optimized memory allocations
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.8.3

  • HTTP transport: optimized memory allocations
  • Updated dependencies

12-19-2022

DotNext.Threading 4.8.2

  • Optimized memory allocations produced by instances of TaskCompletionPipe<T> class
  • Updated dependencies

DotNext.IO 4.8.2

  • Reduced memory allocations caused by instances of FileReader and FileWriter classes
  • Updated dependencies

DotNext.Net.Cluster 4.8.2

  • Optimized memory allocations produced by persistent WAL and Raft algorithm implementation
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.8.2

  • Updated dependencies

12-15-2022

DotNext 4.8.1

  • Improved quality and performance of random string generator exposed as RandomExtensions.NextString extension methods (138)
  • Updated dependencies

DotNext.Metaprogramming 4.8.1

  • Updated dependencies

DotNext.Reflection 4.8.1

  • Updated dependencies

DotNext.Unsafe 4.8.1

  • Updated dependencies

DotNext.Threading 4.8.1

  • Fixed critical bug 136 that prevents reentrant reads from persistent channel
  • Updated dependencies

DotNext.IO 4.8.1

  • Updated dependencies

DotNext.Net.Cluster 4.8.1

  • Fixed 139
  • Fixed calculation of Phi performed by Phi Accrual Failure Detector. The bug leads to false positive detection
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.8.1

  • Updated dependencies

12-06-2022

DotNext 4.8.0

  • Added scoped keyword to necessary buffer types and extension methods for better compatibility with C# 11
  • Added Builder Pattern concept as an interface
  • Added extra properties to Timestamp value type for precise measurements
  • Introduced additional methods for reading data from sparse buffer with help of SequencePosition cursor
  • Updated dependencies

DotNext.Metaprogramming 4.8.0

  • Updated dependencies

DotNext.Reflection 4.8.0

  • Updated dependencies

DotNext.Unsafe 4.8.0

  • Updated dependencies

DotNext.Threading 4.8.0

  • TaskCompletionPipe<T> doesn't require capacity anymore
  • Fix: potential consumer hangs when a number consumers is larger than number of pending tasks
  • Updated dependencies

DotNext.IO 4.8.0

  • Updated dependencies

DotNext.Net.Cluster 4.8.0

  • Added automatic removal of unresponsive nodes from Raft cluster using Failure Detector
  • Added implementation of Phi Accrual Failure Detector
  • Added ability to turn cluster node into Standby mode and back to normal mode (see discussion)
  • Raft functional extensions are grouped as a set of interfaces located in a new DotNext.Net.Cluster.Consensus.Raft.Extensions namespace
  • Fixed cluster recovery when cold start mode is used (135)
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.8.0

  • Added automatic removal of unresponsive nodes from Raft cluster using Failure Detector registered in DI
  • Raft functional extensions are available for query through DI as interfaces
  • Updated dependencies

11-08-2022

DotNext.Metaprogramming 4.7.5

10-30-2022

DotNext 4.7.4

  • Fixed 126
  • Updated dependencies

DotNext.Metaprogramming 4.7.4

  • Updated dependencies

DotNext.Reflection 4.7.4

  • Updated dependencies

DotNext.Unsafe 4.7.4

  • Removed redundant type cast in Pointer<T> value type
  • Updated dependencies

DotNext.Threading 4.7.4

  • Scheduler.DelayedTaskCanceledException is added to identify graceful cancellation of the scheduled task (when it was canceled without entering the callback)
  • Updated dependencies

DotNext.IO 4.7.4

  • Updated dependencies

DotNext.Net.Cluster 4.7.4

  • Smallish performance improvements when processing command queue in HyParView implementation
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.7.4

  • Updated dependencies

10-22-2022

DotNext 4.7.3

DotNext.Metaprogramming 4.7.3

  • Updated dependencies

DotNext.Reflection 4.7.3

  • Updated dependencies

DotNext.Unsafe 4.7.3

  • Removed redundant type cast in Pointer<T> value type
  • Updated dependencies

DotNext.Threading 4.7.3

  • Fixed parameter name when throwing ArgumentNullException in AsyncLazy<T> constructor
  • Updated dependencies

DotNext.IO 4.7.3

  • Updated dependencies

DotNext.Net.Cluster 4.7.3

  • Updated dependencies

DotNext.AspNetCore.Cluster 4.7.3

  • Updated dependencies

09-19-2022

DotNext 4.7.2

  • Critical bug fixes for ConcurrentCache<TKey, TValue> class: incorrect behavior of LFU policy (wrong sorting order)

DotNext.Metaprogramming 4.7.2

  • Updated dependencies

DotNext.Reflection 4.7.2

  • Updated dependencies

DotNext.Unsafe 4.7.2

  • Updated dependencies

DotNext.Threading 4.7.2

  • Reduced memory allocation caused by several async lock types
  • Updated dependencies

DotNext.IO 4.7.2

  • Updated dependencies

DotNext.Net.Cluster 4.7.2

  • Updated dependencies

DotNext.AspNetCore.Cluster 4.7.2

  • Updated dependencies

08-24-2022

DotNext 4.7.1

  • Fixed source-level compatibility issues with Roslyn compiler shipped with .NET 6.0.8 (SDK 6.0.400) due to backward incompatible changes in it
  • Updated dependencies

DotNext.Metaprogramming 4.7.1

  • Updated dependencies

DotNext.Reflection 4.7.1

  • Updated dependencies

DotNext.Unsafe 4.7.1

  • Completed first phase of migration of Pointer<T> and related data types to nint and nuint data types
  • Updated dependencies

DotNext.Threading 4.7.1

  • Updated dependencies

DotNext.IO 4.7.1

  • Fixed source-level compatibility issues with Roslyn compiler shipped with .NET 6.0.8 (SDK 6.0.400) due to backward incompatible changes in it
  • Updated dependencies

DotNext.Net.Cluster 4.7.1

  • Updated dependencies

DotNext.AspNetCore.Cluster 4.7.1

  • Updated dependencies

08-08-2022

Mac OS is added as a target OS for running tests to track compatibility with this operating system.

DotNext 4.7.0

  • Fixed memory alignment issues
  • Added TaskType.GetIsCompletedGetter method that allows to obtain Task.IsCompleted property in the form of closed delegate
  • Significantly improved performance of HEX conversion methods with SSSE3 hardware intrinsics
  • Introduced DotNext.Buffers.Text.Hex class with static methods for efficient conversion to/from hexadecimal representation of binary data with UTF-16 and UTF-8 support
  • Introduced NextChars extension methods that allows to fill buffer with random characters

DotNext.Metaprogramming 4.7.0

  • Updated dependencies

DotNext.Reflection 4.7.0

  • Updated dependencies

DotNext.Unsafe 4.7.0

  • Updated dependencies

DotNext.Threading 4.7.0

  • Reduced memory allocation caused by extension methods declared in Scheduler class
  • Reduced monitor lock contention in async locks
  • Added lock stealing methods to some synchronization primitives: AsyncExclusiveLock, AsyncReaderWriterLock
  • Introduced GetConsumer extension method for TaskCompletionPipe<Task<T>> class that allows to consume task results asynchronously
  • Updated dependencies

DotNext.IO 4.7.0

  • Removed defensive copies of structs
  • Updated dependencies

DotNext.Net.Cluster 4.7.0

  • Removed defensive copies of structs
  • Adaptation of Microsoft.AspNetCore.Connections library allows to completely split network transport implementation details from Raft-specific stuff. Now you can implement custom network transport and other network-related concerns much more easier
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.7.0

  • Removed defensive copies of structs
  • Introduced RaftClusterHttpHost that provides a way to host multiple Raft clusters in the same process. This feature can be used for implementation of sharding
  • Cluster node identification now relies on UriEndPoint class instead of HttpEndPoint. This allows to use more flexible traffic routing strategies between cluster nodes
  • Updated dependencies

07-04-2022

DotNext 4.6.1

  • Fixed memory alignment issues

DotNext.Metaprogramming 4.6.1

  • Updated dependencies

DotNext.Reflection 4.6.1

  • Updated dependencies

DotNext.Unsafe 4.6.1

  • Updated dependencies

DotNext.Threading 4.6.1

  • Fixed task pooling of some asynchronous methods
  • Updated dependencies

DotNext.IO 4.6.1

  • Fixed task pooling of some asynchronous methods
  • Updated dependencies

DotNext.Net.Cluster 4.6.1

  • Fixed task pooling of some asynchronous methods
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.6.1

  • Updated dependencies

DotNext.MaintenanceServices

  • First version of library providing Application Maintenance Inteface via Unix Domain Socket and command-line shell for app administrators
  • Added support for probes when running app in Kubernetes

06-12-2022

DotNext 4.6.0

  • Added CharComparer class that allows to compare single characters in the same way as StringComparer comparing strings
  • Minor performance improvements of static methods declared in Span class
  • Added stack manipulation methods to BufferWriterSlim<T> value type
  • Introduced Timeout.Expired static property that allows to obtain expired timeout
  • Added LastOrNone extension methods for various collection types
  • Deprecated DotNext.Runtime.CompilerServices.Shared<T> value type
  • Added a new powerful API for receiving asynchronous notifications from GC (see DotNext.Runtime.GCNotification class)

DotNext.Metaprogramming 4.6.0

  • Updated dependencies

DotNext.Reflection 4.6.0

  • Updated dependencies

DotNext.Unsafe 4.6.0

  • Small performance improvements of unmanaged memory allocator
  • Updated dependencies

DotNext.Threading 4.6.0

  • Fixed incorrect array bounds check in AsyncEventHub class
  • Optimized completion callback scheduling for all types of asynchronous locks
  • Linked token created using LinkedTokenSourceFactory.LinkTo extension method now allows to track the originally canceled token
  • Added DotNext.Threading.Scheduler static class that allows to delay execution of asynchronous tasks
  • Updated dependencies

DotNext.IO 4.6.0

  • Minor performance improvements of FileReader data type
  • Reduced memory allocation caused by asynchronous string decoding methods
  • Added IAsyncBinaryReader.TryGetRemainingBytesCount method that allows to preallocate buffers
  • Updated dependencies

DotNext.Net.Cluster 4.6.0

  • Optimized read barrier
  • Fixed cancellation token propagation in public instance methods declared in IRaftCluster interface
  • Introduced a simple framework for rumor spreading for peer-to-peer applications based on Lamport timestamps: DotNext.Net.Cluster.Messaging.Gossip.RumorTimestamp and DotNext.Net.Cluster.Messaging.Gossip.RumorSpreadingManager classes. Also you can check out modified example of P2P application based on HyParView protocol in src/examples folder
  • Added compatibility of DotNext.Net.Cluster.Messaging.JsonMessage<T> class with JSON Source Generator
  • Introduced DotNext.Net.Cluster.Messaging.IOutputChannel.SendMessageAsync overload that directly supports data types implementing DotNext.Runtime.Serialization.ISerializable<T> interface
  • Raft vote and pre-vote requests will be rejected if the requester is not a known cluster member (applicable for all transports: HTTP, UDP, TCP)
  • Fixed race conditions between Raft state transitions
  • Added ILeaderLease.Token property that allows to control linearizable asynchronous reads on the leader node

DotNext.AspNetCore.Cluster 4.6.0

  • Added explicit implementation of newly introduced DotNext.Net.Cluster.Messaging.IOutputChannel.SendMessageAsync overload
  • Updated dependencies

05-12-2022

DotNext 4.5.0

  • Added Base64Encoder.MaxCharsToFlush constant for convenient allocation of the buffer to be passed to Base64Encoder.Flush method
  • Added static methods to Base64Encoder and Base64Decoder types that allow to convert large data asynchronously with low memory consumption
  • Added DotNext.Runtime.CompilerServices.Scope type that allows to attach callbacks to the lexical scope

DotNext.Metaprogramming 4.5.0

  • Updated dependencies

DotNext.Reflection 4.5.0

  • Updated dependencies

DotNext.Unsafe 4.5.0

  • Small performance improvements of unmanaged memory allocator
  • Updated dependencies

DotNext.Threading 4.5.0

  • Updated dependencies

DotNext.IO 4.5.0

DotNext.Net.Cluster 4.5.0

  • Attempt to modify cluster membership concurrently now leads to exception
  • Added ICluster.WaitForLeaderAsync method for convenience
  • Fixed 108

DotNext.AspNetCore.Cluster 4.5.0

  • Updated dependencies

04-23-2022

DotNext 4.4.1

  • Added memory threshold option to SoftReferenceOptions

DotNext.Metaprogramming 4.4.1

  • Updated dependencies

DotNext.Reflection 4.4.1

  • Updated dependencies

DotNext.Unsafe 4.4.1

  • Updated dependencies

DotNext.Threading 4.4.1

  • Fixed issue that ignores the value of PersistentChannelOptions.BufferSize property
  • Fixed critical bug in PersistentChannel that leads to incorrect position of the reader within the file with stored messages
  • Updated dependencies

DotNext.IO 4.4.1

  • Updated dependencies

DotNext.Net.Cluster 4.4.1

  • Improved logging in case of critical faults during Raft state transitions
  • Fixed 105

DotNext.AspNetCore.Cluster 4.4.1

  • Updated dependencies

03-30-2022

DotNext 4.4.0

  • Added efficient way to concate multiple strings and represent the result as a rented buffer. See Span.Concat method.
  • String concatenation support is added to BufferWriterSlim<char> as well
  • Added DotNext.Text.InterpolatedString class with factory methods to create interpolated strings using rented memory

DotNext.Metaprogramming 4.4.0

DotNext.Reflection 4.4.0

DotNext.Unsafe 4.4.0

  • Updated dependencies

DotNext.Threading 4.4.0

DotNext.IO 4.4.0

  • Added extension methods that allow to write interpolated strings efficiently to TextWriter

DotNext.Net.Cluster 4.4.0

  • Fixed exception type for cancellation of replication
  • Fixed incorrect behavior when IRaftCluster.LeaderChanged fired but IRaftCluster.LeadershipToken indicates that leader is not yet elected
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.4.0

  • Updated dependencies

02-28-2022

DotNext 4.3.0

  • Introduced DotNext.Runtime.Caching.ConcurrentCache<TKey, TValue> class with LRU/LFU cache eviction policies
  • Improved performance of atomic operations based on CAS (Compare-And-Swap)
  • Fixed behavior of optimistic read lock in ReaderWriterSpinLock class

DotNext.Metaprogramming 4.3.0

  • Updated dependencies

DotNext.Reflection 4.3.0

  • Updated dependencies

DotNext.Unsafe 4.3.0

  • Updated dependencies

DotNext.Threading 4.3.0

DotNext.IO 4.3.0

  • Added flushToDisk option to FileBufferingWriter.Flush and FileBufferingWriter.FlushAsync methods
  • Updated dependencies

DotNext.Net.Cluster 4.3.0

  • Improved startup time of persistent WAL
  • Default value of PersistentState.Options.WriteMode is changed to AutoFlush
  • Fixed transfer of custom cancellation token passed to RaftCluster.ReplicateAsync method
  • Updated dependencies

DotNext.AspNetCore.Cluster 4.3.0

  • Fixed 103
  • Updated dependencies

02-07-2022

Many thanks to Copenhagen Atomics for supporting this release.

DotNext 4.2.0

  • Improved scalability of mechanism that allows to attach custom data to arbitrary objects using UserDataStorage and UserDataSlot<T> types. The improvement works better in high workloads without the risk of lock contention but requires a bit more CPU cycles to obtain the data attached to the object
  • Added ability to enumerate values stored in TypeMap<T> or ConcurrentTypeMap<T>
  • Improved debugging experience of UserDataStorage type
  • Added Dictionary.Empty static method that allows to obtain a singleton of empty IReadOnlyDictionary<TKey, TValue>
  • Fixed decoding buffer oveflow in Base64Decoder type
  • Added Base64Encoder type for fast encoding of large binary data
  • Deprecation of Sequence.FirstOrEmpty extension methods in favor of Sequence.FirstOrNone
  • Fixed #91
  • Public constructors of PooledBufferWriter and PooledArrayBufferWriter with parameters are obsolete in favor of init-only properties
  • Reduced size of the compiled assembly: omit nullability attributes for private and internal members
  • Optimized performance of Timeout, Optional<T>, Result<T> and Result<T, TError> types
  • Introduced DotNext.Runtime.SoftReference data type in addition to WeakReference from .NET

DotNext.Metaprogramming 4.2.0

  • Improved overall performance of some scenarios where UserDataStorage is used
  • Reduced size of the compiled assembly: omit nullability attributes for private and internal members

DotNext.Reflection 4.2.0

  • Improved overall performance of some scenarios where UserDataStorage is used
  • Reduced size of the compiled assembly: omit nullability attributes for private and internal members

DotNext.Unsafe 4.2.0

  • Updated dependencies
  • Reduced size of the compiled assembly: omit private and internal member's nullability attributes

DotNext.Threading 4.2.0

  • Reduced execution time of CreateTask overloads declared in ValueTaskCompletionSource and ValueTaskCompletionSource<T> classes
  • Added overflow check to AsyncCounter class
  • Improved debugging experience of all asynchronous locks
  • Reduced size of the compiled assembly: omit nullability attributes for private and internal members
  • Reduced lock contention that can be caused by asynchronous locks in concurrent scenarios
  • Added Reset() method to TaskCompletionPipe<T> that allows to reuse the pipe

DotNext.IO 4.2.0

  • Reduced size of the compiled assembly: omit nullability attributes for private and internal members
  • FileWriter now implements IBufferWriter<byte>

DotNext.Net.Cluster 4.2.0

  • Improved compatibility with IL trimming
  • Reduced size of the compiled assembly: omit private and internal member's nullability attributes
  • Completely rewritten implementation of TCP transport: better buffering and less network overhead. This version of protocol is not binary compatible with any version prior to 4.2.0
  • Increased overall stability of the cluster
  • Fixed bug with incorrect calculation of the offset within partition file when using persistent WAL. The bug could prevent the node to start correctly with non-empty WAL
  • Added Reflection-free support of JSON log entries powered by JSON Source Generator from .NET
  • Introduced Incremental log compaction mode to achieve the best performance when the snapshot is relatively small
  • Reduced network overhead caused by read barrier used on the follower side for linearizable reads

DotNext.AspNetCore.Cluster 4.2.0

  • Improved compatibility with IL trimming
  • Reduced size of the compiled assembly: omit nullability attributes for private and internal members

12-20-2021

DotNext 4.1.3

  • Smallish performance improvements

DotNext.Metaprogramming 4.1.3

  • Updated dependencies

DotNext.Reflection 4.1.3

  • Updated dependencies

DotNext.Unsafe 4.1.3

  • Performance improvements of Pointer<T> public methods

DotNext.Threading 4.1.3

  • Fixed potential concurrency issue than can be caused by AsyncBridge public methods when cancellation token or wait handle is about to be canceled or signaled

DotNext.IO 4.1.3

  • Updated dependencies

DotNext.Net.Cluster 4.1.3

  • Updated dependencies

DotNext.AspNetCore.Cluster 4.1.3

  • Updated dependencies

12-12-2021

DotNext 4.1.2

  • Minor performance improvements

DotNext.Metaprogramming 4.1.2

  • Updated dependencies

DotNext.Reflection 4.1.2

  • Updated dependencies

DotNext.Unsafe 4.1.2

  • Updated dependencies

DotNext.Threading 4.1.2

  • Updated dependencies

DotNext.IO 4.1.2

  • Minor performance improvements of FileBufferingWriter class

DotNext.Net.Cluster 4.1.2

  • Updated dependencies

DotNext.AspNetCore.Cluster 4.1.2

  • Updated dependencies

12-09-2021

DotNext 4.1.1

  • Minor performance improvements

DotNext.Metaprogramming 4.1.1

  • Updated dependencies

DotNext.Reflection 4.1.1

  • Updated dependencies

DotNext.Unsafe 4.1.1

  • Updated dependencies

DotNext.Threading 4.1.1

  • Minor performance improvements

DotNext.IO 4.1.1

  • Minor performance improvements

DotNext.Net.Cluster 4.1.1

  • Updated dependencies

DotNext.AspNetCore.Cluster 4.1.1

  • Updated dependencies

12-05-2021

DotNext 4.1.0

  • Optimized bounds check in growable buffers
  • Changed behavior of exceptions capturing by DotNext.Threading.Tasks.Synchronization.GetResult overloaded methods
  • Added DotNext.Threading.Tasks.Synchronization.TryGetResult method
  • Added DotNext.Buffers.ReadOnlySequencePartitioner static class with methods for ReadOnlySequence<T> partitioning in parallel processing scenarios
  • Enabled support of IL trimming

DotNext.Metaprogramming 4.1.0

  • IL trimming is explicitly disabled because the library highly relied on Reflection API

DotNext.Reflection 4.1.0 IL trimming is explicitly disabled because the library highly relied on Reflection API

DotNext.Unsafe 4.1.0

  • Enabled support of IL trimming

DotNext.Threading 4.1.0

  • Reduced memory allocation by async locks
  • Added cancellation support to AsyncLazy<T> class
  • Introduced TaskCompletionPipe<T> class that allows to consume tasks as they complete
  • Removed Microsoft.Extensions.ObjectPool dependency
  • Enabled support of IL trimming

DotNext.IO 4.1.0

  • Enabled support of IL trimming

DotNext.Net.Cluster 4.1.0

  • Enabled support of IL trimming

DotNext.AspNetCore.Cluster 4.1.0

  • Enabled support of IL trimming

11-25-2021

.NEXT 4.0.0 major release is out! Its primary focus is .NET 6 support as well as some other key features:

  • Native support of C# 10 Interpolated Strings across various buffer types, streams and other I/O enhancements. String building and string encoding/decoding with zero allocation overhead is now a reality
  • All asynchronous locks do not allocate tasks anymore in case of lock contention. Instead, they are moved to ValueTask pooling
  • ValueTaskCompletionSource and ValueTaskCompletionSource<T> classes are stabilized and used as a core of ValueTask pooling
  • Introduced Raft-native cluster membership management as proposed in Diego's original paper instead of external discovery mechanism
  • Introduced Gossip-based messaging framework

Use this guide to migrate from 3.x.

DotNext 4.0.0

  • Added DotNext.Span.Shuffle and DotNext.Collections.Generic.List.Shuffle extension methods that allow to randomize position of elements within span/collection
  • Added DotNext.Collections.Generic.Sequence.Copy extension method for making copy of the original enumerable collection. The memory for the copy is always rented from the pool
  • Added DotNext.Collections.Generic.Collection.PeekRandom extension method that allows to select random element from the collection
  • Improved performance of DotNext.Span.TrimLength and StringExtensions.TrimLength extension methods
  • Introduced DotNext.Buffers.BufferHelpers.TrimLength extension methods for ReadOnlyMemory<T> and Memory<T> data types
  • Improved performance of DotNext.Buffers.BufferWriter<T>.AddAll method
  • Reduced memory allocations by ElementAt, FirstOrEmpty, FirstOrNull, ForEach extension methods in DotNext.Collections.Generic.Sequence class
  • Added DotNext.Numerics.BitVector that allows to convert bool vectors into integral types
  • Added ability to write interpolated strings to IBufferWriter<char> without temporary allocations
  • Added ability to write interpolated strings to BufferWriterSlim<char>. This makes BufferWriterSlim<char> type as allocation-free alternative to StringBuilder
  • Introduced a concept of binary-formattable types. See DotNext.Buffers.IBinaryFormattable<TSelf> interface for more information
  • Introduced Reference<T> type as a way to pass the reference to the memory location in asynchronous scenarios
  • Box<T> is replaced with Reference<T> value type
  • ITypeMap<T> interface and implementing classes allow to associate an arbitrary value with the type
  • Added overloaded Result<T, TError> value type for C-style error handling

DotNext.Metaprogramming 4.0.0

  • Added support of interpolated string expression as described in this article using InterpolationExpression.Create static method
  • Added support of task pooling to async lambda expressions
  • Migration to C# 10 and .NET 6

DotNext.Reflection 4.0.0

  • Migration to C# 10 and .NET 6

DotNext.Unsafe 4.0.0

DotNext.Threading 4.0.0

  • Polished ValueTaskCompletionSource and ValueTaskCompletionSource<T> data types. Also these types become a foundation for all synchronization primitives within the library
  • Return types of all methods of asynchronous locks now moved to ValueTask and ValueTask<T> types
  • Together with previous change, all asynchronous locks are written on top of ValueTaskCompletionSource and ValueTaskCompletionSource<T> data types. It means that these asynchronous locks use task pooling that leads to zero allocation on the heap and low GC latency
  • Added AsyncEventHub synchronization primitive for asynchronous code
  • Introduced diagnostics and debugging tools for all synchronization primitives: lock contentions, information about suspended callers, et. al.

DotNext.IO 4.0.0

  • Added DotNext.IO.SequenceBinaryReader.Position property that allows to obtain the current position of the reader in the underlying sequence
  • Added DotNext.IO.SequenceBinaryReader.Read(Span<byte>) method
  • Optimized performance of some ReadXXX methods of DotNext.IO.SequenceReader type
  • All WriteXXXAsync methods of IAsyncBinaryWriter are replaced with a single WriteFormattableAsync method supporting ISpanFormattable interface. Now you can encode efficiently any type that implements this interface
  • Added FileWriter and FileReader classes that are tuned for fast file I/O with the ability to access the buffer explicitly
  • Introduced a concept of a serializable Data Transfer Objects represented by ISerializable<TSelf> interface. The interface allows to control the serialization/deserialization behavior on top of IAsyncBinaryWriter and IAsyncBinaryReader interfaces. Thanks to static abstract interface methods, the value of the type can be easily reconstructed from its serialized state
  • Added support of binary-formattable types to IAsyncBinaryWriter and IAsyncBinaryReader interfaces
  • Improved performance of FileBufferingWriter I/O operations with preallocated file size feature introduced in .NET 6
  • StreamExtensions.Combine allows to represent multiple streams as a single stream

DotNext.Net.Cluster 4.0.0

  • Optimized memory allocation for each hearbeat message emitted by Raft node in leader state
  • Fixed compatibility of WAL Interpreter Framework with TCP/UDP transports
  • Added support of Raft-native cluster configuration management that allows to use Raft features for managing cluster members instead of external discovery protocol
  • Persistent WAL has moved to new implementation of asynchronous locks to reduce the memory allocation
  • Added various snapshot building strategies: incremental and inline
  • Optimized file I/O performance of persistent WAL
  • Reduced the number of opened file descriptors required by persistent WAL
  • Improved performance of partitions allocation in persistent WAL with preallocated file size feature introduced in .NET 6
  • Fixed packet loss for TCP/UDP transports
  • Added read barrier for linearizable reads on Raft follower nodes
  • Added transport-agnostic implementation of HyParView membership protocol suitable for Gossip-based messaging

DotNext.AspNetCore.Cluster 4.0.0

  • Added configurable HTTP protocol version selection policy
  • Added support of leader lease in Raft implementation for optimized read operations
  • Added IRaftCluster.LeadershipToken property that allows to track leadership transfer
  • Introduced IRaftCluster.Readiness property that represents the readiness probe. The probe indicates whether the cluster member is ready to serve client requests

08-12-2021

DotNext 3.3.1

  • DotNext.Threading.Tasks.Synchronization.WaitAsync doesn't suspend the exception associated with faulty input task anymore

DotNext.Threading 3.3.1

  • Fixed 73

07-28-2021

DotNext 3.3.0

  • Added ValueTypeExtensions.Normalize extension methods that allow to normalize numbers of different types
  • Improved overall performance of extension methods declaring in RandomExtensions class
  • Added Func.IsTypeOf<T>() and Predicate.IsTypeOf<T>() cached predicates
  • Deprecation of CallerMustBeSynchronizedAttribute
  • Fixed backward compatibility issues when DotNext 3.2.x or later used in combination with DotNext.IO 3.1.x
  • Fixed LGTM warnings

DotNext.Metaprogramming 3.3.0

  • Added CodeGenerator.Statement static method to simplify migration from pure Expression Trees
  • Fixed LGTM warnings
  • Updated dependencies

DotNext.Reflection 3.3.0

  • Updated dependencies

DotNext.Unsafe 3.3.0

  • Updated dependencies

DotNext.Threading 3.3.0

  • Introduced a new asynchronous primitive AsyncCorrelationSource for synchronization
  • Added ValueTaskCompletionSource<T> as reusable source of tasks suitable for pooling

DotNext.IO 3.3.0

  • FileBufferingWriter.GetWrittenContentAsync overload returning ReadOnlySequence<T> now ensures that the buffer tail is flushed to the disk
  • FileBufferingWriter.Flush and FileBufferingWriter.FlushAsync methods ensure that the buffer tail is flushed to the disk

DotNext.Net.Cluster 3.3.0

  • Added implementation of Jump consistent hash
  • Added support of typed message handlers. See MessagingClient and MessageHandler classes for more information

DotNext.AspNetCore.Cluster 3.3.0

  • Added ETW counter for response time of nodes in the cluster

06-09-2021

DotNext 3.2.1

  • Fixed implementation of Optional<T>.GetHashCode to distinguish hash code of undefined and null values

DotNext.Metaprogramming 3.2.1

  • Updated dependencies

DotNext.Reflection 3.2.1

  • Updated dependencies

DotNext.Unsafe 3.2.1

  • Updated dependencies

DotNext.Threading 3.2.1

  • Updated dependencies

DotNext.IO 3.2.1

  • Updated dependencies

DotNext.Net.Cluster 3.2.1

  • Updated dependencies

DotNext.AspNetCore.Cluster 3.2.1

  • Updated dependencies

06-07-2021

DotNext 3.2.0

  • Added TryDetachBuffer method to BufferWriterSlim<T> type that allows to flow buffer in async scenarios
  • Added TryGetWrittenContent method to SparseBufferWriter<T> that allows to obtain the written buffer if it is represented by contiguous memory block
  • Added OptionalConverterFactory class that allows to use Optional<T> data type in JSON serialization. This type allows to hide data from JSON if the property of field has undefined value. Useful for designing DTOs for REST API with partial resource updates via PATCH method. Available only when target is .NET 5.
  • Added TryResize and Resize methods to MemoryOwner<T> value type
  • Updated dependencies

DotNext.Metaprogramming 3.2.0

  • Call site optimization for AsDynamic() extension method that allows to construct LINQ expression tree on-the-fly using C# expressions
  • Fixed 70

DotNext.Reflection 3.2.0

  • Respect volatile modifier when reading/writing field

DotNext.Unsafe 3.2.0

  • Added additional overloads to Pointer<T> value type with nuint parameter

DotNext.Threading 3.2.0

  • Added EnsureState to AsyncTrigger class as synchronous alternative with fail-fast behavior

DotNext.IO 3.2.0

  • Improved performance of all IAsyncBinaryReader interface implementations
  • Added TryReadBlock extension method that allows to read the block of memory from pipe synchronously
  • Updated dependencies

DotNext.Net.Cluster 3.2.0

  • Smallish improvements of I/O operations related to log entries
  • Improved performance of background compaction algorithm
  • Persistent WAL now supports concurrent read/write. Appending of new log entries to the log tail doesn't suspend readers anymore
  • Added event id and event name to all log messages

DotNext.AspNetCore.Cluster 3.2.0

  • Improved performance of log entries decoding on receiver side
  • Added event id and event name to all log messages

05-14-2021

DotNext 3.1.1

  • Updated dependencies

DotNext.Metaprogramming 3.1.1

  • Updated dependencies

DotNext.Reflection 3.1.1

  • Updated dependencies

DotNext.Unsafe 3.1.1

  • Updated dependencies

DotNext.Threading 3.1.1

  • Updated dependencies

DotNext.IO 3.1.1

  • FileBufferingWriter.Options is refactored as value type to avoid heap allocation
  • Updated dependencies

DotNext.Net.Cluster 3.1.1

  • Updated dependencies

DotNext.AspNetCore.Cluster 3.1.1

  • Updated dependencies

05-11-2021

This release is primarily focused on improvements of stuff related to cluster programming and Raft: persistent WAL, transferring over the wire, buffering and reducing I/O overhead. Many ideas for this release were proposed by potrusil-osi in the issue 57.

DotNext 3.1.0

  • Added async support to IGrowableBuffer<T> interface
  • Added indexer to MemoryOwner<T> supporting nint data type
  • Added more members to SpanReader<T> and SpanWriter<T> types

DotNext.Metaprogramming 3.1.0

  • Updated dependencies

DotNext.Reflection 3.1.0

  • Updated dependencies

DotNext.Unsafe 3.1.0

  • Updated dependencies

DotNext.Threading 3.1.0

  • AsyncTigger now supports fairness policy when resuming suspended callers
  • Added support of diagnostics counters

DotNext.IO 3.1.0

  • Added SkipAsync method to IAsyncBinaryReader interface
  • Added TryGetBufferWriter to IAsyncBinaryWriter interface that allows to avoid async overhead when writing to in-memory buffer
  • Added more performance optimization options to FileBufferingWriter class
  • Fixed bug in StreamSegment.Position property setter causes invalid position in the underlying stream

DotNext.Net.Cluster 3.1.0

  • Added support of three log compaction modes to PersistentState class:
    • Sequential which is the default compaction mode in 3.0.x and earlier versions. Provides best optimization of disk space by the cost of the performance of adding new log entries
    • Background which allows to run log compaction in parallel with write operations
    • Foreground which runs log compaction in parallel with commit operation
  • Small performance improvements when passing log entries over the wire for TCP and UDP protocols
  • Added buffering API for log entries
  • Added optional buffering of log entries and snapshot when transferring using TCP or UDP protocols
  • Introduced copy-on-read behavior to PersistentState class to reduce lock contention between writers and the replication process
  • Introduced in-memory cache of log entries to PersistentState class to eliminate I/O overhead when appending and applying new log entries
  • Reduced number of reads from Raft audit trail during replication
  • Interpreter Framework: removed overhead caused by deserialization of command identifier from the log entry. Now the identifier is a part of log entry metadata which is usually pre-cached by underlying WAL implementation

DotNext.AspNetCore.Cluster 3.1.0

  • Added ability to override cluster members discovery service. See IMembersDiscoveryService interface
  • Small performance improvements when passing log entries over the wire for HTTP/1, HTTP/2 and HTTP/3 protocols
  • Added optional buffering of log entries and snapshot when transferring over the wire. Buffering allows to reduce lock contention of persistent WAL
  • Introduced incremental compaction of committed log entries which is running by special background worker

Breaking Changes: Binary format of persistent WAL has changed. PersistentState class from 3.1.0 release is unable to parse the log that was created by earlier versions.

02-28-2021

DotNext.AspNetCore.Cluster 3.0.2

  • Fixed IP address filter when white list of allowed networks is in use

02-26-2021

DotNext.Net.Cluster 3.0.1

  • Minor performance optimizations of Raft heartbeat processing

DotNext.AspNetCore.Cluster 3.0.1

  • Unexpected HTTP response received from Raft RPC call cannot crash the node anymore (see 54)

01-30-2021

The next major version is out! Its primary focus is .NET 5 support while keeping compatibility with .NET Standard 2.1. As a result, .NEXT libraries built for multiple target frameworks. Additional changes include performance optimizations, polishing of existing API, dropping support of members that were deprecated in 2.x, expanding usage of nullable reference types.

Migration guide for 2.x users is here. Please consider that this version is not fully backward compatible with 2.x.

DotNext 3.0.0

  • Improved performance of SparseBufferWriter<T>, BufferWriterSlim<T>, PooledArrayBufferWriter<T>, PooledBufferWriter<T>
  • Fixed nullability attributes
  • ArrayRental<T> type is replaced by MemoryOwner<T> type
  • Removed obsolete members and classes
  • Removed UnreachableCodeExecutionException exception
  • Completely rewritten implementation of extension methods provided by AsyncDelegate class
  • Added Base64Decoder type for efficient decoding of base64-encoded bytes in streaming scenarios
  • Removed Future&lt;T&gt; type
  • Added ThreadPoolWorkItemFactory static class with extension methods for constructing IThreadPoolWorkItem instances from method pointers. Available only for .NET 5 target
  • Introduced factory methods for constructing delegate instances from the pointers to the managed methods
  • DOTNEXT_STACK_ALLOC_THRESHOLD environment variable can be used to override stack allocation threshold for all .NEXT routines
  • Dropped support of value delegates. They are replaced by functional interfaces. However, they are hiddent from the library consumer so every public API that was based on value delegates now has at least two overloads: CLS-compliant version using regular delegate type and unsafe version using function pointer syntax.
  • Updated dependencies

DotNext.IO 3.0.0

  • Changed behavior of FileBufferingWriter.GetWrittenContentAsStream and FileBufferingWriter.GetWrittenContentAsStreamAsync in a way which allows you to use synchronous/asynchronous I/O for writing and reading separately
  • Introduced extension methods for BufferWriterSlim<char> type for encoding of primitive data types
  • Fixed nullability attributes
  • Added advanced encoding/decoding methods to IAsyncBinaryWriter and IAsyncBinaryReader interfaces
  • Removed obsolete members and classes
  • Simplified signature of AppendAsync methods exposed by IAuditTrail<TEntry> interface
  • Improved performances of extension methods declared in PipeExtensions class
  • Updated dependencies

DotNext.Metaprogramming 3.0.0

  • Fixed nullability attributes
  • Fixed issue 23
  • Fixed code generation of finally blocks inside of asynchronous lambda expressions
  • Updated dependencies

DotNext.Reflection 3.0.0

  • Improved performance of reflective calls
  • DynamicInvoker delegate allows to pass arguments for dynamic invocation as Span<object> instead of object[]
  • Fixed nullability attributes

DotNext.Threading 3.0.0

DotNext.Unsafe 3.0.0

  • Removed obsolete members and classes
  • Fixed nullability attributes
  • Added PinnedArray<T> as a wrapper of pinned arrays from .NET 5
  • Updated dependencies

DotNext.Net.Cluster 3.0.0

  • Improved performance of persistent WAL
  • Added support of active-standby configuration of Raft cluster. Standby node cannot become a leader but can be used for reads
  • Introduced framework for writing interpreters of log entries stored in persistent write-ahead log
  • Added support of JSON-serializable log entries (available for .NET 5 only)
  • Fixed bug causing long shutdown of Raft node which is using TCP transport
  • Added support of PreVote extension for Raft preventing term inflation

DotNext.AspNetCore.Cluster 3.0.0

  • Added UsePersistenceEngine extension method for correct registration of custom persistence engine derived from PersistentState class
  • Added support of HTTP/3 (available for .NET 5 only)
  • Significantly optimized performance and traffic volume of AppendEntries Raft RPC call. Now replication performance is comparable to TCP/UDP transports
  • Added DNS support. Now cluster member address can be specified using its name instead of IP address

DotNext.Augmentation IL weaver add-on for MSBuild is no longer supported.

01-07-2021

DotNext.Metaprogramming 2.12.2

  • Fixed 46

12-16-2020

DotNext.Metaprogramming 2.12.1

DotNext.Net.Cluster 2.12.1

  • Fixed issue 24

DotNext.AspNetCore.Cluster 2.12.1

  • Fixed issue 24

12-04-2020

DotNext 2.12.0

  • Added consuming enumerator for IProducerConsumerCollection<T>
  • Introduced ServiceProviderFactory class and its factory methods for producing Service Providers
  • Significant performance improvements of StringExtensions.Reverse method
  • Introduced a new class SparseBufferWriter<T> in addition to existing buffer writes which acts as a growable buffer without memory reallocations
  • Updated dependencies

DotNext.IO 2.12.0

DotNext.Metaprogramming 2.12.0

  • Added support of await using statement
  • Added support of await foreach statement
  • Updated dependencies

DotNext.Reflection 2.12.0

  • More performance optimizations in code generation mechanism responsible for the method or constructor calls
  • Added ability to reflect abstract and interface methods
  • Added support of volatile access to the field via reflection

DotNext.Threading 2.12.0

  • Added support of Count and CanCount properties inherited from ChannelReader<T> by persistent channel reader
  • Added support of diagnostics counters for persistent channel
  • Fixed resuming of suspended callers in AsyncTrigger class
  • Updated dependencies

DotNext.Unsafe 2.12.0

  • Fixed ignoring of array offset in ReadFrom and WriteTo methods of Pointer<T> type
  • Added ToArray method to Pointer<T> type
  • Added indexer property to IUnmanagedArray<T> interface
  • Updated dependencies

DotNext.Net.Cluster 2.12.0

  • Updated dependencies shipped with .NET Core 3.1.10

DotNext.AspNetCore.Cluster 2.12.0

  • Updated dependencies shipped with .NET Core 3.1.10

11-11-2020

DotNext.Reflection 2.11.2

  • More performance optimizations in code generation mechanism responsible for construction dynamic method or constructor calls

11-08-2020

DotNext.Metaprogramming 2.11.1

  • Fixed issue 19

DotNext.Reflection 2.11.1

  • Reflector.Unreflect now can correctly represents void method or property setter as DynamicInvoker delegate
  • Unreflected members via DynamicInvoker delegate correctly handles boxed value types
  • Improved performance of DynamicInvoker for by-ref argument of value type

11-01-2020

DotNext 2.11.0

  • Added Span<T>.CopyTo and ReadOnlySpan<T>.CopyTo extension methods to support cases when the source span can be larger than the destination
  • Added Span.AsSpan and Span.AsReadOnlySpan for value tuples
  • Deprecated EnumerableTuple data type
  • Minor performance improvements
  • Updated dependencies

DotNext.Metaprogramming 2.11.0

  • Overloaded CodeGenerator.AsyncLambda supports Pascal-style return (issue 13)
  • Fixed suppression of exceptions raised by generated async lambda (issue 14)
  • Fixed invalid behavior of async lambda body rewriter (issue 17)
  • Updated dependencies

DotNext.Reflection 2.11.0

  • Updated dependencies

DotNext.Threading 2.11.0

  • Updated dependencies

DotNext.Unsafe 2.11.0

  • Updated dependencies

DotNext.Net.Cluster 2.11.0

  • Added requestTimeout configuration property for TCP/UDP transports
  • Stabilized shutdown of Raft server for TCP/UDP transports
  • Added SSL support for TCP transport
  • Updated dependencies shipped with .NET Core 3.1.9

DotNext.AspNetCore.Cluster 2.11.0

  • Added requestTimeout and rpcTimeout configuration properties for precise control over timeouts used for communication between Raft nodes (issue 12)
  • Updated dependencies shipped with .NET Core 3.1.9

09-28-2020

DotNext 2.10.1

  • Fixed correctness of Clear(bool) method overridden by PooledArrayBufferWriter<T> and PooledBufferWriter<T> classes
  • Added RemoveLast and RemoveFirst methods to PooledArrayBufferWriter<T> class
  • Optional<T> type distinguishes null and undefined value
  • DotNext.Sequence class is now deprecated and replaced with DotNext.Collections.Generic.Sequence class. It's binary compatible but source incompatible change
  • Added new API for writing resource string readers. It utilizes Caller Info feature in C# to resolve resource entry name using accessor method or property
  • Introduced BufferWriterSlim<T> type as lightweight and stackalloc-friendly version of PooledBufferWriter<T> type
  • Introduced SpanReader<T> and SpanWriter<T> types that can be used for sequential access to the elements in the memory span
  • Removed unused resource strings
  • Updated dependencies

DotNext.Metaprogramming 2.10.1

DotNext.Reflection 2.10.1

  • Removed unused resource strings
  • Updated dependencies

DotNext.Threading 2.10.1

DotNext.Unsafe 2.10.1

DotNext.Net.Cluster 2.10.1

  • Removed unused resource strings
  • Updated dependencies shipped with .NET Core 3.1.8

DotNext.AspNetCore.Cluster 2.10.1

  • Removed unused resource strings
  • Updated dependencies shipped with .NET Core 3.1.8

08-16-2020

DotNext 2.9.6

DotNext.IO 2.7.6

  • Fixed compiler warnings
  • Updated dependencies

DotNext.Metaprogramming 2.6.6

  • Fixed compiler warnings
  • Updated dependencies

DotNext.Reflection 2.6.6

  • Fixed compiler warnings
  • Updated dependencies

DotNext.Threading 2.9.6

  • Fixed compiler warnings
  • Updated dependencies

DotNext.Unsafe 2.7.6

  • Fixed compiler warnings
  • Updated dependencies

DotNext.Net.Cluster 2.6.6

  • Fixed unstable behavior of Raft TCP transport on Windows. See issue #10 for more info.
  • Updated dependencies

DotNext.AspNetCore.Cluster 2.6.6

  • Updated dependencies

08-08-2020

DotNext 2.9.5

08-06-2020

DotNext 2.9.1

  • Added Continuation.ContinueWithTimeout<T> extension method that allows to produce the task from the given task with attached timeout and, optionally, token

DotNext.Threading 2.9.0

  • Fixed graceful shutdown for async locks if they are not in locked state
  • Added AsyncExchanger<T> synchronization primitive that allows to organize pipelines
  • AsyncTrigger now has additional SignalAndWaitAsync overloads

07-30-2020

DotNext 2.9.0

DotNext.IO 2.7.3

  • Fixed behavior of GetObjectDataAsync method in StreamTransferObject. Now it respects the value of IsReusable property.

07-27-2020

DotNext 2.8.0

  • Added MemoryTemplate<T> value type that represents pre-compiled template with placeholders used for fast creation of Memory<T> and string objects

07-24-2020

DotNext.IO 2.7.2

  • Added BufferWriter.WriteLine overloaded extension method that allows to specify ReadOnlySpan<char> as an input argument

07-15-2020

DotNext.IO 2.7.1

  • Text writer constructed with TextWriterSource.AsTextWriter extension method can be converted to string containing all written characters

07-13-2020

DotNext.Unsafe 2.7.1

  • Optimized UnmanagedMemoryPool<T>.GetAllocator method

07-11-2020

DotNext.Unsafe 2.7.0

  • UnmanagedMemoryPool<T>.GetAllocator public static method is added for compatibility with MemoryAllocator<T> delegate

07-09-2020

This release is mainly focused on DotNext.IO library to add new API unifying programming experience across I/O pipelines, streams, sequences and buffer writers.

DotNext 2.7.0

DotNext.IO 2.7.0

DotNext.Metaprogramming 2.6.1

  • Enabled consistent build which is recommended for SourceLink

DotNext.Reflection 2.6.1

  • Optimized construction of getter/setter for the reflected field
  • Enabled consistent build which is recommended for SourceLink

DotNext.Threading 2.6.1

  • Enabled consistent build which is recommended for SourceLink

DotNext.Unsafe 2.6.1

  • Enabled consistent build which is recommended for SourceLink

DotNext.Net.Cluster 2.6.1

  • Enabled consistent build which is recommended for SourceLink

DotNext.AspNetCore.Cluster 2.6.1

  • Reduced memory allocation caused by replication of log entries
  • Enabled consistent build which is recommended for SourceLink

06-14-2020

DotNext 2.6.0

  • More ways to create MemoryOwner<T>
  • Removed copying of synchronization context when creating continuation for Future object
  • Introduced APM helper methods in AsyncDelegate class

DotNext.IO 2.6.0

  • Improved performance of FileBufferingWriter
  • FileBufferingWriter now contains correctly implemented BeginWrite and EndWrite methods
  • FileBufferingWriter ables to return written content as ReadOnlySequence<byte>
  • Introduced BufferWriter class with extension methods for IBufferWriter<byte> aimed to encoding strings, primitive and blittable types
  • Support of ulong, uint and ushort data types available for encoding/decoding in SequenceBinaryReader and PipeExtensions classes
  • Ability to access memory-mapped file content via ReadOnlySequence<byte>

DotNext.Metaprogramming 2.6.0

  • Introduced null-coalescing assignment expression
  • Updated dependencies

DotNext.Reflection 2.6.0

  • Introduced null-coalescing assignment expression
  • Updated dependencies

DotNext.Threading 2.6.0

  • Fixed race-condition caused by AsyncTrigger.Signal method
  • AsyncLock now implements IAsyncDisposable interface
  • AsyncExclusiveLock, AsyncReaderWriterLock and AsyncSharedLock now have support of graceful shutdown implemented via IAsyncDisposable interface

DotNext.Unsafe 2.6.0

  • Optimized performance of methods in MemoryMappedFileExtensions class
  • Updated dependencies

DotNext.Net.Cluster 2.6.0

  • Fixed behavior of PersistentState.DisposeAsync so it suppress finalization correctly

DotNext.AspNetCore.Cluster 2.6.0

  • Respect shutdown timeout inherited from parent host in Hosted Mode
  • Updated dependencies

DotNext.Augmentation.Fody 2.1.0

  • Removed usage of obsolete methods from Fody
  • Updated Fody version

06-01-2020

DotNext 2.5.0

  • Improved performance of PooledBufferWriter
  • MemoryAllocator<T> now allows to allocate at least requested number of elements

DotNext.IO 2.5.0

  • Ability to represent stream as IBufferWriter<T>
  • FileBufferingWriter class is one more growable buffer backed by file in case of very large buffer size

05-29-2020

DotNext.Metaprogramming 2.4.1

  • Fixed dynamic construction of tuples using ValueTupleBuilder class (PR #8)

05-20-2020

DotNext 2.4.2

  • Reduced memory allocation caused by continuations in Future class
  • Improved performance of some methods in MemoryRental<T> and DelegateHelpers classes
  • Reduced amount of memory re-allocations in PooledBufferWriter<T> and PooledArrayBufferWriter<T> classes

05-18-2020

DotNext 2.4.1

  • ArrayRental<T> can automatically determine array cleanup policy
  • MemoryRental<T> is improved for stackalloc/pooling pattern
  • Fixed bug in Clear method of PooledBufferWriter class

05-17-2020

This release is mostly aimed to improving code quality of all .NEXT libraries with help of StyleCop analyzer.

DotNext 2.4.0

  • DotNext.IO.StreamSource class allows to convert ReadOnlyMemory<byte> or ReadOnlySequence<byte> to stream
  • DotNext.IO.StreamSource class allows to obtain writable stream for IBufferWriter<byte>

DotNext.IO 2.4.0

  • Support of BeginRead and EndRead methods in StreamSegment class
  • Update to the latest System.IO.Pipelines library

DotNext.Metaprogramming 2.4.0

  • Fixed several compiler warnings

DotNext.Reflection 2.4.0

  • Fixed several compiler warnings

DotNext.Threading 2.4.0

  • Fixed several compiler warnings
  • Update to the latest System.Threading.Channels library

DotNext.Unsafe 2.4.0

  • Ability to convert Pointer<T> to IMemoryOwner<T>

DotNext.Net.Cluster 2.4.0

  • Added calls to ConfigureAwait in multiple places

DotNext.AspNetCore.Cluster 2.4.0

  • Added calls to ConfigureAwait in multiple places
  • Fixed node status tracking when TCP or UDP transport in use

05-11-2020

DotNext.AspNetCore.Cluster 2.3.2

  • Section with local node configuration can be defined explicitly

05-09-2020

DotNext.AspNetCore.Cluster 2.3.1

  • Alternative methods for configuring local node

04-23-2020

DotNext 2.3.0

DotNext.Metaprogramming 2.3.0

  • Updated dependencies

DotNext.Unsafe 2.3.0

  • Updated dependencies

DotNext.IO 2.3.0

  • Fixed bugs that lead to unexpected EndOfStreamException in some methods of StreamExtensions class
  • Introduced new methods in StreamExtensions class for reading data of exact size

DotNext.Threading 2.3.0

  • Improved performance of existing asynchronous locks
  • Added AsyncTrigger synchronization primitive

DotNext.Reflection 2.3.0

  • Updated dependencies

DotNext.Net.Cluster 2.3.0

  • TCP transport for Raft
  • UDP transport for Raft
  • Fixed bug in PersistentState class that leads to incorrect usage of rented memory and unexpected result during replication between nodes
  • Methods for handling Raft messages inside of RaftCluster<TMember> class now support cancellation via token

DotNext.AspNetCore.Cluster 2.3.0

  • Updated dependencies
  • Fixed cancellation of asynchronous operations

03-08-2020

DotNext 2.2.0

  • Ability to slice lists using range syntax and new ListSegment data type
  • Various extension methods for broader adoption of range/index feature from C# 8

DotNext.Metaprogramming 2.2.0

  • Support of range and index expressions from C# 8

DotNext.Unsafe 2.2.0

  • Access to memory-mapped file via System.Memory<T> data type

DotNext.IO 2.2.0

  • Updated dependencies

DotNext.Threading 2.2.0

  • Updated dependencies

DotNext.Reflection 2.2.0

  • Lighweight API for fast reflection is added. See overloaded Unreflect methods in Reflector class.

DotNext.Net.Cluster 2.2.0

  • Updated dependencies

DotNext.AspNetCore.Cluster 2.2.0

  • Upgrade to latest ASP.NET Core

DotNext.Augmentation.Fody 2.0.1

  • Removed obsolete calls

02-23-2020

DotNext 2.1.0

  • Reduced memory footprint of DotNext.Span static constructor
  • DotNext.UserDataStorage behavior is now customizable via UserDataStorage.IContainer interface
  • Introduced Intrinsics.GetReadonlyRef method allows to reinterpret managed pointer to array element
  • DelegateHelpers.Bind now supports both closed and open delegates

01-31-2020

Major release of version 2.0 is completely finished and contains polished existing and new API. All libraries in .NEXT family are upgraded. Migration guide for 1.x users is here. Please consider that this version is not fully backward compatible with 1.x.

Major version is here for the following reasons:

  1. .NET Core 3.1 LTS is finally released
  2. .NET Standard 2.1 contains a lot of new API required for optimizations. The most expected API is asynchronous methods in Stream class. These enhancements are necessary for evolution of .NEXT library. For instance, new DotNext.IO library could not be released without new .NET API.
  3. ASP.NET Core 2.2 is no longer supported by Microsoft. Therefore, DotNext.AspNetCore.Cluster library of version 1.x relies on unmaintainable platform. Now it is based on ASP.NET Core 3.1 which has long-term support.

What is done in this release:

  1. Quality-focused changes
    1. Removed trivial "one-liners" in DotNext library
    2. Reduced and unified API to work with unmanaged memory in DotNext.Unsafe library
    3. DotNext.AspNetCore.Cluster migrated to ASP.NET Core 3.1 LTS
    4. Increased test coverage and fixed bugs
    5. Additional optimizations of performance in Write-Ahead Log
    6. Fixed issue #4
    7. Introduced API for client interaction support described in Chapter 6 of Raft dissertation
    8. Migration to C# 8 and nullable reference types
  2. New features
    1. Introduced DotNext.IO library with unified asynchronous API surface for .NET streams and I/O pipelines. This API provides high-level methods for encoding and decoding of data such as strings and blittable types. In other words, if you want to have BinaryReader or BinaryWriter for pipelines then welcome!
    2. Ability to obtain result of task asynchronously when its result type is not known at compile-time
    3. Fast hexadecimal string conversion to Span<byte> and vice versa

Raft users are strongly advised to migrate to this new version.

01-12-2020

DotNext.Net.Cluster 1.2.11

  • Ability to reconstruct internal state using PersistentState.ReplayAsync method

01-11-2020

DotNext 1.2.10

  • Fixed invalid behavior of StreamSegment.Position property

DotNext.Net.Cluster 1.2.10

  • Removed redundant validation of log entry index in PersistentState

12-06-2019

DotNext.Unsafe 1.2.10

  • Fixed invalid usage of GC.RemoveMemoryPressure in Reallocate methods

12-04-2019

DotNext 1.2.9

  • UserDataStorage no longer stores null values in its internal dictionary
  • Updated dependencies
  • Migration to SourceLink 1.0.0

DotNext.Metaprogramming 1.2.9

  • Updated dependencies
  • Migration to SourceLink 1.0.0

DotNext.Reflection 1.2.9

  • Updated dependencies
  • Migration to SourceLink 1.0.0

DotNext.Threading 1.3.3

  • Updated dependencies
  • Migration to SourceLink 1.0.0

DotNext.Unsafe 1.2.9

  • Updated dependencies
  • Fixed invalid calculation of byte length in Pointer.Clear method

DotNext.Net.Cluster 1.2.9

  • Updated dependencies

DotNext.AspNetCore.Cluster 1.2.9

  • Updated dependencies

11-27-2019

DotNext.AspNetCore.Cluster 1.2.8

  • Improved performance of one-way no-ack messages that can be passed using ISubscriber.SendSignalAsync method

11-25-2019

DotNext 1.2.7

  • BitwiseComparer now available as singleton instance

DotNext.Net.Cluster 1.2.7

  • Improved performance of copying log entry content when PersistentState is used as persistent audit trail

DotNext.AspNetCore.Cluster 1.2.7

  • Improved performance of message exchange between cluster members

11-24-2019

DotNext 1.2.6

  • Fixed typos in XML documentation
  • Updated InlineIL.Fody dependency

DotNext.Threading 1.3.2

  • Fixed MissingManifestResourceException caused by AsyncLock value type on .NET Core 3.x

DotNext.Unsafe 1.2.6

  • Updated InlineIL.Fody dependency

DotNext.Net.Cluster 1.2.6

  • Fixed NRE when RaftCluster.StopAsync called multiple times

DotNext.AspNetCore.Cluster 1.2.6

  • Migration to patched RaftCluster class

11-20-2019

DotNext.Threading 1.3.1

DotNext.AspNetCore.Cluster 1.2.5

  • Fixed bug when log entry may have invalid content when retrieved from persistent audit trail. Usually this problem can be observed in case of concurrent read/write and caused by invalid synchronization of multiple file streams.

11-18-2019

DotNext.Threading 1.3.0

  • PersistentChannel is added as an extension of channel concept from System.Threading.Channels. It allows to use disk memory instead of RAM for storing messages passed from producer to consumer. Read more here
  • AsyncCounter allows to simplify asynchronous coordination in producer/consumer scenario

11-15-2019

DotNext 1.2.4

  • Updated dependencies

DotNext.Metaprogramming 1.2.4

  • Fixed NRE

DotNext.Reflection 1.2.4

  • Internal cache is optimized to avoid storage of null values

DotNext.Threading 1.2.4

  • Updated dependencies

DotNext.Unsafe 1.2.4

  • Updated dependencies

DotNext.Net.Cluster 1.2.4

  • Fixed unnecessary boxing of generic log entry value

DotNext.AspNetCore.Cluster 1.2.4

  • Updated dependencies

DotNext.Augmentation.Fody 1.2.4

  • Updated dependencies

11-11-2019

DotNext 1.2.3

  • Updated dependencies

DotNext.Metaprogramming 1.2.3

  • Updated dependencies

DotNext.Reflection 1.2.3

  • Fixed potential NRE
  • Fixed reflection of value type constructors
  • Updated dependencies

DotNext.Threading 1.2.3

  • Updated dependencies

DotNext.Unsafe 1.2.3

  • Updated dependencies

DotNext.Net.Cluster 1.2.3

  • Updated dependencies

DotNext.AspNetCore.Cluster 1.2.3

  • Updated dependencies

DotNext.Augmentation.Fody 1.2.3

  • Updated dependencies

11-05-2019

DotNext 1.2.2

  • Fixed bitwise equality
  • Fixed Intrinsics.IsDefault method

11-02-2019

DotNext 1.2.1

10-31-2019

DotNext 1.2.0

  • Fixed memory leaks caused by methods in StreamExtensions class
  • MemoryRental type is introduced to replace memory allocation with memory rental in some scenarios
  • ArrayRental type is extended
  • Value Delegates now are protected from dangling pointer issue caused by dynamic assembly loading
  • Reduced amount of memory utilized by random string generation methods
  • Strict package versioning rules are added to avoid accidental upgrade to major version
  • Improved performance of AtomicEnum methods
  • Improved performance of Atomic<T> using optimistic read locks
  • Fixed unnecessary boxing in atomic operations
  • Intrinsics.HasFlag static generic method is added as boxing-free and fast alternative to Enum.HasFlag method

DotNext.Reflection 1.2.0

  • Updated version of DotNext dependency to fix potential memory leaks
  • Strict package versioning rules are added to avoid accidental upgrade to major version

DotNext.Metaprogramming 1.2.0

  • Updated version of DotNext dependency to fix potential memory leaks
  • Strict package versioning rules are added to avoid accidental upgrade to major version

DotNext.Threading 1.2.0

  • Updated version of DotNext dependency to fix potential memory leaks
  • Strict package versioning rules are added to avoid accidental upgrade to major version
  • AsyncReaderWriterLock now supports optimistic reads

DotNext.Unsafe 1.2.0

  • UnmanagedMemoryPool is added
  • Strict package versioning rules are added to avoid accidental upgrade to major version

DotNext.Net.Cluster 1.2.0

  • Updated version of DotNext dependency to fix potential memory leaks
  • Strict package versioning rules are added to avoid accidental upgrade to major version
  • Fixed incorrect computation of partition in PersistentState.DropAsync method

DotNext.AspNetCore.Cluster 1.2.0

  • HTTP/2 support
  • Performance optimizations caused by changes in ArrayRental type
  • Strict package versioning rules are added to avoid accidental upgrade to major version

DotNext.Augmentation.Fody 1.2.0

  • Improved support of ValueRefAction and ValueRefFunc value delegates

10-12-2019

DotNext 1.1.0

DotNext.Reflection 1.1.0

  • Updated version of FxCop analyzer
  • Improved performance of internal caches

DotNext.Metaprogramming 1.1.0

  • Updated version of FxCop analyzer
  • RefAnyValExpression is added

DotNext.Threading 1.1.0

  • Updated version of FxCop analyzer

DotNext.Unsafe 1.1.0

  • Updated version of FxCop analyzer

DotNext.Net.Cluster 1.1.0

  • Minor performance optimizations of persistent WAL
  • Updated version of FxCop analyzer

DotNext.AspNetCore.Cluster 1.1.0

  • Updated version of FxCop analyzer

10-02-2019

DotNext 1.0.1

  • Minor performance optimizations

DotNext.Reflection 1.0.1

  • Minor performance optimizations

DotNext.Metaprogramming 1.0.1

  • Minor performance optimizations

DotNext.Threading 1.0.1

  • Introduced AsyncSharedLock as combination of reader/write lock and semaphore
  • Minor performance optimizations

DotNext.Unsafe 1.0.1

  • Minor performance optimizations

DotNext.Net.Cluster 1.0.1

  • Minor performance optimizations

DotNext.AspNetCore.Cluster 1.0.1

  • Minor performance optimizations

DotNext.Augmentation.Fody 1.0.1

  • Code refactoring

10-02-2019

This is the major release of all parts of .NEXT library. Now the version is 1.0.0 and backward compatibility is guaranteed across all 1.x releases. The main motivation of this release is to produce stable API because .NEXT library active using in production code, especially Raft implementation.

.NEXT 1.x is based on .NET Standard 2.0 to keep compatibility with .NET Framework.

DotNext 1.0.0

  • Optimized methods of Memory class
  • Extension methods for I/O are introduced. Now you don't need to instantiate BinaryReader or BinaryWriter for high-level parsing of stream content. Encoding and decoding of strings are fully supported. Moreover, these methods are asynchronous in contrast to methods of BinaryReader and BinaryWriter.

DotNext.Reflection 1.0.0

  • API is stabilized

DotNext.Metaprogramming 1.0.0

  • API is stabilized

DotNext.Threading 1.0.0

DotNext.Unsafe 1.0.0

DotNext.Net.Cluster 1.0.0

  • Audit trail programming model is redesigned
  • Persistent and high-performance Write Ahead Log (WAL) is introduced. Read more here
  • Log compaction is supported

DotNext.AspNetCore.Cluster 1.0.0

  • Redirection to leader now uses 307 Temporary Redirect instead of 302 Moved Temporarily by default
  • Compatibility with persistent WAL is provided

DotNext.Augmentation.Fody 1.0.0

  • Behavior of augmented compilation is stabilized

09-03-2019

DotNext.AspNetCore.Cluster 0.5.7

  • Custom redirection logic can be asynchronous
  • Fixed compatibility of redirection to leader with MVC

09-02-2019

DotNext.AspNetCore.Cluster 0.5.5

  • Automatic redirection to leader now works correctly with reverse proxies
  • Custom redirection logic is introduced

08-31-2019

DotNext 0.14.0

  • Timestamp type is introduced as allocation-free alternative to Stopwatch
  • Memory class now have methods for reading and writing null-terminated UTF-16 string from/to unmanaged or pinned managed memory
  • Updated InlineIL dependency to 1.3.1

DotNext.Threading 0.14.0

  • AsyncTimer is completely rewritten in backward-incompatible way. Wait handle are no longer used.

DotNext.Unsafe 0.14.0
DotNext.Reflection 0.14.0
DotNext.Metaprogramming 0.14.0

  • Small code fixes
  • Updated DotNext dependency to 0.14.0
  • Updated Fody dependency to 6.0.0
  • Updated augmented compilation to 0.14.0

DotNext.Net.Cluster 0.5.0
DotNext.AspNetCore.Cluster 0.5.0

DotNext.Augmentation.Fody 0.14.0

  • Updated Fody dependency to 6.0.0

08-28-2019

DotNext.AspNetCore.Cluster 0.4.0
DotNext.Net.Cluster 0.4.0

  • Heartbeat timeout can be tuned through configuration
  • Optimized Raft state machine

08-27-2019

DotNext.AspNetCore.Cluster 0.3.5

  • Docker support

08-22-2019

DotNext.AspNetCore.Cluster 0.3.3
DotNext.Net.Cluster 0.3.3

  • Reduced number of logs produced by cluster node

08-21-2019

DotNext.AspNetCore.Cluster 0.3.2

  • Fixed endpoint redirection to leader node

DotNext.AspNetCore.Cluster 0.3.1

  • Fixed detection of local IP address
  • Improved IPv6 support

08-20-2019

DotNext 0.13.0

  • Fixed bug with equality comparison of null arrays inside of EqualityComparerBuilder
  • Improved debugging experience:
    • SourceLink is enabled
    • Debug symbols now embedded into assembly file
    • NuGet Symbols Package is no longer used

DotNext.Threading 0.13.0

  • Internals of several classes now based on Value Delegates to reduce memory allocations
  • Improved debugging experience:
    • SourceLink is enabled
    • Debug symbols now embedded into assembly file
    • NuGet Symbols Package is no longer used

DotNext.Unsafe 0.13.0
DotNext.Reflection 0.13.0
DotNext.Metaprogramming 0.13.0
DotNext.Net.Cluster 0.3.0
DotNext.AspNetCore.Cluster 0.3.0

  • Improved debugging experience:
    • SourceLink is enabled
    • Debug symbols now embedded into assembly file
    • NuGet Symbols Package is no longer used

08-18-2019

DotNext 0.12.0

  • Value (struct) Delegates are introduced as allocation-free alternative to classic delegates
  • Atomic<T> is added to provide atomic memory access operations for arbitrary value types
  • Arithmetic, bitwise and comparison operations for IntPtr and UIntPtr
  • Improved performance of methods declared in EnumConverter
  • Improved performance of atomic operations
  • Improved performance of bitwise equality and bitwise comparison methods for value types
  • Improved performance of IsDefault method which allows to check whether the arbitrary value of type T is default(T)
  • GetUnderlyingType() method is added to obtain underlying type of Result<T>
  • TypedReference can be converted into managed pointer (type T&, or ref T) using Memory class

This release introduces a new feature called Value Delegates which are allocation-free alternative to regular .NET delegates. Value Delegate is a value type which holds a pointer to the managed method and can be invoked using Invoke method in the same way as regular .NET delegate. Read more here.

ValueType<T> is no longer exist and most of its methods moved into BitwiseComparer class.

DotNext.Reflection 0.12.0

  • Ability to obtain managed pointer (type T&, or ref T) to static or instance field from FieldInfo using Reflector class

DotNext.Threading 0.12.0

DotNext.Metaprogramming 0.12.0

DotNext.Unsafe 0.12.0

DotNext.Net.Cluster 0.2.0 DotNext.AspNetCore.Cluster 0.2.0

  • Raft client is now capable to ensure that changes are committed by leader node using WriteConcern