Abstract: Writing correct and efficient concurrent programs still
remains a challenge. Explicit concurrency is difficult,
error prone, and creates code which is hard to maintain
and debug. This type of concurrency also treats modular
program design and concurrency as separate goals, where
modularity often suffers.
To solve these problems, we are designing a new language
that we call Panini. In this paper, we focus on Panini's
asynchronous, typed events, which reconcile the modularity
goal promoted by the implicit invocation design style
with the concurrency goal of exposing potential concurrency
between the execution of subjects and observers.
Since modularity is improved and concurrency is implicit
in Panini, programs are easier to reason about and maintain.
Furthermore, races and deadlocks are avoided entirely,
yielding programs with a guaranteed sequential semantics.
To evaluate our language design and implementation we show
several examples of its usage as well as an empirical study
of program performance.
We found that not only is developing and understanding
Panini programs significantly easier compared to standard
concurrent object-oriented programs, but performance of
Panini programs is also comparable to their equivalent
hand-tuned versions written using Java's fork-join framework.