To honor the life of a great scholar, I decided to go back and read Dijkstra's analysis of the various documents leading to the Ada language.
Ada had a long and mostly public design process, and thus provides an interesting case study. Notable scholars commented on the langugae design (before and after the language design was completed). I'll concentrate on several documents available from the Dijkstra manuscript archive.
The design of a language for the DoD mimicked the design of a software system: a list of requirements was agreed on (more on that later), and then several candidates were evaluated.
Dijsktra reviewed the Strawman and Woodman requirement documents - and he wasn't thrilled. Aside from giving some interesting comments about the process of language design and various language features, Dijsktra commented on the use of English in the requirement documents: For anything non-trivial careful use of language is not a luxury, but a must. The same is, of course, true as regards the use of a programming language when building a software system.
It is beyond my scope to review the detailed comments Dijsktra gave about the green, red, blue and yellow language proposals (the green one was eventually chosen), so I will only give a few comments.
Dijkstra agrees with Niklaus Wirth that a language definition should be complete without a reference to a compiler or computer (i.e., implementation details). He goes beyond that and argues for a language definition independent of any underlying computational model. I hope I understand this correctly when I conclude that a programming language should provide its own computational model, and thus serve as an abstraction mechanism.
This goes hand in hand with Dijsktra's emphasis on the need to recognize the inherent difficulty in programming.
The notion of strong typing is carefully analyzed. When disucssing the theory of type systems it is common to forget just how closely tied typing is to the language definition. What exactly determines the type of an expression? What is a subtype, and how is it different than a new type? Should the language allow anonymous types, and if so how are they to be handled?
Dijkstra writes with ruthless wit and intensity. He keeps on reminding us the "convenient" and "conventional" are not synonyms - something present day language designers should keep in mind.
I found the amount of thought given to each language to be quite remarkable. Dijsktra carefully examined minute language features, and tried to write meaningful programs in each language.
Even though these are not research papers, they show scholarship of the highest caliber, giving attention to detail while not losing sight of the big picture.
Posted to history by Ehud Lamm on 8/8/02; 7:19:25 AM