I have designed and implemented Paradigm/SP, a language for prototyping and specification of message-passing parallel algorithms.
Paradigm/SP supports the development and the use of generic parallel algorithms referred to as parallel paradigms. A parallel paradigm is a general control structure, such as a master-server network, a pipeline, a cellular automaton, or a divide-and-conquer tree, that is common for a whole class of parallel algorithms. Once an appropriate paradigm has been developed, it can be used to generate parallel solutions for different problems. Because parallel paradigms provide all the coordination and synchronization that are needed for parallelism, their clients must provide problem-specific sequential code. Thus, parallel paradigms are generic algorithms that can be used to instantiate specific parallel applications.
In the Paradigm/SP language, parallel paradigms are represented as extensible modules that encapsulate module-bound classes and methods. Such modules can be extended with sequential domain-specific code in order to derive particular parallel applications. Both classes and methods can be overridden (i.e., redefined) in extended modules.
Paradigm/SP is an enhancement of a high-level parallel programming language developed by P. B. Hansen. The Paradigm/SP language incorporates standard message-parallel means, such as send, receive, for-all, and parallel statements, and channel types. In addition, it offers the new language features of module extension and class overriding. The current version of the language is referred to as Paradigm/SP. The evolution of the language concepts is reflected in several articles that are available online at http://www.chapman.edu/~radenski/publications.html.
I have developed a prototype implementation of the Paradigm/SP language. The prototype implementation consists of (1) a compiler that generates abstract code and (2) a loader and an interpreter for this abstract code. The implementation is an enhancement of the SuperPascal compiler (developed by P. B. Hansen) with separate compilation, class and method overriding, and dynamic loading. The implementation also reuses some algorithms from the Oberon compiler.
The Paradigm/SP compiler incorporates two independent components, the parser and the assembler. The parser performs traditional recursive descent syntax and semantic checks, outputs a symbol file, and generates intermediate code. This intermediate code is then processed by the assembler, which performs optimization and generates an abstract object file. Finally, abstract object files are dynamically loaded and then executed by the interpreter. Manuals and source files of the prototype implementation are available.
Last updated: June 2002.