$title=' The Basic Problems'; include_once "../../prlheader.php"; ?>
While some systems try to serve as comprehensive platforms for mathematical computation, they have not been sufficiently flexible to be satisfactory. In particular, no tool has a sufficiently expandable type system to deal with foreign mathematical objects. Those tools that have some provision for collaboration with other tools expect to be the master of the environment, not an equal with other tools. Finally, the semantics of the tools themselves is not specified precisely enough to support automated inter-operation.
However, many aspects of creating mathematical software are not well captured by subroutine libraries. An example arises when coding iterative solvers for sparse matrices. An iterative solver typically requires some information about the underlying matrix A, such as matrix-vector products of the form Ax or , or information about the diagonal entries of A (to construct a preconditioner). There are many different such iterative solvers [7], and there are also many different formats for representing sparse matrices [42]. It is difficult to code an efficient, modular iterative linear equation solving routine in Fortran or C that encapsulates the sparse matrix representation separately from the iterative method itself. Nonetheless, this type of modularization is very desirable to preserve the generality of the Fortran or C program. This encapsulation problem is exacerbated when working with parallel computers. It would be better to develop a transformation that starts from a separate specification of the iterative method and a specification of the sparse matrix representation and produces Fortran or C code.
We expect a dramatic increase in software productivity when scientists and engineers generate Fortran or C code for sequential and parallel computers by taking advantage of both libraries of subroutines and libraries of high level mathematical program transformations. The transformational approach allows preservation of encapsulation and allows generality as the program is developed.
The resolution of these problems, coupled with the rapid technological advances in computer hardware, communications and software will allow us to create a truly collaborative environment---one in which both people and software tools can work together.
It is partially through these experiences that we have come to recognize the three main problems discussed above. The following sections describe occurrences of these problems more concretely.