Partager via


STM.NET Released!

I hope everyone saw Soma’s announcement that STM.NET is now live on MSDN Devlabs!

We have been talking about software transactional memory for some time now.  Last year my Ch9 interview I mentioned we were looking to work with customers under a non-disclosure agreement; but now you can experiment with STM.NET without a NDA!  Yesterday, we released the “.NET Framework 4 Beta 1 Enabled to use Software Transactional Memory V1.0”.  Since I am out of breath just reading that name, let’s call it “STM.NET”.  You can download it from here.  If you are not ready to experiment, you might be interested in our programming guide; it discusses programming using STM in depth and it’s a great first step. 

STM Logo

STM.NET

What we have produced is a .NET Framework where you can delineate a section of code as running within an atomic block using either a delegate (Atomic.Do) or through a try/catch mechanism.  The latter is the way we were able to provide this functionality without changing every .NET language or create new concepts in IL.

In addition to the basic atomic block we have added a lot of functionality:

  • Tooling support
    • Debugging
    • ETW Tracing
  • Lock interoperability
  • Interoperability with traditional transactions
    • We support MSMQ out of the box
    • We leverage this support for deferred and compensating actions
  • Annotations that allow you to designate:
    • Methods must either run in, not run in, or may run in a transaction
    • Fields must be accessed within a transaction
    • Suppress the transaction for this method
    • Redirect transacted calls to another method
  • Static and dynamic checking of annotations
  • Many of the built-in BCL libraries and types are supported
  • We have done a lot of plumbing work in the CLR to make this work
    • Integration with the garbage collector
    • Support for byrefs
    • Pay-for-play
  • Et cetera; please refer to the programming guide for more information.

As a small team, we accomplished a lot but the whole of .NET is huge so there are areas where STM is currently not supported for instance:

  • C# only
    • There are a number of VB.NET constructs which we don’t support
  • - VS2008
    • For debugging support, we rely on the VS2008 environment
    • You cannot install Visual Studio 2010 Beta1 on a computer with STM nor can you install STM.NET on a machine with VS2010 Beta 1 on it.
  • x32-bit only (Windows XP and Vista were our tested platforms) 

We expect there might be some other limitations of the release that we didn’t discover in our test pass.  We will discuss these on our MSDN Forum.

Please check out STM.NET on the MSDN Devlabs today.  Tell us what you think on our forum.

Comments

  • Anonymous
    July 29, 2009
    Congrats on the release! Will give this a spin.

  • Anonymous
    July 30, 2009
    Along with Atomic.Do, would you consider this:        public static T Get<T>(AtomicFunc<T> func)        {            T result = default(T);            try            {                result = func();            }            catch (AtomicMarker) { }            return result;        } This would be nice and convenient, e.g. instead of (from the STM User Guide): public bool Validate() {    bool result = false;    Atomic.Do(()=>    {        result = (m_string1.Equals(m_string2) == false);    });    return result; } We'd just say: public bool Validate() {    return Atomic.Get(() => m_string1.Equals(m_string2) == false); }