The four “R”s of programming language design

Because I have some serious work to do for an impending deadline I have become particularly good at inventing ways to not work that I can convince myself are “worthwhile”. To this end I have decided to post on my (dead) blog, which I am planning to revive with at least monthly posts.

Last year the Cambridge Computer Lab started an informal lecture course taught by PhD students aimed at final year undergraduates and MPhil students with the rough aim of providing lecturing experience to PhD students, and for disseminating more ideas from research to undergrads/MPhils/each other. In my group, the CPRG (Cambridge Programming Research Group), part of the bigger PLS (Programming, Logic, and Semantics Group), four of us decided to do a mini-series about aspects of programming language design. The slides/notes from our lectures can be found here on the dates of May 10th, 11th, 14th, and 24th.

To bind the mini-series together we prepared an informal, general summary of the ideas contained within which concludes with the summary:

The development of programming languages, and abstraction away from
machine code, has greatly aided software development. Programming lan-
guages are a conduit between man and machine, with much of programming
language research aiming to improve this interaction and to help us better
express our ideas. We can attempt to improve languages for ease of reading,
ease of writing, and ease of reasoning, and improve our evaluation systems
to use less resources (whether it be processor time, memory, power, etc.)
whilst still providing a predictable system. Such facets of programming
language design are often non-orthogonal, thus a language designer must
trade-off certain improvements for others. Often, a motivating application
domain or purpose can help distill which features of a language are most
important. This lecture series should give some food for thought in various
areas of general programming and programming language design.

From which I offered the following general slogan:

The four “R”s that programming language design must improve of programs: reading, ‘riting, reasoning, and running.

A bit of a generalisation perhaps, but hopefully a useful “elevator-pitch” slogan to get more people thinking about programming language design, and with a bit of humour (see The three Rs).