There's a fairly well-known paper by Hans Boehm about the problems of implementing concurrency features as a library: http://portal.acm.org/citation.cfm?doid=1065010.1065042
He's writing from a shared-memory perspective, but his points are equally valid for message-passing approaches, if we want to be able to execute our programs in parallel.
I think it's likely that over the next few years we'll see languages being developed that have sufficiently powerful type systems to allow the safety properties of a concurrent program to be statically verified. We're not there yet, though. I'm thinking here of languages like Agda that blur the distinction between conventional and type-level programming, which mean that the kinds of static checks we currently build into our compilers can instead be expressed in the language itself. As we've seen with Haskell, the challenge isn't so much expressing the checks as producing useful error messages when they fail...
Go is great in terms of marketing, but I think it's actually a step back from what previous languages in the same family (Newsqueak, Alef, Limbo) offered, in terms of concurrency features, and it's a shame that the designers didn't include any of the more recent innovations in other CSP/pi-calculus-derived languages. There's some discussion of this in my thesis: http://offog.org/publications/ats-thesis.pdf
Thank you, Adam! Boehm's paper "Threads Cannot be Implemented as a Library" (2004) and slides are available on HP's repository: http://www.hpl.hp.com/techreports/2004/HPL-2004-209.html http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/pldi05_threads.pdf
..however, those papers seem to point to C++0x as _the_ _alternative_ (http://en.wikipedia.org/wiki/C++0x). The working draft of Nov10 is almost 1400 pages, and 60 pages cover atomic operations and the thread support _library_. Food for my next post?
There's a fairly well-known paper by Hans Boehm about the problems of implementing concurrency features as a library: http://portal.acm.org/citation.cfm?doid=1065010.1065042
ReplyDeleteHe's writing from a shared-memory perspective, but his points are equally valid for message-passing approaches, if we want to be able to execute our programs in parallel.
I think it's likely that over the next few years we'll see languages being developed that have sufficiently powerful type systems to allow the safety properties of a concurrent program to be statically verified. We're not there yet, though. I'm thinking here of languages like Agda that blur the distinction between conventional and type-level programming, which mean that the kinds of static checks we currently build into our compilers can instead be expressed in the language itself. As we've seen with Haskell, the challenge isn't so much expressing the checks as producing useful error messages when they fail...
Go is great in terms of marketing, but I think it's actually a step back from what previous languages in the same family (Newsqueak, Alef, Limbo) offered, in terms of concurrency features, and it's a shame that the designers didn't include any of the more recent innovations in other CSP/pi-calculus-derived languages. There's some discussion of this in my thesis: http://offog.org/publications/ats-thesis.pdf
Thank you, Adam! Boehm's paper "Threads Cannot be Implemented as a Library" (2004) and slides are available on HP's repository: http://www.hpl.hp.com/techreports/2004/HPL-2004-209.html http://www.hpl.hp.com/personal/Hans_Boehm/misc_slides/pldi05_threads.pdf
ReplyDelete..however, those papers seem to point to C++0x as _the_ _alternative_ (http://en.wikipedia.org/wiki/C++0x). The working draft of Nov10 is almost 1400 pages, and 60 pages cover atomic operations and the thread support _library_. Food for my next post?