The link to the code library seems broken. Is it no longer available? I 'd be interested in something like that. As a second point, I 'm also curious about a possible distributed (multiple/ clustered servers) STM version.

By on 12/7/2017 8:22 AM ()

Intimately, the post is actually the best on this laudable topic. I harmonize with your conclusions and will eagerly look forward to your future updates. Saying thanks will not just be adequate, for the fantastic lucidity in your writing.[link:www.monclerjacketsstyles.com]

By on 9/19/2011 6:42 PM ()

I've updated the code for F# 2.0 [1].

Greg, I'd like to add this to FSharp.Monad [2]. Would you mind?

[1] [link:dl.dropbox.com]

[2] [link:github.com]

By on 8/16/2011 8:59 AM ()

Good article! Thank you so much for sharing this post.Your views truly open my mind.

By on 10/26/2010 10:40 PM ()

Thanks, I completely agree with your point of view.

By on 10/7/2010 12:56 AM ()

gneverov said:

Yes, that's right. Haskell is able to do this because it is a pure functional language and all side effects are encapsulated by the IO monad which gives side effecting computations a different static type.

By on 9/24/2010 2:39 AM ()

home cinema projector wholesale

[link:www.iaamart.com]

[link:www.iaamart.com]

By on 9/23/2010 11:03 PM ()
By on 9/23/2010 2:20 AM ()
By on 5/19/2010 4:03 AM ()

welcome to china wholesale direct from China!

china wholesale shop supply any kinds goods!

By on 5/18/2010 9:42 PM ()

You've been kicked (a good thing) - Trackback from DotNetKicks.com

By on 10/17/2008 6:17 PM ()

Introduction

F# has the async computation expression for writing parallel programs. Async achieves concurrency...

By on 8/6/2008 6:11 AM ()

Synopsis I gave an hour long talk today, here at Atalasoft, on Concurrency in F# . It featured some slides

By on 4/25/2008 12:51 PM ()
By on 3/26/2008 1:55 AM ()

Last night the wmassdevs Group hosted a Clojure presentation by Rich Hickey . Clojure was born of Rich's

By on 3/21/2008 7:50 AM ()

Since I have a rather long commute to and from work, I have the opportunity to get caught up on all sorts

By on 2/7/2008 4:59 PM ()

PingBack from [link:dougfinke.com]

By on 1/17/2008 7:33 PM ()
By on 1/17/2008 6:50 PM ()

Greg Neverov (of active patterns fame) has placed an implementation of Software Transactional Memory

By on 1/17/2008 6:22 PM ()

Greg Neverov (of active patterns fame) has placed an implementation of Software Transactional Memory

By on 1/17/2008 5:25 PM ()

I wonder if F# could be enhanced to have an unsafe mode, a bit like C#, with annotations for "unsafe" side-effect-allowing code. Code not thus annotated would be statically checked just as in Haskell.

By on 1/17/2008 4:52 AM ()

Yes, that's right. Haskell is able to do this because it is a pure functional language and all side effects are encapsulated by the IO monad which gives side effecting computations a different static type. Since F# is an impure language and by nature allows side effects anywhere, there is no easy way for the type system to prevent side effects in a transaction statically.

By on 1/16/2008 3:10 PM ()

Great post! Does your prior comment mean that unlike the Haskell STM, this F# one does not statically prevent a programmer from including IO or a side effect inside a transaction?

By on 1/16/2008 1:22 PM ()

The current implementation does not rollback side effects (I/O and non-transacted memory) when a transaction re-executes.

By on 1/16/2008 6:22 AM ()

Well, my point is: with the optimistic strategy used by STM, if a value has mutable state _inside_ (like the closure here: let x = ref 0 in fun () -> incr x; !x), even those failed commits (or even purly access) can still change its content.

By on 1/16/2008 2:55 AM ()

No, because you are using a Ref to store the counter not a TVar -- only TVars are synchronized under concurrent access. The TVar, f, that you use does not in fact do anything because although you write to f the value of f never changes: it is always a closure that increments x.

By on 1/15/2008 9:57 PM ()

What happens if you define a new tvar as

1
2
3
4
5
6
7
let f = newRef (let x = ref 0 in fun () -> incr x; !x)
and run several copy of 

stm { let! ff = readRef f
           let v = ff ()
           do! writeRef f ff
           return v }

will they return continuous int sequence?

By on 1/15/2008 2:02 PM ()
By on 1/15/2008 7:22 AM ()
IntelliFactory Offices Copyright (c) 2011-2012 IntelliFactory. All rights reserved.
Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us | Terms of Use | Privacy Policy | Cookie Policy
Built with WebSharper