ERCIM News No.36 - January 1999
Programming Language Technologies
by Neil D. Jones
Mankind is the species that uses and makes tools; but it is just as uniquely the species that uses and makes languages. Once computers greatly extended our tools reach, effective power, and degree of automation, it was inevitable that sophisticated control and interaction mechanisms have become indispensable for controlling todays advanced and automatic tools. The language skill enters just here: we are able not only to communicate, but also to design special-purpose command and communication protocols, and to design algorithms that manipulate programs as data objects. Further, it is increasingly routine to use the computer to verify (by symbol manipulation!) that programs achieve their purposes correctly and without failure, deadlock, or issuing unsafe commands to the tools they steer.
The focus of this ERCIM News Special Theme is primarily on the program itself, as an object of study or subject of manipulation; or on a programming language in which programs may be written. Thus this Working Group takes a somewhat different view than other (admittedly closely related) Computer Science activities that also yield programs as outputs, or use programs as tools: Software Engineering, Formal Methods, Human-Computer Interaction, Computer-Supported Cooperative Work etc. The main point is that sometimes programming language can be a tool for solving a class of problems. It thus behooves us better to understand our artificial languages, just as deeper understanding of physical tools assisted the industrial revolution.
The contributions to this issue witness widespread language-related activity within ERCIM. They encompass a wide range including:
- a language as a solution, establishing a framework or viewpoint, or giving users new capabilities
- tools manipulating languages: compilers, interpreters, program analysers, etc
- ways to solve problems involving programs, in particular legacy code and the notorious Year 2000 problem
- semantics: not as an ivory-tower end in itself, but as a crystallisation of the essence of a particular programming language that can be used as a basis for programming environments
- implementation perspectives: what can be done (engineering), limits (pragmatic or theoretical studies of complexity), how to assess program complexity, or to understand programs
- ways to generate programs automatically: essential in the long run, if human bottlenecks are to be overcome.
Invited papers: the first two are from outside ERCIM: the Bandera Project uses abstract interpretation, partial evaluation and model checking to certify Ada program correctness; and the ETI platform allows wide-range experimentation with prototype software tools.
The next group concerns software re-engineering: how to deal with the existing masses of old, undisciplined but indispensable programs? A semantics-based and successful Year 2000 conversion tool is described. Further works describe systematic, serious approaches to dealing with legacy code in general.
After initial disappointments based on unrealistic expectations, steady progress has occurred in automatic program analysis and verification: the topic of the next group of papers, all of which concern validation of programs in real-world rather than academic languages.
Recent years have seen increasing activity in automatic program generation, here witnessed by three papers based respectively on partial evaluation, code skeletons, and program transformation. Here, a good semantic basis has had clear practical consequences. Further, the heavy task of compiler development has been eased by increasingly sophisticated, flexible, modular, and user-friendly high-level tools and languages.
The next group of papers concerns Java and other object-oriented languages. These pragmatically successful languages are becoming better understood in both practice and theory, resulting in more sophisticated tools. The next three papers witness a similar advance in the fields of distributed systems and mobile computing: subjects which are taking clearer form, partly aided by appropriate programming language formalisms.
Finally, there is still scope for new programming languages, and the last group of papers describes several: a now well-established object-oriented version of ML; a graphical environment for parallel programming; and the use of rewrite rules to link practical programming with mathematics as known from algebra.
Neil D. Jones - DIKU/DANIT
Programming Language Technologies Working Group chairman
Tel: +45 35 32 14 10