Monday, July 18, 2005

Pure research needs an abstract programming language

A quick scan of our history reveals that mathematical discoveries of each era reflects our scientific achievements starting from that point on. Our scientific advancements begin with vague abstractions of our understanding of a particular realm of nature. The relatively crude mathematics of the time begins its evolution in response to the demands of the new abstractions. We hardly make any progress until mathematicians catch up, so that we can model our vague abstractions and refine them.

Looking at the short history of software development, we clearly see the positive effects of a few languages. However, mathematics is controlled by mathematicians, whereas languages are controlled by CEOs!

The problems of software development are not of mathematical nature. The medium for research and finding solutions for problems of software development is a scientifically controlled extensible abstract programming language.

Once a reasonable abstract language has established itself, researchers can investigate better ways of solving the problems of software development. Their solutions will be in the form of further abstractions that monotonically increase the expressiveness of the abstract language. This effect is analogous to the way mathematics grows in response to the demands from science and engineering.

Where should we start for a reasonable abstract language? Considering the impact that C++ has had we can safely assume that C++ will persist. There will be corrections and extensions to C++, but it will not fade away. Therefore, C++ is a good starting point for an abstract language without loss of continuity with the past.

We need the expressiveness of C++ for crafting complex system program. Thus, C++ must be able to make direct calls in to the underlying platform, and its executables must be compiled to the hardware processor for the efficiency needed by system programs. Therefore, our actual starting point is C++ made platform-independent.

A mathematical solution to a problem may use algebraic equations, as well as geometry. In somewhat similar sense, there will be times that an abstract language must link with existing C++ libraries. However, apart from a linkage mechanism with C++, the abstract language must remain pure and free of dependence to any platform.

Z++ is my view of an abstract language. In order to distinguish the two languages I chose Z++ for the platform-free form of C++, in early 1993. As a matter of fact, I made the choice thinking that the programming language Z++ will eventually include some of the interesting ideas from the specification language Z, as it has. However, later the name Z++ was adopted for the object-oriented version of Z. In our context, Z++ is the name of an abstract programming language, not a specification language.

The linkage allowed in the abstract language Z++ is with dynamic C++ libraries for such things as service-oriented architecture. In such cases one is not trying to port the services, only to expose them to the outside world.

Z++ is freely available from ZH Micro.

Labels: , , , , ,