The roots of A++ lie back many years however, when I discovered Scheme which was in 1995 or to be more precise a little bit after when I read the book `Scheme and the Art of Programming' by George Springer and Daniel P. Friedmann [SF93]. It was not this book that inspired me to launch the ARS or A++ project a couple of years later, it were a few statements by Guy L. Steele Jr., one of the creators of the Scheme programming language, which he made in the foreword of that book.
Describing the origin of Scheme he gives homage to the Lambda Calculus, invented by Alonzo Church in the late 1930's. He talks about the importance of the principle of abstraction and makes the following statement in this context on page XV:
Following these words which have been quoted here, Guy L. Steele describes the three basic operations of the lambda calculus. He continues to describe the ingenuity of the lambda calculus coming up with another remarkable statement:
There was one thing however, which bothered me: The definition of `abstraction' as `give something a name' and the operation of abstraction in the lambda calculus do not match, at least according to my understanding. The operation of abstraction in the lambda calculus does not include a `name giving' feature. Lambda abstractions in the lambda calculus are `per se' anonymous. They are assigned a name only indirectly if they are passed as arguments to another lambda abstraction in the synthesis operation.
I am grateful to Guy L. Steele for letting me discover the beauty of ARS, which he describes in the mentioned text, in which he also outlines the origin of Scheme. Scheme is a programming language which has inherited a lot of the beauty and power of the lambda calculus that Guy L. Steele is talking about.
Glenn L. Vanderburg has used the following words to describe Scheme in his advanced text book about Java [VaA96] on page 593:
Now there is another thing that bothered me though: it has to do with how Scheme is defined in the official document, the R5RS-Report [KCe98]. The formal syntax definition starting on page 38 in that document does not show at all the three basic operations of the lambda calculus to be the root or the core of the scheme programming language.
The fascination of ARS, shared with Guy L. Steele, and the two things that bothered me led finally to the development of A++ and even ARS++. ARS++ extends A++ into Scheme and beyond without giving up ARS as root and core of the language, showing up `unadulterated' in its definition.
Scheme is small, A++ is even smaller. It was a challenge for me to see how far one could go just using ARS, without creating a programming language with all kinds of whistles and bells definitely tempting a student in the process of being initiated to programming to focus his or her attention on things that are not essential to programming at all.
To develop A++ and extending it to ARS++ and to define an interface to C, C++ and Java called ARSAPI, was a great adventure and learning experience for me,which I would like to share with many other people being engaged in teaching or studying the art of programming. This book covers the first part. All parts together are presented in `Programmierung pur' (`Undiluted Programming').
Georg P. Loczewski 2004-03-05
|Printed version of book typeset in LaTeX can be ordered now!!|