BRIEF CODE(ID:2671/sho003)

Pseudocode interpreter  


John Mauchly, 1949.

Pseudocode interpreter for math problems, on Eckert and Mauchly's BINAC, later on UNIVAC I and II. Possibly the first attempt at a higher level language

According to some, predates von Neumann's work.


People: Hardware:
Related languages
ENIAC short code => BRIEF CODE   Influence
BRIEF CODE => SHORT CODE   Port

References:
  • Sammet, Jean E. "Computer Languages - Principles and History" Englewood Cliffs, N.J. Prentice-Hall 1969. p.129. view details
  • Stern, N. "From ENIAC to UNIVAC: A Case Study of Evolving Technology" Bedford, MA, Digital Press. view details
  • Schmitt, William F. "UNIVAC Short Code" view details Abstract: The UNIVAC SHORT CODE, the first example of a high level programming language actually intended to be used with an electronic computer was proposed by John W. Mauchly in July 1949. SHORT CODE was implemented as an interpreter by W.F. Schmitt and was first run on UNIVAC I Serial 1 in 1950. A revised version prepared in 1952 by A.B. Tonik and J.R. Logan still exists and is described with some examples. Some of Mauchly's thoughts on programming at that time are set forth in a previously unpublished fragment attached as an appendix. Extract: Introduction
    Introduction
    In 1949, four years after the first report on electronic stored program computers, perhaps a dozen computers were under development. Programming was new and programmers were numbered in the tens. There were no programming tutorials and programming was learned only through personal instruction. Only a small number of programs had been written and all of these had been coded by hand in machine language. Assemblers and compilers had not yet been invented. It was in this climate that John W. Mauchly conceived of the first high level language which he first called BRIEF CODE, but which later came to be called SHORT CODE.
    In the summer of 1949 Mauchly suggested that the programming of mathematical problems for BINAC could be speeded up, if a general program were written which would allow BINAC to interpret algebraic equations directly without the need to write machine code. This was the genesis of what came to be known as the UNIVAC SHORT CODE though the first efforts were directed at BINAC.
    It was John?s special genius to have anticipated a problem and a method of solution long before the need was commonly felt. It was my lot to have been chosen to implement it.
    Extract: The Origin of the SHORT CODE
    The Origin of the SHORT CODE
    Around the end of July 1949 John first told me of his thoughts on a new method of programming BINAC. He called me into his office and started to tell me about what he called the BRIEF CODE. He wanted to interpret equations on the BINAC. BINAC was a pure binary machine with no alphabetic characters available so these equations would have to be written using some type of binary representation for symbols. He had decided to use six bit groups as symbols which could be considered to be pairs of octal digits for input purposes. There were 64 possible octal digit pairs and these would be used to write the equations by using octal digit pairs 00 through 07 as operator symbols, and letting the remaining pairs 10 through 77 be symbols for variables. This seemed to me to be somewhat like the coding method used to program the ENIAC, described below. I mentioned it to John and he brought forth an example which I have reconstructed to the best of my recollection but where I have used symbol values from a later version; since the original BINAC values are lost.
    ?Suppose Y and Z have values somehow and we want to compute X which we still define by writing an equation X = Y + Z. we want BINAC to use this equation to take the values for Y and 2, add them together and put the result in X. First we have to enter the equation into BINAC but we can?t use letters or symbols because it is a pure binary machine. The only thing we can enter are octal digits so we will have to use them instead and make some substitutions. Let 40 stand for X, whenever BINAC sees a 40 it will know we are talking about X. Let Y be 41, Z be 42 and for the symbols let the equals sign be 03 and the plus sign be 07. Then X = Y + Z becomes 40 03 41 07 42. That lets us put it into BINAC. Now we need a program which will make sense of it.
    John?s explanation made it clear that he was proposing something brand new. The ENIAC code was only a machine language instruction with an operation field and two accumulator fields whereas the BRIEF CODE was a transliteration of an algebraic equation and was not an instruction at all. The similarity was only that the BRIEF CODE symbols and the ENIAC addresses and operators all used two-digit fields. A short digression will make this clear.
    Extract: SHORT CODE and von Neumann being later
    SHORT CODE and von Neumann being later
    I had spent part of the previous summer of 1948 as an ENIAC operator and was familiar with ENIAC programming. The ENIAC was a set of modules which could be connected differently for every problem. Originally it was programmed by plugging units together. The accumulators which held the data and did the arithmetic were plugged into one or more of a number of parallel data transfer busses. Several operations could occur at the same time. Operations were initiated by pulses supplied by program control circuits. Setting up and debugging was very time consuming because of the maze of cables and because of the independent parallel computations possible. (Burks, 1981) When the first program for Los Alamos was run on the ENIAC it was too large to fit and a fix using the function table units were introduced.
    These units stored six decimal digit constants in rotary switches. They generated program pulses when operating and these pulses were adapted to control some data transfers. It is not clear to whom this idea should be credited, but it allowed the program to be run successfully. This program was the responsibility of John von Neumann and was one of the reasons for his involvement, with ENIAC.
    Later after delivery to the Ballistic Research Laboratory, Aberdeen Proving Ground in 1948, a method of programming was introduced which used the three ENIAC function table units. This was done at the insistance of von Neumann and was an extension of the method used in the fix and required some additional hardware. Each six digit constant was interpreted as a sort of two address instruction which specified two accumulators and an operation. The method eliminated the possibility of parallel programming because only one accumulator pair could be specified at a time so the others sat idle. The reduction in problem switchover time, sometimes more than a week, more than made up for the loss in performance.
    Since this programming method bears on the subject of the stored program, a few more words are in order. There were many other participants other than von Neumann. The first mention of stored programming appeared in a preliminary report on the EDVAC more than a year previous to von Neumann?s arriving on the scene. Other participants included John Mauchly, Kay Mauchly, Richard Clippinger, Arthur Gehring Jr., and Betty Jean Bartik.
          in Annals of the History of Computing 10(1) January, 1988 view details
  • Diana H. Hook; Jeremy M. Norman; Michael R. Williams "Origins of Cyberspace" Jeremy Norman 2002 view details Extract: Short Code
    The UNIVAC Short Code was the first example of a high-level programming language actually intended to be used with an electronic computer. It was conceived in the summer of 1949 by John Mauchly, who originally intended it for the BINAC computer. "Mauchly suggested that the programming of mathematical problems for BINAC could be speeded up, if a general program were written which would allow BINAC to interpret algebraic equations directly without the need to write machine code. . . . It was John's special genius to have anticipated a problem and a method of solution long before the need was commonly felt" (Schmitt 1988, 7). William Schmitt, who worked under Mauchly, was chosen to implement the Short Code (originally called "Brief Code") for BINAC; in late 1950, with the help of Albert B Tonik, Schnitt reworked the code for UNIVAC. This version of the Short Code ("Short Code I"), of which no written copies are extant, was first run on UNIVAC I, Serial 1, in 1950. In 1952 Tonik and J. Robert Logan prepared a revised version of the code ("Short Code II"), of which only Tonik's copy survives (Schnitt 1988, 11). This 1955 revision of the code is thus the earliest obtainable. UNIVAC short code is what is known as an "interpreter." It was a bit of software, written in the UNIVAC machine language, which would perform the following job: Given a simple equation (say X = A + B) the user would prepare a magnetic tape containing a number of special codes which would describe each operation to be performed. For the above equation, the operations would run something like this: Get the number A Get the number B Add them together Put result in X Print X Stop The codes used bore little resemblance to the directions for the operations (the Short Code actually used for the above example would be 00 S0 03 S1 078 S2 97). The software program would read each code, one at a time, and then cause the appropriate bit of program to be executed to perform the action indicated by that code ("interpret the code"). The codes actually used to state the problem were known as "pseudocodes" to distinguish them from the "codes" which were the hardware instructions wired into the machine in use. The Short Code could also be used to perform more complex mathematical operations, such as Y = cos(x)/sin(a) * tan-1(b). While not user-friendly, the system could be used to evaluate some lengthy expressions that would otherwise have been difficult. Interpreters represent an early stage in the development of software, although they lasted until the mid-1960s and are even found in software today in special situations. Various versions of this type of interpreter were common (MRW). When OOC was written, no copies of this document were cited in OCLC or RLIN.
          in Annals of the History of Computing 10(1) January, 1988 view details