Garyon 0.3.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Garyon --version 0.3.0.1                
NuGet\Install-Package Garyon -Version 0.3.0.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Garyon" Version="0.3.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Garyon --version 0.3.0.1                
#r "nuget: Garyon, 0.3.0.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Garyon as a Cake Addin
#addin nuget:?package=Garyon&version=0.3.0.1

// Install Garyon as a Cake Tool
#tool nuget:?package=Garyon&version=0.3.0.1                

Garyon

A C# library aiming to offer multi-dimensional functionality.

Pre-Release Notice

This project is not yet ready for an actual release. All the code is still in pre-release, thus it might contain bugs, some APIs might be renamed, refactored, reimplemented, or even removed entirely in future releases. Please keep that in mind and always ensure that your implementations are up-to-date after updating the library.

After the initial release, there will be no such issues. All the new APIs will be properly tested, constructed and organized before making it to production.

Why is it here?

Many parts of the standard library are either incomplete or not as well-designed. This library offers further helpers and overall functionality with its code, preventing the user from needing to write commonly found boilerplate code for frequent tasks. Many projects include some utility code that could serve general purpose, and is being reimplemented on a per-project basis, which should not happen. Furthermore, a lot of the boilerplate code is not even nearly as optimized as it could be, while in some projects that need performance, optimizations are either mediocre, or just too in-depth, consuming useful time from actually developing the intended project.

What areas does it cover?

From System.Console to System.Reflection, or even custom implementations of common assets, this library can expand virtually every single area the standard library does not fully cover.

Contribution

Abide to the code style, ensure all additions are properly tested, and include test cases. More information is specifically given under the Quality Control section:

Quality Control

This library aims to offer high-performance utility code, thus everything needs to be properly tested and benchmarked to ensure that it does have a significant improvement over other solutions. This is why the solution contains the

Garyon.QualityControl
Garyon.Benchmarks
Garyon.Tests

projects.

  • Garyon.QualityControl is the base project, which the other two depend on. It is meant to contain shared assets between tests and benchmarks.
  • Garyon.Benchmarks contains the benchmarks that are being run in order to test performance of the functionality that is being provided.
  • Garyon.Tests contains test cases for each single non-obviously correct function to ensure the utilities are correctly implemented in every case. Every single test must cover all edge cases, to never come across potential regressions.

Performance

To ensure performance is peak, SIMD must be taken into consideration. There are numerous instructions that fall under that category, and offer great performance improvements when used in an impactful amount. Repetitive calls to small functions should be inlined, whereas much less frequently used functions need not be inlined, neither optimized, for long as they do not completely ruin performance.

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net5.0

    • No dependencies.
  • net6.0

    • No dependencies.
  • net7.0

    • No dependencies.

NuGet packages (18)

Showing the top 5 NuGet packages that depend on Garyon:

Package Downloads
RoseLynn

Additional tools for Roslyn-based applications.

RoseLynn.Analyzers

Additional tools for Roslyn-based analyzers.

RoseLynn.CodeFixes

Additional code fix tools for Roslyn-based analyzers.

GDAPI

Package Description

RoseLynn.VS2019

Additional tools for Roslyn-based applications, compatible with VS 2019.

GitHub repositories

This package is not used by any popular GitHub repositories.

Additions:
- AffixedEnumerable<T>
- SingleOrEnumerable<T>
- EmptyEnumerator<T>
- SingleValueEnumerator<T>
- UnreachableException
- NullGuards

Extensions:
- Tons of Span<T> and ReadOnlySpan<T> extensions
- string.Repeat(int)
- UnaryOperatorExtensions
- AppDomainHelpers
- Several extensions for MemberInfo, FieldInfo and Type
- IEnumeratorExtensions
- IDictionaryExtensions
- More ToCollectionExtensions
- IEnumerable<T>.Uphold

Improvements:
- Documentation for some more components
- Compiled against .NET 5.0, .NET 6.0 and .NET 7.0

Breaking Changes:
- Renamespace TypeValueCounterDictionary into Garyon.Objects from Garyon.Functions

Bugfixes:
- Critical SO bug in IEnumerableExtensions.Concat(params T[])
- Bug in PathUtilities.GetCommonDirectory

Internals:
- Use C# 11.0
- Code style cleanup