Today's framework project of the week by Sandro Magi is one one of those kitchen sink, someone solving his real world problems, yet taking the time to clean it up, wrap it up and share his work and experience with you and me framework.
It's got some "standard" features but also some pretty cutting edge and pretty cool ones too.
And besides binaries (GNU or LGPLv2), the source for everything is available too!
Sasa is a collection of extensions to the .NET framework organized in logical, often standalone assemblies.
Sasa: no deps
* IEnumerable extensions
* thread-safe + null-safe events
* numeric extensions
* Option type
* lazy type
* low-level bit-twiddling functions
* portable BinaryReader/Writer
Sasa.Collections: Sasa, Sasa.Binary
* purely functional collections, ie. list, dictionary, queue, set, etc.
* media types and file extensions
* statistical and numerical functions
Sasa.Net: Sasa, Sasa.Collections
* full MIME message parsing
* POP3 client
* Rfc822 header parsing
* Code Contracts impl.
* software transactional memory
* Concurrent Revisions fork-join framework
* extensible Pratt parser
* type-safe reflection
* LINQ expression visitors and query providers
...and much more!
To get a real feel for everything that's in this cool collection, check out the doc's, http://higherlogics.net/sasa/docs-v0.9.4/
Source? Yep! (and you can see that it's under active development too
Here's a snap of the binary drop (to highlight the "standalone assemblies" statement):
Want to see more? Check out Sandro's blog posts on Sasa, http://higherlogics.blogspot.com/search/label/Sasa
What kind of Sasa stuff has he written recently?
- Sasa.Strings - General String Extensions
- Sasa.Parsing - type-safe, extensible lexing and parsing framework
- Sasa.Dynamics - type-safe polytypic/reflective programming
- Sasa.Func - Type-Safe Delegate Combinators
- Sasa.Option - Handling Optional Values
- Sasa.Result - Handling Exceptional Values
- Sasa.Numbers - Generic Number Extensions
Hopefully that has wet your appetite a little. Now it's up to you to grab it and start Sasa'ing! (I just like saying, "Sasa..." can you tell?