TL;DR: A simple solution to the Santa Claus problem is presented in Polyphonic C, an extension of C with new concurrency constructs based on the Join calculus.
Abstract: The Santa Claus problem is an interesting exercise in concurrent programming which has been used in a comparison of the concurrency mechanisms of Ada and Java. We present a simple solution to the problem in Polyphonic C , an extension of C with new concurrency constructs based on the Join calculus.
TL;DR: By way of experiments in MC#, a series of parallel programs such as a computation of Fibonacci numbers, walking through binary tree, computation of primes by Eratosthenes sieve, calculation of Mandelbrot set, modeling the Conway’s game “Life”, etc are written.
Abstract: MC# is a programming language for cluster- and GRID-architectures based on asynchronous parallel programming model accepted in Polyphonic C# language (N.Benton, L.Cardelli, C.Fournet; Microsoft Research, Cambridge, UK). Asynchronous methods of Polyphonic C# play two major roles in MC#: 1) as autonomous methods executed on remote machines, and 2) as methods used for delivering messages. The former are identified in MC# as the “movable methods”, and the latter form a special syntactic class with the elements named “channels”. Similar to Polyphonic C#, chords are used for defining the channels and as a synchronization mechanism. The MC# channels are generalised naturally to “bidirectional channels”, which may be used both for sending and receiving messages in the movable methods. The runtime-system of MC# has as the basic operation a copying operation for the object which is scheduled for execution on remote machine. This copy is “dead” after the movable method has finished its work, and all changes of this remote copy are not transferred to the original object. Arguments of the movable method are copied together with an original object, but the passing of bidirectional channels is realised through transferring the proxies for such channels. By way of experiments in MC#, we have written a series of parallel programs such as a computation of Fibonacci numbers, walking through binary tree, computation of primes by Eratosthenes sieve, calculation of Mandelbrot set, modeling the Conway’s game “Life”, etc. In all these cases, we got the easy readable and compact code. Also we have an experimental implementation in which the compiler is written in SML.NET, and the execution of movable methods on remote machines is based on the Reflection library of .NET platform.
TL;DR: A semantic interpreter which implements a dynamic denotational semantics for a small experimental concurrent object-oriented language that is called JoPool, the first paper that reports a compositional semantics for the communication abstractions of join Java and polyphonic C#.
Abstract: In this paper we present a semantic interpreter which implements a dynamic denotational semantics for a small experimental concurrent object-oriented language that we call JoPool. JoPool embodies the modern communication abstractions introduced in the join calculus. It provides the communication primitives of join Java and polyphonic C# together with a generalization of the rendez-vous mechanism that is typical in Ada and POOL. The semantic interpreter is designed with a continuation semantics for distributed computing, introduced by us in previous work. As an implementation tool for the denotational semantics we use C# 3.0 lambda-expressions. As far as we know, this is the first paper that reports a compositional semantics for the communication abstractions of join Java and polyphonic C#.
TL;DR: The paper presents the design rationales and a semantic interpreter for Join Voyager, a language that can be used to program a Peer to Peer network using object oriented techniques and Join methods and is implemented in Haskell.
Abstract: We introduce Join Voyager - a language that can be used to program a Peer to Peer network using object oriented techniques and Join methods. In Join Voyager any object can migrate to any node (peer) of the underlying network. The language provides strong mobility, i.e. the ability to capture and transfer the full execution state of mobile objects at any time. Objects can communicate by sending and receiving messages in object oriented style. As in Join Java or Polyphonic C#, both synchronous and asynchronous messages are supported. The paper presents the design rationales and a semantic interpreter for Join Voyager. The interpreter is designed with continuations following the discipline of denotational semantics and is implemented in Haskell.
TL;DR: AMI as discussed by the authors augments a potentially longrunning synchronous object method with an asynchronous variant that returns immediately, along with additional methods that make it easy to receive notification of completion, or to wait for completion at a later time.
Abstract: In most programming languages a called method is executed synchronously, ie in the thread of execution from which it is invoked If the method needs a long time to completion, eg because it is loading data over the internet, the calling thread is blocked until the method has finished When this is not desired, it is possible to start a "worker thread" and invoke the method from there In most programming environments this requires many lines of code, especially if care is taken to avoid the overhead that may be caused by creating many threads AMI solves this problem in that it augments a potentially longrunning ("synchronous") object method with an "asynchronous" variant that returns immediately, along with additional methods that make it easy to receive notification of completion, or to wait for completion at a later time This paper focuses on asynchronous method invocation in two popular languages Join java and C#