I joined the ACM about a year and a half ago, and they started sending me their equivalent of the IEEE Spectrum–called Communications of the ACM. For anyone that knows me, I’ve been quite vocal about the clear problem regarding multithreaded programming, and many of the issues that come with it. One area in particular is that the threading model is really the assembly language of concurrency and parallelism. It’s far too low low-level to constantly be thinking about. We need higher level constructions, but anything we do with the current languages is really insufficient. I’ve long felt the best way to approach this problem is from a language perspective, where the model can be completely different (Erlang, Scala, and Clojure are all examples of what can be done).
This month in the Communications of the ACM, there is a great article that goes into much more depth it all: Memory Models: A Case for Rethinking Parallel Languages and Hardware. It was a great read, and went into the nitty-gritty about where the problems are, the choices we can make, and even provided general direction for the future. If you’ve felt that multi-threaded programming was hard, but couldn’t lay your finger on why, read the article. If you want to understand how some of your current languages really work, and the trade-offs they made–or didn’t make… I’m looking at you C and C++–to deal with parallelism and concurrency, read the article. This stuff is really near and dear to my heart because I see the results of having no memory model. I’ve painfully debugged numerous threading-related issues, and know how the hardware and compiler can work against you in this context.
Over the past several years, I’ve slowly been learning the tools of the language trade. Partly because I’ve always been fascinated by languages and compilers, and partly because I’d like to help contribute to a solution to this problem one day. I think parallelism and concurrency are both to hard to think about with our current tools, and we need better support for doing the things programmers need to do every day. Computing has come a long way, and to a youngish person like myself, often feels as old as math. But when you get down to it, computer science is still extremely young. It really shows when you start talking about dealing with parallelism. We’ve only begun to explore the possibilities. It’ll be amazing to see how this field changes in the next 20 years.
While your on CACM’s website, check out An Interview With Edsger W. Dijkstra, one of the greatest influences on computer science. And take a look at The Singularity System, an article on Microsoft’s Singularity project. Singularity is one of the more interesting projects I’ve seen when it comes to advancing operating systems.