The other day on hackernews, this video was posted of Imperial college’s Bob Spence demonstrating the APL computer language. Some of what is being shown is all too familiar, though the analogue nature of the computer interaction is decidedly steampunk.
Despite the steampunkiness of interaction, what we are looking at here is very much a modern Read Evaluate Print Loop (or REPL). The REPL idea was not new even in 1975, having originated in John Macarthy’s work on LISP in the 60s, discussed by Paul Graham in his roots of LISP article. You type expressions, the computer evaluates and prints the result. This is the trick that all modern shells use. And of course a decent REPL is the cornerstone of many modern langauges — I particularly like the Haskell REPL. You can even run REPLs for various languages in your browser.
APL was clearly a powerful language, though its popularity has been on the wane since the eighties. Perhaps that’s because of the need for the programmer to use a special APL keyboard like the one below (image from rursus/wikipedia used under CC licence) to type non-ASCII characters into her terminal. Also likely to have hindered adoption is the fact that APL didn’t have much of a migration path from mainframe to PC until quite late on.
There are some nice features in APL, not least its native support for vectors and matrices, and doing maths on those objects directly. This has clearly been an influence on languages targetted at statistical uses ike R, though mainstream languages have never really implemented anything similar. Paul Abraham’s paper An APL machine describes how you can implement lazy evaluation (that is delaying computations until they are stricty required) in APL. Which is pretty cool too.
If you would like to follow along with Bob’s moves, you can head over to the browser based APL REPL.