1. 19
  1.  

  2. 3

    I’m not familiar with what went wrong with Algol 60, but the lesson of implement first and specify second is interesting. Well, perhaps not that extreme, but any number of specifications would have benefitted from somebody asking how in the world it would get implemented.

    1. 2

      Another approach was Lisp: start with a minimal set of building blocks (i.e. atoms), means of combination (i.e. lists) and means of abstraction (e.g. procedures), all resting on a well-known logic system (λ-calculus). The rest is history.

    2. 1

      I personally loved Ritchie’s dissertation on how these somewhat forgotten languages -Bliss and BCPL were totally unknown to me- implemented and named some techniques used in modern programming languages, namely: macros, goto-less programming, multi-phase optimizing compilers, etc.

      Of course, programming language designers also learned from past mistakes: non-portable compilers, excessive constraints for the sake of safety (think Pascal’s fixed-sized arrays), etc.

      TIL lvalues were dubbed by BCPL, whereas Algol 68 coined dereference (to all Java developers out there).