All modern computers, from smart phones to supercomputers, have multiple processing units. Since writing programs that effectively use these resources is notoriously difficult, many programming languages, displaying a wide variety of linguistic abstractions, have been created. The "right" set of abstractions depends on many factors, ranging from the nature of the application at hand, the sophistication of the programmer, and the degree of performance desired and effort required to achieve it. For this research, the intellectual merits are in the creation of tools and language specifications that support an ecosystem of parallel programming language abstractions. These are to be developed by independent parties and safely and automatically imported into a programmer's compiler so that programmers can pick and choose the language features that they feel best meet their needs. The project's broader significance and importance are in a transformative methodology and supporting tools for writing parallel programs, one which dramatically simplifies the development of new parallel programming and domain-specific language features because it allows researchers to focus their efforts on the design and implementation of new abstractions. By making it easier for programmers to use and experiment with new features, distributed as composeable language extensions, they can write performant and correct parallel programs with less effort.
The proposed approach will use a specification of the C programming language based on context free grammars (for specifying concrete syntax) and attribute grammars (for specifying semantic analysis, optimization, and code generation). This defines the host language into which parallel programming language extensions are imported. Language extensions are also specified in these formalisms as they easily compose with the host language and other extensions. Modular analyses of the language extensions ensure that the composition of the programmer's chosen extensions will be successful and result in a working compiler that will not terminate abnormally. Of interest is the degree to which new and existing language abstractions can be realized in this composable approach to language extension.