Previous Up Next

9  Related works and conclusion

We are not computer graphics specialists and cannot claim that our work is a contribution to the study of parallel ray tracing. The survey [17] cites the humorous quote that “the more experience the writer of the parallel algorithm has in sequential algorithms, the less parallelism that algorithm is likely to exhibit”. Thus, as novices, we are likely to discover a lot of parallelism.

Rather, our contribution resides in the design and implementation of a concurrent language. Since the pioneering languages of the eighties (e.g. [9]) there have been many such languages. We restrict our attention to recent works that are close to ours as regards design and availability. We directly compare with Cω [3] that extends C with join-definitions. In numerous aspects, the Cω design and development effort is similar to ours. Some differences exist though, most of which reflect the differences in the language extended. For instance, C being an object language, channels appear as methods of the objects that define the join-patterns (called chords). This often leads to a natural and concise style, more than our technique of explicitly bundling channels in records. As to JoCaml, OCaml being a functional language, JoCaml offers pattern-matching of channel arguments, a feature that we use in several occasions here. Another extension inspired by the join-calculus is Join Java [20]. Finally, it is to be noticed that the principles of the join-calculus also inspire recent concurrency libraries: Joins [19] for .net, and Boost.Join [12] for C++. On the one hand such libraries provide an easier approach to the high-level abstractions of the join-calculus than the linguistic approach, both on the psychic (no need to try a new language) and technical level (no need to install a new compiler). On the other hand, they offer less static checks and integrated features, such as convenient syntax.

A recent extension of (standard) ML is Alice [18]. As regards distributed programming, Alice component model allows one program to transmit a module to another in a type-safe manner, and for the receiver to link the received module in a controlled manner. This comes in sharp contrast with our type-less name server, and with our renunciation of code migration. As regards the basic concurrency primitives, Alice relies on explicit threads and support for data-flow synchronization. Scala is a language in its own right, not an extension, which is both object-oriented and functional. Support for concurrency in Scala is library based and using actors as the basic abstraction is encouraged [8]. The language Erlang [2] primarily targets the concurrent and distributed systems of the telecommunications industry. Its model for concurrency is reminiscent of actors, with provisions for fault tolerance; while its functional core language is rather simple. Erlang is being used for industrial developments of important size.

Clearly, there is a steady trend in programming language design: mature implementations are released that offer serious support for concurrency and distribution. The systems we have cited are based upon a variety of models. It certainly does not belong to us to claim that the join-calculus is the best amongst those models. Rather, we hope that our presentation of JoCaml at work demonstrate its elegance and expressive power.

Previous Up Next