1. 1
  1. 1

    This book blew my mind when I got it out from my university library in 1982.

    Forty years ago.

    The kids today think 1982 is programming language pre-history. It’s before Turbo Pascal 1.0. Before Unix became widespread (that didn’t happen until Linux). Before C spread from Unix to other OSes. Before C++.

    No. There was a LOT happened even before 1970.

    1. 1

      I recommend directly using the PDF (56.3 MB), which has crisp text, bookmarks to navigate chapters, and a searchable layer (via OCR).

      Some points of interest:

      The author, Jean E. Sammet, created FORMAC (VII.3), and was instrumental in COBOL (V.3). The discussions up front (Chapters I, II, and III) about important characteristics of languages, technical through political, are still largely relevant, and give structure to the specific language treatments.

      I learned a new old term, “SIFTing” (II.4.2 pg 42): “The term sift became used fairly generally to refer to the partial translation of one higher level language to another one which is fairly similar. This normally means the automatic conversion of equivalent language elements and flagging the others for manual conversion.” Perhaps like Python 2to3, but it also seems to extend across more distantly-related languages.

      You could do a lot with sufficiently powerful teleprinters: The Klerer-May System (IV.7.5) let the user form 2D mathematical expressions as input, forming e.g. summations by making a sigma with special line drawing characters, typing the surrounding bounds in any order. It recognized overtyping for special symbols like / over = for ≠. A few languages had the user type in two colors with syntactic effect: COLASL (IV.7.2) used red for comments, MADCAP (IV.7.3) had red parentheses to delimit bit patterns, and red arithmetic symbols (+, -, x, etc) for the similar set operations, Klerer-May also used red to distinguish superscript indexes from exponents.

      Lots of interesting systems (to my taste) in Chapter VI (String and List Processing Languages) and Chapter IX (Specialized Languages).

      1. 2

        Many of the languages described here do not restrict themselves to what we would today consider a conventional text file syntax.

        Algol has bold face key words such as if, then, else, which are syntactically distinct from identifiers written without bold face, such as if, then, else. Arithmetic and relational operators use standard mathematical symbols like + − × ÷ ≠ ≤ etc. Decimal numerals in scientific notation use a subscript ‘10’ before the exponent: 2.997928₁₀8. Algol was designed as a language for people, as a way to represent algorithms in typeset computer science journals. It was also intended to be implemented on computers, but finding a way to represent the typesetting-oriented program syntax as a text file was left as an implementation detail, to be documented by each Algol compiler.

        APL was designed as a written notation for human mathematicians before being implemented as a programming language. It has a large number of novel mathematical symbols that were not present in any 1960’s character encoding before APL was first implemented.

        1. 2

          The book discussed these, using the Algol terminology, as reference, publication, and hardware languages (sections I.6.9-11), and considers programming languages even absent an implementation. There’s an interesting point that until 1966 the ACM Communications “Algorithms” section only allowed Algol, and programs were described as having been “tried on computers and certified as being correct” even though the authors may not have been able to run the published Algol form at all:

          It is interesting to note that in many cases the only practical method of computer checking available was to write a FORTRAN program to correspond to the ALGOL algorithm and check that; this situation occurred (and still does) because relatively few installations in the United States have ALGOL compilers. (pp 176-177)

          1. 2

            Algol is the specific reason we have \ in ASCII! It’s so you can write mathematical and and or

            1. 1

              During the initial development of the C language, there was a proposal to include \/ and /\ as min and max operators. If that had been implemented, then probably all the popular languages we use today would have those operators.