- Renamed Sasa.Collections.List to Sasa.Collections.Seq to avoid clashes with System.Collections.Generic.List
- Restructured the list operators to better support chaining
Useful additions include:
- Sasa.Weak<T> which wraps WeakReference
- Additional string processing functions, like StringExt.SliceEquals
- Array-processing combinators under Sasa.Collections.Arrays (Slice, Dup, etc.)
- Stream functions under Sasa.IO (CopyTo, ToArray)
- Support for MIME decoding and encoding for MailMessage parsing
- Better conformance to RFCs for Pop3Client and MailMessage parsing
- Concurrency bugfix in Sasa.Lazy.
MIME MailMessage parsing and the Pop3Client are already in use in production code, and conformance appears adequate after hundreds of processed messages.
There are a few components of this release that I would deem "experimental".
Sasa.Dynamics is intended as a "safe reflection" facility. Basically, this is a "type-case" construct as found in the "intensional type analysis" literature. Any reflective algorithm should be implementable via ITypeFunc<R>, and you cannot forget to handle a particular case. This interface basically factors out object traversal from the actual reflection algorithm.
Under Sasa.Web and Sasa.Web.Asp, I've included a URL-safe Base64 encoder/decoder, Sasa.Web.Url64, and a generic ASP.NET Page base class that is immune to clickjacking and CSRF.
I first proposed this idea on the capability security mailing list. I'm not completely satisfied with the current incarnation, but it's an interesting idea I'm still toying with.