[Haskell-cafe] SimonPJ and Tim Harris explain STM - video

Jason Dagit dagit at eecs.oregonstate.edu
Thu Nov 23 15:18:32 EST 2006


A comment on that video said:

----- BEGIN QUOTE ----
It seems to me that  STM creates  new problems with composability.
You create two classes of code: atomic methods and non atomic methods.

Nonatomic methods can easily call atomic ones – the compiler could
even automatically inject the atomic block if the programmer forgot.

Atomic methods and blocks cannot be allowed to call nonatomic code.
The nonatomic code could do I/O or other irrevocable things that would
be duplicated when the block had to retry.
---- END QUOTE ----

I imagine an example like this (some pseudo code for a side effect
happy OO language):

class Foo {
  protected int counter; // assume this gets initialized to 0
  public doSomething() {
    atomic{
      counter++;
      Console.Write("called doSomething execution# " + counter);
      // something which could cause the transaction to restart
    }
  }
  public doOtherThing() {
    atomic{
      doSomething();
      // something which could cause the transaction to restart
    }
  }
}

Now imagine doSomething gets restarted, then we see the console output
once each time and counter gets incremented.  So one solution would be
to move the side effects (counter++ and the console write) to happen
before the atomic block.  This works for doSomething, but now what if
we called doOtherThing instead?  We're back to having the extra
side-effects from the failed attempts at doSomething, right?  We just
lost composability of doSomething?  I'm assuming counter is only meant
to be incremented once per successful run of doSomething and we only
want to see the output to the log file once per successful run, but it
needs to come before the log output inside doSomething so that the log
makes sense.

I realize STM is not a silver bullet, but it does seem like
side-effects do not play nicely with STM.  What is the proposed
solution to this?  Am I just missing something simple?  Is the
solution to make it so that Console.Write can be rolled back too?

Thanks,
Jason

On 11/23/06, Bayley, Alistair <Alistair_Bayley at invescoperpetual.co.uk> wrote:
> http://channel9.msdn.com/Showpost.aspx?postid=231495
>
> The links to the video are a couple of yellow buttons at the bottom of
> the article: "Watch" or "Download".
>
> I haven't watched this yet (it's nearly an hour long, I think). Found
> via reddit (http://reddit.com).
>
> Haskeller's on TV (sort of...) woot woot!
>
> Alistair
> *****************************************************************
> Confidentiality Note: The information contained in this message,
> and any attachments, may contain confidential and/or privileged
> material. It is intended solely for the person(s) or entity to
> which it is addressed. Any review, retransmission, dissemination,
> or taking of any action in reliance upon this information by
> persons or entities other than the intended recipient(s) is
> prohibited. If you received this in error, please contact the
> sender and delete the material from any computer.
> *****************************************************************
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>


More information about the Haskell-Cafe mailing list