In parallel programming there are two conflicting goals: offering a
high-level of abstraction to the programmer (typical of declarative
programming) and providing enough information to an optimizing
compiler. At a linguistic level "skeletons" have been proposed as a
reasonable compromise between these conflicting goals.
While correctness of parallel programs can be addressed using directly
the models and techniques available for declarative programs (since in
both cases specifications are simply input-output relations because of
lack of "interaction"), the more refined analysis involved in
optimizing compilers would benefit from the descriptive models
proposed for concurrent systems.
In this talk we describe a way of refining a naive set-theoretic
semantics to highlight the availability of static information (which
makes partial evaluation possible) and the potential for parallel
execution (which is important to compare the efficiency of different
algorithms). The proposed semantics combines two general ideas:
- shapely functors (see [CockettJay94]), which provide semantics
for an interesting class of datatypes;
- action categories as proposed in [BarberGardnerHasegawaPlotkin97]),
which provides semantics for Milner's action calculi.
|