The memory models that underlie programming languages (2016)
The memory models that underlie programming languages. Three of them derive from the three most historically important programming languages of the 1950s - COBOL, LISP, and FORTRAN - and the other three derive from the three historically important data storage systems: magnetic tape, Unix-style hierarchical filesystems, and relational databases. These models shape what our programming languages can or cannot do at a much deeper layer than mere syntax or even type systems. Every modern programming environment handles all six of these memory models to some extent, which is one reason our systems are so complicated and hard to understand. What would a programming language memory model based entirely on pipes look like? You would have operations to read data items from pipes and write them. This might seem like an irrelevant diversion from real programming languages like Lisp, FORTRAN, and C, since SQL as a programming language is more of a curiosity than a practical utility. Essentials of Programming Languages proposes to analyze programming languages first according to what types of values that variables can denote and what types expressions may evaluate to, which is a great deal more informative than merely analyzing syntax, but I feel that it mostly glosses over this deeper layer.