Releases: gapotchenko/Gapotchenko.FX
Releases · gapotchenko/Gapotchenko.FX
Gapotchenko.FX 2024.1 (Release build 2024.1.3)
After undertaking a substantial development and formalization work for Gapotchenko.FX, we are pleased to release the new version 2024.1 which contains the following improvements, among many others:
- Added support for .NET 8.0 and .NET 9.0 target frameworks
- Introduced primitives for interval arithmetic represented by
Interval<T>
andValueInterval<T>
types provided byGapotchenko.FX.Math.Intervals
module - Introduced
Gapotchenko.FX.Collection.Generic.Deque<T>
primitive representing a linear collection that supports element insertion and removal at both ends with O(1) algorithmic complexity - Added ability to choose between lowercase or uppercase text output of a case-insensitive data encoding by using
DataEncodingOptions.Lowercase
andDataEncodingOptions.Uppercase
flags - Added ability to create streams over contiguous memory regions represented by
System.Memory
andSystem.ReadOnlyMemory
objects by usingToStream
extension method provided byGapotchenko.FX.Memory
module - Added
Gapotchenko.FX.Memory.SpanEqualityComparer
class that allows to compare read-only spans and calculate their hash codes AssemblyAutoLoader
now automatically handles probing paths defined by assembly binding redirects- Added new
InsertSubpath
andEntryExists
methods toFileSystem
class provided byGapotchenko.FX.IO
module - Added
ReifyCollection
LINQ extension method forIEnumerable<T>
which allows you to get a read-only view on a sequence of elements - Added ability to retrieve connected components of a graph by using
Graph<T>.ConnectedComponents
property - Added ability to supply an additional cancellation token to
Gapotchenko.FX.Threading.Tasks.TaskBridge.Execute
method - Added a functional facility that implements a pipe operator concept.
The facility is provided in the form ofPipeOperator
extension method that resides inGapotchenko.FX.Linq.Operators
namespace provided byGapotchenko.FX.Linq
module. It allows you to have a pipe operator functionality in .NET languages that do not natively provide pipe operators - Use hardware-accelerated CRC-32C checksum algorithm implementation when it is available
- Deprecated
Gapotchenko.FX.Math.Topology
module in favor of a formalizedGapotchenko.FX.Math.Graphs
module - Polyfills:
- Added polyfill for required properties introduced in C# 11.0
- Added polyfills for
System.Range
andSystem.Index
types. They are used by the C# compiler to support the range syntax - Added
ExceptBy
,IntersectBy
andUnionBy
LINQ polyfills forIEnumerable<T>
- Added
Order
andOrderDescending
LINQ polyfills forIEnumerable<T>
- Added
Chunk
LINQ polyfill forIEnumerable<T>
- Added
EndsWith
LINQ polyfill forIEnumerable<T>
- Added polyfill for
System.ArraySegment<T>.Slice
method - Added polyfill for
System.IO.Path.GetRelativePath
method - Added polyfill for
System.IO.Path.TrimEndingDirectorySeparator
method - Added polyfills for
ReadExactly
andReadAtLeast
methods ofSystem.IO.Stream
type - Added polyfill for
System.Char.Equals(System.Char, System.StringComparison)
method - Added polyfill for
System.String.Contains(System.Char, System.StringComparison)
method - Added polyfill for
System.String.GetHashCode(System.StringComparison)
method - Added polyfills for
Split
andSplitAny
methods ofSystem.ReadOnlySpan<char>
type - Added polyfill for
ReadSpan
method ofSystem.Runtime.InteropServices.SafeBuffer
type - Added polyfill for
System.Runtime.CompilerServices.CallerArgumentExpressionAttribute
type - Added polyfills for
System.Threading.Tasks.Task.WaitAsync
andSystem.Threading.Tasks.Task<TResult>.WaitAsync
methods - Added polyfill for
System.Diagnostics.StackTraceHiddenAttribute
type - Added polyfill for
System.Diagnostics.UnreachableException
type - Added polyfill for
System.Collections.Generic.Queue<T>.TryDeque
method - Added polyfill for
System.Collections.Generic.OrderedDictionary<TKey, TValue>
type - Added polyfill for
System.IO.Path.Join
method - Added polyfills for
System.Math.BitIncrement
andSystem.Math.BitDecrement
methods - Added polyfill for
System.Threading.Lock
type - Removed
System.HashCode
polyfill implementation in favor ofMicrosoft.Bcl.HashCode
package
- .NET Framework 4.6 support is retired. The minimal supported version of .NET Framework is 4.6.1
- Fixed issues:
- Fixed case-sensitivity of a text data encoding padding character. This is important for data encodings that use custom padding characters
- Fixed issue in
Gapotchenko.FX.Collections.Generic.AssociativeArray<TKey, TValue>
type with accessingIEnumerable<T>.Current
property without checking the result of a prior call toMoveNext
method - Fixed assembly name comparison bug in
Gapotchenko.FX.Reflection.Loader
module - Fixed a bug with the
null
key inIDictionary.Remove
method ofAssociativeArray<TKey, TValue>
type - Fixed a bug with the
null
key inIDictionary.Contains
method ofAssociativeArray<TKey, TValue>
type - Fixed a bug with the
null
key inIDictionary.this[TKey]
getter method ofAssociativeArray<TKey, TValue>
type - Fixed a bug with a non-existing key handling in
IDictionary.this[TKey]
getter method ofAssociativeArray<TKey, TValue>
type
Gapotchenko.FX 2022.2 (Release build 2022.2.7)
- Introduced
Gapotchenko.FX.Data.Encoding
module that defines a wireframe for data encoding algorithms - New
Gapotchenko.FX.Data.Encoding.Base16
module provides a ready-to-use implementation of popular data encoding algorithms belonging to Base16 family - New
Gapotchenko.FX.Data.Encoding.Base24
module provides a ready-to-use implementation of data encoding algorithms belonging to Base24 family: Kuon Base24 - New
Gapotchenko.FX.Data.Encoding.Base32
module provides a ready-to-use implementation of popular data encoding algorithms belonging to Base32 family: Base32, base32-hex, Crockford Base 32, z-base-32 - New
Gapotchenko.FX.Data.Encoding.Base64
module provides a ready-to-use implementation of popular data encoding algorithms belonging to Base64 family: Base64, Base64 URL - Added ability to read the command-line arguments of a running OS process
- Improved multi-platform support. Reached the functional parity between Linux, macOS, and Windows platforms
Gapotchenko.FX 2022.1 (Release build 2022.1.4)
- Added support for .NET 7.0 target framework
- Introduced
Gapotchenko.FX.Security.Cryptography
module - Introduced
Gapotchenko.FX.Data.Integrity.Checksum
module and primitives for cyclic redundancy check (CRC) calculations.
They are grouped by family and provided by the corresponding modules:
Gapotchenko.FX.Data.Integrity.Checksum.Crc8
,Gapotchenko.FX.Data.Integrity.Checksum.Crc16
,Gapotchenko.FX.Data.Integrity.Checksum.Crc32
- Improved documentation
Process.GetImageFileName()
extension method provided byGapotchenko.FX.Diagnostics.Process
module now returnsnull
when a process is not associated with an image file- Fixed issue GH-2 that could lead to
System.IO.EndOfStreamException
exception inProcess.ReadEnvironmentVariables()
method provided byGapotchenko.FX.Diagnostics.Process
module
Gapotchenko.FX 2021.2 (Release build 2021.2.20)
- Introduced
Gapotchenko.FX.Math.Topology
module that providesGraph<T>
type and accompanying primitives including topological sorting - New
FileSystem.PathEquivalenceComparer
property returns the file path string comparer that takes into account path normalization and equivalence rules of the host environment - New
AssociativeArray
key/value map primitive which is similar toDictionary<TKey, TValue>
but handles the whole space of key values includingnull
- New string metric functions:
DamerauLevenshteinDistance
,HammingDistance
,JaroDistance
,LcsDistance
,OsaDistance
- Added
PriorityQueue
polyfill - Added
IEnumerable<byte> AsEnumerable()
polyfill forSystem.IO.Stream
- Added
LongIndexOf
LINQ polyfill - Added
TryGetNonEnumeratedCount
LINQ polyfill - Improved support for .NET 6.0 target framework
- Improved
AssemblyAutoLoader
which can now work simultaneously with app domains and assembly load contexts - String metric functions now take an optional
maxDistance
parameter that limits computational resources required to calculate the distance
Gapotchenko.FX 2021.1 (Release build 2021.1.5)
- Added support for .NET 6.0 target framework
- Introduced
Gapotchenko.FX.Memory
module - Introduced
Gapotchenko.FX.Math.Geometry
module - Introduced
Gapotchenko.FX.Math.Combinatorics
module - Added
MathEx.Clamp
function that clamps a value to the specified range - Added
MathEx.Lerp
function that performs linear interpolation between two values by the specified coefficient - Added
AppInformation.For(assembly)
static function that retrieves app information for a specified assembly - Added LINQ function that simultaneously determines whether any elements of a sequence satisfy the specified conditions (
(bool, bool) IEnumerable<T>.Any(Func<T, bool> predicate1, Func<T, bool> predicate2)
with higher dimensional overloads) - Added
ConsoleEx.ReadPassword
function for reading a password from the console - Added
System.Runtime.CompilerServices.ModuleInitializerAttribute
polyfill - Added
SkipLast
andTakeLast
LINQ polyfills - Added
System.Collections.Generic.ReferenceEqualityComparer
polyfill - Added
MemberNotNullAttribute
andMemberNotNullWhenAttribute
nullability annotation polyfills - Added
GetValueOrDefault
polyfills forIReadOnlyDictionary<TKey, TValue>
- Added
TryAdd
andRemove(key, out value)
polyfills forIDictionary<TKey, TValue>
- Added
System.Numerics.BitOperations.PopCount(ulong)
polyfill - Improved performance of a thread-safe LINQ memoization
- Fixed nullability annotations for
MathEx.Min
andMathEx.Max
functions - Fixed nullability annotations for
LazyInitializerEx
class - Fixed issue with UTF-8 BOM encoding returned by
CommandLine.OemEncoding
on Windows when system locale is set to UTF-8
(cmd.exe cannot consume UTF-8 with BOM) - Fixed potential thread safety issues that could occur on architectures with weaker memory models
Gapotchenko.FX 2020.1 (Release build 2020.1.15)
- Added support for .NET 5.0 target framework
- Introduced
Gapotchenko.FX.AppModel.Information
module that allows to programmatically retrieve information about the app - Introduced
Gapotchenko.FX.Console
module that provides virtual terminal functionality, console traits and a powerfulMoreTextWriter
primitive for improved user friendliness of your console apps - Added nullability annotations for public module APIs
- Added
System.MathF
polyfill - Added polyfills for nullable annotation attributes
- Added polyfill for init-only property setters
- Added
Fn.Ignore(value)
function that ignores a specified value for languages that do not have a built-in equivalent. A typical usage is to fire and forget a parallelTask
without producing a compiler warning - Added
Process.GetImageFileName()
method that allows to retrieve the file name of a running process without security limitations imposed by the host OS - Added
bool ISet.AddRange(collection)
extension method that allows to add elements to a set in bulk - Added
CommandLine.EscapeArgument
andCommandLine.EscapeFileName
methods - .NET Framework 4.0 target is retired. The minimal supported .NET Framework version is 4.5
- Fixed issue with ambiguous match of
IsNullOrEmpty
polyfill method ofHashSet<T>
type that occurred in .NET 4.6+, .NET Standard 2.0+ and .NET Core 2.0+ target frameworks - Fixed issue with ambiguous match of
ToHashSet
polyfill method ofIEnumerable<T>
type that occurred in .NET 4.7.2+ target frameworks - Fixed issue in
Process.ReadEnvironmentVariables()
method with environment variable blocks longer than 32768 bytes - Fixed issue in
WebBrowser.Launch(url)
method that might cause an erroneous interpretation of?
and&
URL symbols by a web browser on Windows hosts
Gapotchenko.FX 2019.3 (Release build 2019.3.7)
- Added support for .NET Core 3.0 target framework
- Introduced
Sequential
andDebuggableParallel
primitives inGapotchenko.FX.Threading
module.
Both primitives constitute drop-in replacements forSystem.Threading.Tasks.Parallel
and are useful for debugging purposes - Added
CommandLine.OemEncoding
property that gets OEM encoding used by Windows command line and console applications - Added ability to create LINQ expressions from functions via
Gapotchenko.FX.Fn
primitive - Added
IndexOf(IEnumerable<T> source, IEnumerable<T> value)
andIndexOf(IEnumerable<T> source, IEnumerable<T> value, IEqualityComparer<T>)
LINQ methods - Implemented polyfill for
Enumerable.ToHashSet<T>
operation - Implemented polyfills for
BitConverter.SingleToInt32Bits
andInt32BitsToSingle
operations - Implemented polyfills to the future for
WaitForExit(CancellationToken)
andWaitForExit(int, CancellationToken)
methods ofSystem.Diagnostics.Process
type - Implemented polyfill for
SwitchExpressionException
Empty.Task
is not suggested by the code editor when it is natively provided by the host platform- Fixed issue with ambiguous match of
Append
andPrepend
polyfills forIEnumerable<T>
type for some target frameworks - Fixed issue with binding redirects handling in
Gapotchenko.FX.Reflection.Loader
module that could lead toStackOverflowException
under specific conditions
Gapotchenko.FX 2019.2 (Release build 2019.1.20)
- Added support for .NET Standard 2.1 target framework
- Added
System.Numerics.BitOperations
polyfill withLog2
andPopCount
hardware-accelerated operations - Added ability to nullify specific integer values in
Empty
functional primitive - Added ability to canonicalize a file path with
FileSystem.CanonicalizePath
method. It works as follows: the alternative directory separators are replaced with native ones; the duplicate adjacent separators are removed - Introduced
Gapotchenko.FX.Reflection.Loader
module. It provides a versatileAssemblyAutoLoader
type that can be used to automatically find and load assembly dependencies in various dynamic scenarios - Introduced
Gapotchenko.FX.Data.Linq
module. Currently it provides async operations for LINQ to SQL technology - Introduced
Gapotchenko.FX.Runtime.InteropServices.MemoryOperations
class that provides highly-optimized block operations for memory - Introduced intrinsic compiler for hardware-accelerated operations
- Implemented
ProcessArchitecture
andOSArchitecture
properties inSystem.Runtime.InteropServices.RuntimeInformation
polyfill - Improved wording of
ProgramExitException
message
Gapotchenko.FX 2019.1 (Release build 2019.1.151)
- Fixed a critical omission with TaskBridge namespace
- Improved wording in summary tags
Gapotchenko.FX 2019.1 (Release build 2019.1.150)
- First public release