Deterministic Parallel Java
Ensuring that Java programmers aren't left out in the cold, parallel programming wise, computer scientists have developed Deterministic Parallel Java, a parallel programming language that guarantees deterministic semantics without run-time checks for general-purpose, object-oriented programs.
Researchers at the Universal Parallel Computing Research Center at the University of Illinois claim that Deterministic Parallel Java (DPJ) is the first language to use compile-time type checking for parallel operations on arrays of references ("pointers") to objects, and the first language to use regions and effects for flexible, nested data structures. On top of this, they claims that DPJ is the first language to guarantee deterministic use of object-oriented parallel frameworks, and the first language to allow safe mixing of deterministic and non-deterministic code.
DPJ is intended to simplify debugging and testing of parallel software as all potential data races are caught at compile-time. Because DPJ programs have obvious sequential semantics, all debugging and testing of DPJ code can happen essentially like that for sequential programs. Maintenance becomes easier as DPJ encodes the programmer's knowledge of parallel data sharing patterns in DPJ annotations — simplifying the tasks of understanding, modifying, and extending parallel DPJ software. Moreover, thanks to the same program annotations, each function or class can be understood and parallelized in a modular fashion, without knowing internal parallelism or synchronization details of other functions or classes.
The ultimate goal of professor Vikram Adve and Ph.D. student Robert Bocchino is to make parallel programming easier, which is why they set out to provide deterministic-by-default semantics for an object-oriented, imperative parallel language, using primarily compile-time checking. What they ended up with is a safe and modular parallel language that helps developers port (parts of) sequential Java applications to run on multicore systems. It also helps them rewrite (parts of) parallel Java applications to simplify debugging, testing, and long-term maintenance. DPJ-ported parallel code can coexist with ordinary Java code within the same application, so that programs can be incrementally ported to DPJ.
Moreover, Adve is working with Intel to define a similar set of extensions to C++ (DPC++), which can be used to check similar properties for existing programming models such as Cilk, OpenMP, and Threading Building Blocks (TBB).