The two major trends in computer science throughout the last decades have been the increase in the size of the applications and their components, and the computational power available to execute the program, both of which reinforce the other.
In the 50's, computers were first programmed bit by bit, and later instruction by instruction. In both cases, the programmer had to be very familiar with the internal workings of the machine, and the application could not be ported.
In the following decades, this was followed by languages less dependent on the architecture, in which the algorithm was written in a manner more logical and mathematical. This made it easier to move an application to another architecture, provided that the language was the same on both architectures and no architecture-dependent code was included.
At that stage, many programs were relatively large, unwieldy and not
easy to understand or modify
, which is a strong reason why
many of these systems are still in use. Often the desire for efficient
use of resources caused the code to be tuned for that particular
program segment, and that particular computer, until no one, save
(possibly) the programmer, could tell what it was. These applications
were often poorly documented, causing even more problems when a system
was to be replaced.
Languages with subroutines and functions enabled the programmers to build libraries of code which they could use repeatedly. Most of these libraries were used only by the person who created the library, and never made it into public use. In numerical programming, there were of course many opportunities to build libraries that could be widely used. And in the 70's work began on a number of such general libraries, partly in response to the need for such libraries, and partly because vector processing hardware made efficient and general routines possible.
The most known such libraries are LINPACK, EISPACK and the first level of BLAS [], which were published in the 70's. Later, BLAS 2 [], BLAS 3 [], and LAPACK [] which were developed in the middle 80's and the early 90's, have replaced LINPACK and EISPACK in linear algebra programming. BLAS and LAPACK are widely in use today, and are considered industry standards. In the last couple of years parallel versions of these libraries, PBLAS [] and ScaLAPACK [], have been developed.
In the late 80's and early 90's, object-oriented development became the new paradigm of choice with the release of the language C++ [, ], an object-oriented language based on C. The object-oriented approach has continued to draw support, although a major problem has been the lack of standardized and widely used libraries. A number of software vendors have released libraries in different areas of computation, including numerical programming, with varying success. The ANSI/ISO C++ standard does include a standard library for general programming, but holds only a very basic numerical library.
The C++ language (and other such languages) made it possible to design applications where operations on data became the center of attention, instead of the operations performed. It also made a more symbolic and mathematical way of computation possible.
In numerical programming, some C++ libraries, both commercial and public domain, have emerged for single processor architectures, although at present none are, to our knowledge, widely used. A C++ extension of BLAS and LAPACK [] has been implemented, and a C++ extension of SCALAPACK has been proposed [, ], but at present no numerical C++ library exists for parallel computers.