Skip to content

copenhagenatomics/dotNext

 
 

Repository files navigation

.NEXT

Build Status License Test Coverage CodeQL Join the chat

.NEXT (dotNext) is a set of powerful libraries aimed to improve development productivity and extend .NET API with unique features. Some of these features are planned in future releases of .NET platform but already implemented in the library:

Proposal Implementation
Interop between function pointer and delegate DelegateHelpers factory methods
Check if an instance of T is default(T) IsDefault() method
Concept Types Documentation
Expression Trees covering additional language constructs, i.e. foreach, await, patterns, multi-line lambda expressions Metaprogramming
Async Locks Documentation
High-performance general purpose Write-Ahead Log Persistent Log
Memory-mapped file as Memory<byte> MemoryMappedFileExtensions
Memory-mapped file as ReadOnlySequence<byte> ReadOnlySequenceAccessor
A dictionary where the keys are represented by generic arguments Documentation
Process asynchronous tasks as they complete Documentation
Soft References Documentation

Quick overview of additional features:

All these things are implemented in 100% managed code on top of existing .NET API without modifications of Roslyn compiler or CoreFX libraries.

Quick Links

What's new

Release Date: 02-01-2022

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

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

Changelog for previous versions located here.

Release & Support Policy

The libraries are versioned according with Semantic Versioning 2.0.

Version .NET compatibility Support Level
0.x .NET Standard 2.0 Not Supported
1.x .NET Standard 2.0 Not Supported
2.x .NET Standard 2.1 Not Supported
3.x .NET Standard 2.1, .NET 5 Maintenance
4.x .NET 6 Active development

Maintenance support level means that new releases will contain bug fixes only.

Development Process

Philosophy of development process:

  1. All libraries in .NEXT family are available for the wide range of .NET runtimes: Mono, .NET, Blazor
  2. Compatibility with R2R/AOT compiler should be checked for every release
  3. Minimize set of dependencies
  4. Provide high-quality documentation
  5. Stay cross-platform
  6. Provide benchmarks

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the .NET Foundation Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Packages

No packages published

Languages

  • C# 100.0%