I am interested in learning concurrent programming, focusing on the application/user level (not system programming). I am looking for a modern high level programming language that provides intuitive abstractions for writing concurrent applications. I want to focus on languages that increase productivity and hide the complexity of concurrent programming.
To give some examples, I don't consider a good option writing multithreaded code in C, C++, or Java because IMHO my productivity is reduced and their programming model is not intuitive. On the other hand, languages that increase productivity and offer more intuitive abstractions such as Python and the multiprocessing module, Erlang, Clojure, Scala, etc. would be good options.
What would you recommend based on your experience and why?
EDIT: Thanks everybody for your interesting answers. It's hard to make a conclusion without actually trying since there are many good candidates: Erlang, Clojure, Scala, Groovy, and perhaps Haskell. I voted the answer with the most convincing arguments, but I'll try all the good candidates before deciding which one to pick :)
To give an example, I don't consider a good option writing multithreaded code in C, C++, or Java
. Why?On the other hand, Python and the multiprocessing module, Erlang, Clojure, Scala, etc. are some of my options.
Again, why? Expand your question to better define what you're actually looking for.begin transaction
end transaction
and everything inside should be deadlock-free and either succeed or fail as a whole.