Elmord's Notes: Grace_Hopper

Last modified: 2024-03-18 19:05 +0000


When Hopper recommended the development of a new programming language that would use entirely English words, she "was told very quickly that [she] couldn't do this because computers didn't understand English." Still, she persisted. "It's much easier for most people to write an English statement than it is to use symbols," she explained. "So I decided data processors ought to be able to write their programs in English, and the computers would translate them into machine code."[21]

Her idea was not accepted for three years. In the meantime, she published her first paper on the subject, compilers, in 1952. In the early 1950s, the company was taken over by the Remington Rand corporation, and it was while she was working for them that her original compiler work was done. The program was known as the A compiler and its first version was A-0.[22]: 11

In 1952, she had an operational link-loader, which at the time was referred to as a compiler. She later said that "Nobody believed that," and that she "had a running compiler and nobody would touch it. They told me computers could only do arithmetic."[23]

"The most important thing I've accomplished, other than building the compiler," she said, "is training young people. They come to me, you know, and say, 'Do you think we can do this?' I say, 'Try it.' And I back 'em up. They need that. I keep track of them as they get older and I stir 'em up at intervals so they don't forget to take chances."[41]



• So, in response to being denied funding, Hopper did what she generally did: she wrote it anyway, or at least a demo version.

• We got our little compiler running. It wouldn't take more than 20 statements. And on the back of this report, we put a nice little program in English. And we said, "Dear Kind Management: If you come down to the machine room, we'll be delighted to run this program for you." And it read: INPUT INVENTORY FILE A; PRICE FILE B; OUTPUT PRICED INVENTORY FILE C. COMPARE PRODUCT #A WITH PRODUCT #B. IF GREATER, GO TO OPERATION 10; IF EQUAL, GO TO OPERATION 5; OTHERWISE GO TO OPERATION 2. TRANSFER A TO D; WRITE ITEM D; JUMP TO OPERATION 8. It ended up: REWIND B; CLOSE OUT FILE C AND D; and STOP.

Grace Hopper's keynote in History of programming languages:

Between October of 1951 and May of 1952 I wrote a compiler. Now, there was a curious thing about it: it wasn't what you'd call one today, and it wasn't what you'd call a "language" today. It was a series of specifications. For each subroutine you wrote some specs. The reason it got called a compiler was that each subroutine was given a "call word," because the subroutines were in a library, and when you pull stuff out of a library you compile things. It's as simple as that.

In any case, I started out to devise a means by which I could put these subroutines together to produce a program. Curiously, it did not occur to me that I should make two sweeps over it. I felt that it should be a single-pass compiler. In fact, the information defining a problem came in on one tape unit, and the program was written out on another one, because UNIVAC I only had 1000 words of storage and there wasn't room enough to keep a whole lot of junk in there while I was doing the compiling process.

I promptly ran up against the problem that in some cases, after making a test, I would jump back in the program for something I had previously processed and at other times I would jump forward in the program to a section of the program which had not been written and I did not know where it was. In other words, there were two types of jumps to be coped with: one which went back in the program; the other went forward in the program. Therefore, as the program was put together, a record was kept of where each subroutine was: they were numbered; the operations were numbered. And if I wanted to jump back to Operation 10, I could look at the record and find which line Operation 10 was at. But if I was at Operation 17, and I wanted to jump to Operation 28, I didn't yet know where it was.

And here comes in the curious fact that sometimes something totally extraneous to what you are doing will lead you to an answer. It so happened that when I was an undergraduate at college I played basketball under the old women's rules which divided the court into two halves, and there were six on a team; we had both a center and a side center, and I was the side center. Under the rules, you could dribble only once and you couldn't take a step while you had the ball in your hands. Therefore if you got the ball and you wanted to get down there under the basket, you used what we called a "forward pass." You looked for amember of your team, threw the ball over, ran like the dickens up ahead, and she threw the ball back to you. So it seemed to me that this was an appropriate way of solving the problem I was facing of the forward jumps ! I tucked a little section down at the end of the memory which I called the "neutral corner." At the time I wanted to jump forward from the routine I was working on, Ijumped to a spot in "neutral corner." I then set up a flag for Operation 28 which said, "I've got a message for you." This meant that each routine, as I processed it, had to look and see if it had a flag; if it did, it put a second jump from the neutral corner to the beginning of the routine, and it was possible to make a single-pass compiler and the concept did come from playing basketball! [Applause] I have a feeling that we would do well to train our computer people and specialists in many disciplines rather than in a single discipline because you never know what may prove useful.

Copyright © 2024 Vítor De Araújo

Unless stated otherwise, the content of this page is released under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license.