OONSTD: to early for standards?

E. Robert Tisdale (edwin@maxwell.hrl.hac.com)
Tue, 30 Jun 1998 15:01:14 -0700 (PDT)

I don't know.
But apparently the Department of Defense is desperate for standards.
A year ago last November, DARPA sponsored a standardization effort
for Vector, Signal and Image Processing (VSIP). They have a web page at

http://www.vsip.org

Standards are required so that portable applications can be written
for high performance platforms instead of re-writing the application
every time they (the armed services) upgrade or change hardware.
The hardware vendors have always provided proprietary software libraries,
compilers and other tools to their customers which tend to "lock-in"
the customer once the customer has invested in the development of applications
which rely upon the vendor's proprietary libraries and tools.
Consequently, some vendors perceive the new standardization effort
as threat to their entrenched position and are resisting it.

The VSIP Forum is supposed to specify a standard API
(Application Programmer's Interface) and language bindings
for ANSI C, C++, etc. but I doubt that there will ever be
a C++ binding or any other binding besides the ANSI C binding.
The problem with C++ is that you don't need an expensive,
proprietary compiler or any other tools to generate high performance code.
An ordinary C++ compiler along with inline expression class definitions
(possibly inline expression class templates) can effect most
of the optimizations provided by the proprietary compilers.

The VSIP Library Standard is Object Oriented. It defines
vector, matrix and tensor "views" of a one-dimensional array of data.
The actual representation of this one-dimensional array is hidden
from the application programmer and cannot be referenced
through an ordinary pointer because part of it may be stored
in special [cache] memory or distributed among several processing nodes.

The ANSI C binding to the VSIP Library demonstrates
that an object oriented approach can be implemented with ANSI C.
But, if you look at some of the coding examples,
I think you will agree with me that it is impractical.
Besides being difficult and dangerous to use,
it is extremely difficult to read, understand and maintain.
I wouldn't use it and I wouldn't expect anyone else to use it either.
You might be able to improve on the proposed ANSI C binding but I doubt
that your refinments will ever approach the elegance of a C++ binding.

I don't want to convert Ada, Fortran or C programmers to C++.
I don't want to prevent programmers from "rolling their own" libraries.
I don't want to impose a standard on anyone.
I don't think we need to wait for the present generation of programmers to die.
It doesn't matter how many old Ada, Fortran and C programmers there are.
All the new programmers are learning C++ and there are already enough
C++ programmers to justify standard C++ libraries.

I want to propose a standard for scalar, vector, matrix and tensor arithmetic
which programmers can use to write portable applications. In particular,
I want to propose a C++ binding which most C++ programmers will find appealing.
It should permit programmers to write reliable, high performance applications
clearly and concisely so that they are easy to read, understand and maintain.
This standard should serve as a basis for digital signal and image processing
and other standard libraries.

Bob Tisdale