An important area of interest to which Computational Science must address itself is that of programming languages. The situation is analogous to that in mathematics where notations are constantly being invented and improved. There has never been one mathematical notation or computer language which suits all tastes and needs, and it is unreasonable to expect that there ever will be. That does not mean that development of further languages is useless. Indeed better languages must be developed continuously in order to achieve greater clarity and levels of abstraction.
The notations that are used in the current general purpose programming languages are a balance between descriptive power and what the machines can effectively support. The descriptive power is borrowed from mathematics in general. However, mathematical notations tend to suffer from the fact that they are expensive to implement on Von Neumann architectures. On the other hand, using a present day programming language involves ignoring most of the mathematical notions of correctness. Therefore the success of a general purpose language involves the question of how cheaply in machine terms can this descriptive power be bought. This is always at the back of the designer's mind, and how much emphasis is placed on each aspect determines the flavour of the language.
Simplicity is the cornerstone of programming language design. The addition of new features without integrating them into an overall framework merely increases the complexity of the system. This complexity often overloads the programmer beyond his or her capability. In contrast, a simple language allows the programmer to concentrate on the inherent problems of the task and not on the mapping between the solution and the programming vehicle. This view was epitomised by van Wijngarden [WMP+69] who states:
- In order that a language be powerful and elegant it should not contain many concepts.
This message is restated by van Wijngarden as:
- Power through simplicity, simplicity though generality
He argues that languages are too complex and that complexity is due, at least in part, to languages being too restrictive. Underlying this research area are three language design principles attributed to Landin [Lan66], Strachey [Str67], Tennant [Ten77] and Morris [Mor73]:
- The Principle of Correspondence: the use of names should be consistent within a system. In particular there should be a one to one correspondence between the method of introducing names in declarations and parameter lists.
- The Principle of Abstraction: all major syntactic categories should have abstractions defined over them. For example, functions are abstractions over expressions.
- The Principle of Data Type Completeness: all data types should be first class without arbitrary restriction on their use.
The power is derived from the generality of these three principles, the simplicity from the lack of deviation from them. This research involves designing and implementing simple and powerful persistent languages. The principal languages that have been implemented are PS-algol and Napier88.
- [Lan66] The Next 700 Programming Languages Landin, P.J. Communications of the ACM 9, 3 (1966) pp 157-403.
- [Mor73] Protection in Programming Languages Morris, J.H. Communications of the ACM 16, 1 (1973) pp 15-21.
- [Str67] Fundamental Concepts in Programming Languages Strachey, C. Oxford University Press, Oxford (1967).
- [Ten77] Language Design Methods Based on Semantic Principles Tennant, R.D. Acta Informatica 8 (1977) pp 97-112.
- [WMP+69] Report on the Algorithmic Language ALGOL 68 van Wijngaarden, A., Mailloux, B.J., Peck, J.E.L. & Koster, C.H.A. Numerische Mathematik 14 (1969) pp 79-218.
- Source: On the Development of Algol, On the Construction of Persistent Programming Environments.
- Search for 'language' in School publication list.