I have released v2.1 of Sodium for C#. There are only a couple changes, but one is a public API change, which is why I bumped the version to 2.1.
- Detect dependency cycles and throw an exception when one is encountered. Previously they were allowed but caused unspecified and usually incorrect behavior. If cyclical logic is actually necessary, use Transaction.Post to start the next step of the recursion in a new Transaction immediately after the current one ends.
- Make Stream.Listen() and DiscreteCell.Listen() strong listeners (as they used to be). These methods will now return IStrongListener (which inherits from IListener and implements IDisposable).
- Add Stream.ListenWeak() and DiscreteCell.ListenWeak() methods back. These methods will now return IWeakListener (which inherits from IListener).
At some point very soon I will be converting the code base over to VS2017/C#7 to take advantage of some of the new language features. The DLL will still be compatible with pre-VS2017 code, though.
I plan on putting out a Sodium 3.0 release at some point in the near future. The main change for Sodium 3.0 will be that I would like to rework loops so that they are more type safe. I believe that we can protect against loops that should not be able to happen with the type system, and I also plan on doing something similar to F# in the way looping is implemented now that C# has gained tuple deconstruction, making it more feasible.