by Theo D’Hondt (VUB), titular of the 2010 Francqui Chair,
at the University of Namur (FUNDP), Faculty of Computer Science, Auditorium I2
by Theo D’Hondt (VUB), titular of the 2010 Francqui Chair,
at the University of Namur (FUNDP), Faculty of Computer Science, Auditorium I2
The phrase “Growing a Language” was coined by Guy Steele in his widely recognised keynote talk at the 1998 OOPSLA conference. It refers to the need for programming languages that consist of a powerful and expressive core that is easily extended to satisfy specific needs. In this series of lectures we discuss a similar need at the level of the language processor itself. We need to bridge the gap between the abstract concerns addressed by the language and the features offered by the hardware platform, with all their qualities and limitations. Nevertheless, we want to underline the need for software reuse at this very technical level – a fact which is far too often forgotten.
The notion of Programming Language Engineering was introduced to describe this branch of computer science. It refers to the assembly and mastery of relevant methods and techniques from science and technology to facilitate the construction and application of programming language processors. It is one of the oldest disciplines in computer science and it has never been very far away from the core of research in our field.
The explosive growth in hardware performance, known as Moore’s law, was until very recently responsible for a false sense of security in the world of computing. In particular, many felt that we had reached a stable situation in the use of programming languages. Today we see that computer engineering has been forced to choose the path of replication rather than miniaturisation in order to follow the ever increasing demands for performance. This has led to a renewed interest in parallel computing and the programming language abstractions required by it. This evolution is in full swing in the field of high performance computing but may be expected to extend to the desktop in the very near future.
These lectures are inspired by two concerns. In the first place, they aspire to rekindle interest in programming language research results dating back to more than 20 years ago: and hence outside the time window accessible to young – and not so young – researchers. For instance notions of continuations are re-emerging, but are today far too poorly understood. An immersion in past knowledge rather than a re-invention of the wheel seems indicated. In the second place, these lectures are a critique of the outright extrapolation of current language technology to handle the many-core revolution.
Finally, we eat our own dog food: these lectures will refer to actual programming languages and their related software artefacts; and the end product will be a concrete language processor built according to the precepts advanced during the lectures.