This is in reponse to some questions from an earlier post...
I remember reading posts of yours criticizing STM in the past. Given some of the link love towards Clojure lately, have you softened on STM a bit? What are your opinions on the state of concurrency and the current crop of language out there now?I don't know if I have softened on STM. My main concern with STM is that it is experimental, and moving it into widely used languages like Java and C# would be premature, at best. I am happy to see it in languages like Clojure and Haskell, where it can be experimented with.
Look at Clojure's ref mechanisms: there are several kinds, and now "atoms" are a kind of ref that seems intended to be used *instead* of STM. (Or maybe it is considered an alternate, atomic form of STM isolated from the previous, transactional STM?) That's all fine and good - Clojure is an experiment in concurrent, mostly-functional programming.
But where will STM bottom out? Will we end up with five kinds of refs? Ten? How many rules and exceptions to rules will we need to use them all effectively?
Having more people program more real applications with Clojure, Scala, Haskell, Erlang, and so on is great. Clearly we are just at the very beginning of a long evolution of concurrency mechanisms and how they are expressed in programming languages.
Thank goodness this is happening in widely varying languages, and not just in Java and C#. We'll certainly need multiple languages and mechanisms for addressing different kinds of concurrency problems. And many more than that to explore with enough variety to determine the better ones.
I am personally interested currently in how simple a language and its concurrency mechanisms can be for the widest variety of problems. While Haskell, Scala, Clojure, etc. are much better than Java or C#, they are still more complex than necessary for many applications.
Moreover, the "client" aspects of concurrency problems and opportunities continue to be largely negelected. However small and mobile or rich and graphical, we have to get away from the awful browser/ajax model. Yet even more clearly, there is no reason to retreat to the old desktop model per se. I'm afraid we're going to be stuck with crap for a long time here.