Yesterday I attended the Skillsmatter Functional Programming Exchange where there was a sequence of really interesting talks.
The day started with Simon Peyton Jones giving a good introduction to the issues around multi-core concurrency and parallelism. The talk was really entertaining and brought up a great number of interesting points. The presenter obviously emphasised Haskell as an ideal language for experimenting with various solutions to the concurrency problem. He had some great remarks concerning locks and how hard they are to use. “Implementing a double ended queue on a uniprocessor is an undergraduate problem; on a multi-processor it was until recently a conference paper”. GHC has been extended to offer all kinds of solutions – low overhead threads and an _epoll implementation to allow large numbers of outstanding requests, software transactional memory (where he emphasised that Microsoft’s CLR STM failed owing to the nature of the runtime with the complication of too much mutable state), and also Erlang like isolation models to control the interaction between agents and allow graceful handling of failure. The talk covered the compilation of a subset of Haskell to run on a GPU and also covered data parallelism and nested data parallelism. In the case of the latter, there is a lot of research going on in this area. All very interesting and thought-provoking.
Another talk that mentioned Erlang was the talk on the Akka, a scalable Actor library implemented as a library in Scala. The talk emphasised that the Actor model allows scaling, both within the processes and across machines using remote Actor references. Actors can be linked in the style of process linking in Erlang, – this allows processes to fail at which point other linked processes are notified and recover from the failure.
There were several other good talks, including a talk by Simon Cousins on how his company started using F#, seamlessly integrating it into an existing C# application.