Most of these library developers share common assumptions
about how their libraries will be used.
The application programmer is an amateur programmer
who is more interested in obtaining a result than writing code
that another programmer can easily read, understand and maintain.
The application program is disposable so portability is not important.
The application programmer is the only user and will be able
to detect and fix any programming errors after the application
has been placed into service so no other testing is required.
Efficiency and performance are less important than and may be
sacrificed for convenience, friendliness and familiar notation.
Certainly, amateur programmers are important and perhaps
object oriented numerical class library standards should support them
but I believe that it is more important to support professional
application programmers. Professional programmers must have a standard
which permits them to write applications which other people can use.
In general, these people will not be programmers or have access
to source code so they wouldn't be able to do anything
about programming errors even if they could detect them.
This means that the programmer must be able to thoroughly test
the application and eliminate all programming errors
before the application is placed into service.
The standard should support portable applications
designed to endure for a decade or more.
This usually means that other programmers besides the original author
must be able to read, understand and maintain the application source code.
C++ numerical class libraries should be designed so that
most programming errors can be detected at compile-time
and any remaining errors can be detected at run-time
by compiling or linking in optional error checking code.
This strategy maximizes reliability
while minimizing the cost of testing.
Bob Tisdale <edwin2@gte.net>