Our project work started in September 1997. The first three months of the project were dedicated to the design of the interpretation mechanism: the lazy narrowing calculus developed by Prof. Ida was extended towards parallelism and constraint solving for which it was corresponingly equipped it with a type system. In September and October, Prof. Buchberger and Mircea Marin from RISC-Linz spent six weeks with the group of Prof. Ida at the University of Tsukuba to elaborate the details in cooperation.
The next tree months of the project (till the end of February 1998) were dedicated to specifying the extended calculus and to implementing the extensions in the functional logic language interpreter. The resulting language and calculus are documented in detail in Appendix A.
The implementation work included the development of an interface to external constraint solvers and the introduction of the following processes running external to the interpreter (see Figure 1):
Figure 1: The Distributed Language Environment
For the time being, both the scheduler and the sample solver are implemented as separate Mathematica processes communicating via the MathLink protocol (but still running within one machine in a pseudo-parallel fashion). The scheduler asynchronously collects systems of constraints generated during the execution of the interpreter and forwards them to the constraint solvers. The simplified solutions are collected and transferred back to the interpreter.
There may be different kinds of external solvers for different classes of constraints or for different methods of solving a class of constraints. The scheduler classifies the constraints and partitions them into appropriate sets that it forwards to corresponding solvers. Furthermore, if the CFLP program contains explicit parallelization annotations, the interpreter generates constraint sets that the scheduler forwards to the external solvers for concurrent solution. Currently, the interpreter supports OR-parallel annotations for the concurrent investigation of multiple alternatives.
The prototype implementation of these components in Mathematica has saved considerable development time for setting up the core skeleton of the system; however it already allows interesting experiments with the dynamic behavior of programs under various execution strategies.