Like in Funnel, there is an m:n-relation between function symbols and function bodies (think of an overloaded Java method as one function symbol with multiple function bodies). Function symbols are first-class values, and the main mechanism of handling concurrency is that a function body can only be executed when all its associated function symbols have been called.
Please have a look at the Dining Philosophers example for a more hands-on explanation.
The Vodka language, however, departs from the Join Calculus heritage, as function bodies need not be defined together with their related function symbols. In addition, the appropriate function body for a given list of actual parameters is selected dynamically by a best-match strategy respecting all the arguments. Combined with subtyping, this leads to a multimethod approach to object-orientation like in Dylan or Nice, where methods and classes can be defined separately, making it easy to extend existing classes with new behavior.
With a future version of the Vodka runtime, distributed systems might be realized by sending proxies of function symbols to a distant site. Calling a proxy symbol would send the arguments over the network and execute the function body at its home site, while setting up a function body on proxy symbols (whose originals reside on the same remote site - otherwise it is an error) would transfer the code there.
More in-depth information can be found on the Docs/Publications page.
The Vodka language has been developed as a thesis project at University of Lübeck, Germany, since mid-2006. As the examples show, development has now reached a state where enough of the intended features have been implemented to make the language actually usable. It is our hope that, by going Open Source, other people too will find it an interesting toy.
We are very interested in what you think about this project, so please feel free to post your comments, suggestions or whatever opinions to the Vodka discussion group at email@example.com.