$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.