Modularity in this context can be captured in a natural way via the notion of compositionality. This property brings a strong advantage for the programmer. The capacity to combine parts of code, where the average-time is simply the sum of the times of the parts, is a very helpful advantage in static analysis, something which is not available in current languages, and moreover brings the possibility of re-use of code.
Compositionality for average-case is however subtle and onemayeasily be tempted to conclude that the average-case summation property “comes for free”. For genuine compositional reasoning one needs to be able to track data and their distribution throughout computations; a non-trivial problem. Indeed, the lack of an ef- ficient method to track distributions affected all prior static average-case analysis approaches. The core ideas presented in the monograph enable the finitary representation and tracking of the distribution of data states throughout computations. This in turn enables one to unlock the potential of compositional reasoning and in particular supports the design of the programming language MOQA. A key feature of this language is that the average-case time complexity is “Linearly-Compositional” for MOQAprograms. In other words, the average-case time of MOQA-programs can be expressed as linear combinations of the average-case time of their basic components [Sch09]. This considerably simplifies the average-case time analysis of MOQA-programs and opens the way for (semi-)automation via modular timing. The visual aspect of the distribution representation in this approach has a pedagogical advantage, providing students with useful insights in the nature of algorithms and their analysis.
Before proceeding with a general overview of the language, we clarify some fundamental issues which have motivated its development.
KeywordsPartial Order Selection Phase Random Structure Denotational Semantic Primitive Operation
Unable to display preview. Download preview PDF.