Monday, March 2, 2015

This release features a few new conveniences, a few bugfixes and a vector that's faster than any other I've managed to find for .NET. Here's the changelog since the last v0.14.0 release:

* more elaborate benchmarking and testing procedures
* added a minor optimization to purely functional queues that caches
the reversed enqueue list
* FingerTree was switched to use arrays as opposed to a Node type
* optimized FingerTree enumerator
* FingerTree array nodes are now reused whenever possible
* Sasa.Collections no longer depends on Sasa.Binary
* MIME message's body encoding is now defaulted to ASCII if none specified
* added convenient ExceptNull to filter sequences of optional values
* NonNull<T> no longer requires T to be a class type, which inhibited its
use in some scenarios
* fixed null error when Weak<T> improperly constructed
* added variance annotations on some base interfaces
* added a super fast Vector<T> to Sasa.Collections
* sasametal: fixed member name generated for compound keys
* Sasa's Option<T> now integrates more seamlessly in LINQ queries
with IEnumerable<T> thanks to two new SelectMany overloads
* added two new array combinators to extract values without exceptions
* added a few efficient Enumerables.Interleave extensions to interleave
the values of two or more sequences
* decorated many collection methods with purity attributes
* fixed a bug with the Enums<T>.Flags property

A forthcoming post on the recent optimizations I've applied to Sasa's immutable collections will show the dramatic performance when compared to Microsoft's and F#'s immutable collections. Sasa's vector is an order of magnitude faster than F#'s, and Sasa's trie is actually faster than the standard mutable System.Collections.Generic.Dictionary up to around 100 elements.

As usual, you can find the individual packages on nuget, or download the full release via Sourceforge. The documentation is available in full as a .CHM file from Sourceforge, or you can peruse it online.