June 19, 2007

ParenScript gets its own c-l.net project page, maintainer

For those that don't know, ParenScript is a compiler that takes a Lisp-like language and translates it to readable, efficient Javascript. It is a surprisingly powerful tool, considering that ParenScript doesn't really do much more than provide an S-expression syntax for Javascript (and HTML and CSS generation, although I use different tools for that). Anyway, I think ParenScript (combined with Hunchentoot) is one of the best tools out there right now for developing standards-compliant rich Internet applications. So it was unfortunate that as of a couple of weeks ago, ParenScript was without an active maintainer or its own resources (mailing list, repository, etc.). I've decided to step in as a maintainer and put up a project page for ParenScript on common-lisp.net. It is now less than a week old, but already there have been code contributions from new developers, which is certainly encouraging. Daniel Gackle and me are using ParenScript to develop the UI for our startup product, Skysheet (more on that in upcoming posts), so I get to "eat my own dog food", which was a big motivation for me to step in.

June 10, 2007

Sunday afternoon reading.

Dan Creswell recently put up a "reading list" of recommended articles and papers on distributed system, which you can find here. Some interesting stuff there. The articles about the architecture of MySpace is what finally convinced me to get rid of my MySpace account.

June 3, 2007

How to write parallel programs

I recently finished reading through Nicholas Carriero and David Gelernter's How to write parallel programs (available free online), a hidden gem on parallel computing published in 1990. Most books about distributed and/or parallel computing that I've come across are banal junk (no, no one needs another book about MPI) - How to write parallel programs contrasts sharply.

I suspect a major reason why parallel programming is considered difficult today is that most people don't have any conceptual feel for the space of possible parallel problem-solving approaches. Most educational material presents a fragmented view of models and paradigms; the vast majority of books focus on a single system or approach. The majority of programmers, not having delved into the breadth of the parallel computing literature, simply are not aware that there exist alternatives that may make their parallel problem-solving tasks much easier.

In light of this, the key insight of How to write parallel programs is distilling parallel programming into three distinct, conceptual paradigms for coordination in parallel problem-solving. It may come as a surprise (I promise I won't provide any more spoilers) that DCOM, CORBA, RMI or any other object-oriented "remote method call" junk is not one of them. Which brings me to a tangent where I rant about the whole idea of "remote method invocation" being beyond stupid by managing to get both message-passing in object-oriented programming and the basic assumptions about distributed systems completely wrong. More people should listen to Deutsch and Kay.

How to write parallel programs is intended to be a textbook, and that means algorithm analysis, which frequently leads to surprisingly practical insights about distributed systems, such as load-balancing considerations, dealing with IO bottlenecks, and even using time complexity analysis to (inadvertently) find faulty nodes. Examples are written in C-Linda (an implementation of Gelernter's tuplespaces). Following the arguments and doing the exercises is well worth the time.

I'm going to end this post with a request for help from the readers: I am trying to track down a copy of a paper referenced in the book: R. Abarbanel and A. Janin. Distributed object management with Linda. Research report, Apple Computer, Cupertino, CA, September 1989. If someone has a copy or can obtain one (any old-school Apple employees reading this?), please get in touch.