Sasa 0.9.4 Released with New Additions, Features and Bug Fixes
Sasa 0.9.4 has been released with new additions, features, bug fixes and is a collection of .NET Framework extensions organized in logical and standalone assemblies. It includes a function to convert integers into an English sentence representation and also added custom equality and comparisons extensions for strings in addition to Sasa.Values, which provides various extensions on general values.
Sasa 0.9.4 includes an error condition which signals an invalid parse if the input is not fully consumed and also added a regex scanner to PrattGrammar in addition to a declaration for parsing delimited values and for parsing lists of values including a capability-secure file system API, new TypeConstraint assertion to simplify working with constraints, an array append overload for a single parameter, a ThreadScoped<T> thread local instance object, a simple software transactional memory under Sasa.TM and a simple blocking pull WaitQueue.
The recent release of Sasa consist of a simple IoC abstraction under Sasa.IoC, functions to convert closed to open delegates and to extract delegates for getters/setters. It also includes a simple HTML parser using Tokenizer and a generic Enums.HasFlag extension method which enables you to check the presence of enumeration flags.
The Sasa library contains libraries which are used for various purposes. The main library - Sasa.dll include Tuples, sums, generic operators, LINQ extensions, string extensions, thread-safe and null-safe events and more. While Sasa.Arrow.dll is used for arrow computations for .NET, Sasa.Binary.dll contains Low-level functions on bit data, fast endian conversions, untagged unions and more.
Sasa.Collections.dll includes purely functional lists, trees and stacks. The Sasa.Concurrency library enables developers to develop applications with faster thread-local data and simple software transactional memory in pure C#. While Sasa.Contracts.dll is a simple API-complete reimplementation of Microsoft's code contracts, Sasa.FP.dll contains functions for binomial collections, lenses and function currying.
Sasa includes library for LINQ, which contains a faster expression compiler, expression substitutions and base classes for query providers and expression visitors. It also contains Mime.dll, which is used for mapping file extensions and media types.
While the network library included with Sasa contains extensions, POP3 client, MIME message parsing and a HTTP session state machine, numerics package consist of analytical extensions, statistical functions, minimal Steiner tree approximations and dense matrix math.
The Parsing.dll assembly includes typed and extensible lexing. On the other hand, Reactive.dll consists of named and anonymous reactive values and properties. Sasa 0.9.4 includes an IL rewriter which performs type erasure on type constraints.
InfoQ had a chat with Sandro Magi to know about the kind of applications that can be developed with Sasa
I've used Sasa in numerous applications for my clients at Higher Logics since I first started it in 2006. The original program is probably an e-mail messaging broker that has parsed and processed hundreds of thousands of e-mails. Thanks to some community feedback this last release cycle, the MIME support is even more solid.
Most recently, I was able use Sasa to write a general purpose web and web UI framework in about a weekend (it's essentially a bottom-up rewrite of the Clavis prototype ); that's scheduled to be released in September.
I've otherwise used Sasa in simple to complex ASP.NET applications, and desktop applications, and I wouldn't be able to live without it. Now that Sasa is available via nuget, installing it is a simple click away!
The license is LGPL, so you can even use it in commercial projects. If a person changes something in Sasa though, they must release those changes as source, so I encourage anyone and everyone to contribute either in documentation, tests or source code. Moreover, developers can also contribute via Sasa's ohloh page.
Mike Amundsen May 29, 2015
Ben Linders May 28, 2015