Sharpify 1.0.1
See the version list below for details.
dotnet add package Sharpify --version 1.0.1
NuGet\Install-Package Sharpify -Version 1.0.1
<PackageReference Include="Sharpify" Version="1.0.1" />
paket add Sharpify --version 1.0.1
#r "nuget: Sharpify, 1.0.1"
// Install Sharpify as a Cake Addin #addin nuget:?package=Sharpify&version=1.0.1 // Install Sharpify as a Cake Tool #tool nuget:?package=Sharpify&version=1.0.1
Sharpify
A collection of high performance language extensions for C#
Features
- 🤷
Either<T0, T1>
- Discriminated union object that forces handling of both cases - 🦾 Flexible
Result
type that can encapsulate any other type and adds a massage options and a success or failure status. Flexible as it doesn't require any special handling to use (unlikeEither
) - 🚀 Extremely efficient concurrency with
Concurrent
collection wrapper andIAction
/IAsyncAction
interfaces - 🏄 Wrapper extensions that simplify use of common functions and advanced features from the
CollectionsMarshal
class - 🏋️ High performance optimized alternative to core language extensions
- 🎁 More added features that are not present in the core language
More on Concurrent
The interfaces IAction
and IAsyncAction
allow usage of readonly structs to represents the actual lambda function alternative, in addition of possibly being allocated on the stack, it also allows usage of readonly field and provides clarity for the JIT compiler allowing it to optimize much more during runtime than if it were lambda functions. The Concurrent
wrapper serves 3 purposes: first is separating the extensions of this library from the rest of parallel core extensions, to make sure you really are using the one you want. Second is to limit actual types of collections you could use, In order to maximize the performance only collections that implement ICollection<T>
can be used. Third is that wrapping the collection as a field in a ref struct sometimes helps allocate more of the actual processing dependencies on the stack, and most of the time even if not, it will allocate the pointer to the stack which will help the JIT to further optimize during runtime.
More on Result
Result
is a readonly record struct
that includes a bool
status of either success or failure and an optional string
message.
In addition to that there is an alternative Result<T>
which can also store a value of type T. The result class uses static factory methods to create both Result
and Result<T>
objects, and implicit converters minimize complexity and unreadability of code.
Unlike Either<T0, T1>
, Result
does force the user to handle it in any special way, instead nullable properties are used. both Result.Message
and Result.Value
(if Result<T>
is used) can be null, and the factory methods for Fail
set the Value
to null. So that in the worst case you only allocate a null reference.
All of these design choices guarantee vastly improved performance over Either<T0, T1>
since, you can use any objects during the handling of the result, or pass the result entirely or just parts of it between methods without worrying of boxing and heap allocations from lambdas
More on the Utils
class
- Adds an option for calculating rolling average for
double
- Adds new interfaces to access
DateTime.Now
usingGetCurrentTimeAsync
andGetCurrentTimeInBinaryAsync
, as using the default ones involves a system call and it is blocking, it actually takes quite a bit of time, from my testing about 180ns, the new functions allow calling to a variable and not awaiting them, then later awaiting the actual variable to either get the value or wait for it to complete and get the value. This allows you to actually do other things while awaiting this system call. It can make a big difference in high-performance scenarios where you use `DateTime.Now to also get a timestamp
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | 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. |
-
net7.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Sharpify:
Package | Downloads |
---|---|
PrettyConsole
High performance, feature rich and easy to use wrap over System.Console |
|
Sharpify.Data
An extension of Sharpify, focused on Data |
|
Sharpify.CommandLineInterface
An extension of Sharpify, focused on creating command line interfaces |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2.5.0 | 161 | 11/13/2024 |
2.4.0 | 392 | 10/21/2024 |
2.4.0-alpha | 184 | 10/8/2024 |
2.2.0 | 551 | 7/26/2024 |
2.1.0 | 90 | 7/18/2024 |
2.0.0 | 152 | 6/3/2024 |
1.8.1 | 110 | 5/30/2024 |
1.8.0 | 120 | 4/17/2024 |
1.7.3 | 181 | 1/29/2024 |
1.7.2 | 124 | 1/23/2024 |
1.7.1 | 242 | 1/20/2024 |
1.7.0 | 97 | 1/20/2024 |
1.6.0 | 134 | 1/15/2024 |
1.5.0 | 119 | 1/10/2024 |
1.4.2 | 124 | 1/8/2024 |
1.4.1 | 164 | 1/4/2024 |
1.4.0 | 145 | 1/4/2024 |
1.3.1 | 136 | 12/31/2023 |
1.3.0 | 135 | 12/31/2023 |
1.2.0 | 136 | 12/24/2023 |
1.1.0 | 157 | 12/7/2023 |
1.0.9 | 119 | 12/7/2023 |
1.0.8 | 159 | 11/22/2023 |
1.0.7 | 131 | 9/23/2023 |
1.0.6 | 151 | 8/21/2023 |
1.0.5 | 166 | 5/4/2023 |
1.0.4 | 163 | 4/23/2023 |
1.0.3 | 169 | 4/19/2023 |
1.0.2 | 174 | 4/19/2023 |
1.0.1 | 182 | 4/14/2023 |
1.0.0 | 177 | 4/14/2023 |