GEORGE (programming language)
   HOME

TheInfoList



OR:

GEORGE (General Order Generator) is a
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
invented by
Charles Leonard Hamblin Charles Leonard Hamblin (20 November 1922 – 14 May 1985) was an Australian philosopher, logician, and computer pioneer, as well as a professor of philosophy at the New South Wales University of Technology (now the University of New South Wales) ...
in 1957. It was designed around a push-down pop-up stack for arithmetic operations, and employed
reverse Polish notation Reverse Polish notation (RPN), also known as reverse Łukasiewicz notation, Polish postfix notation or simply postfix notation, is a mathematical notation in which operators ''follow'' their operands, in contrast to Polish notation (PN), in wh ...
. The language included
loop Loop or LOOP may refer to: Brands and enterprises * Loop (mobile), a Bulgarian virtual network operator and co-founder of Loop Live * Loop, clothing, a company founded by Carlos Vasquez in the 1990s and worn by Digable Planets * Loop Mobile, an ...
s,
subroutine In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed. Functions may ...
s,
conditional Conditional (if then) may refer to: *Causal conditional, if X then Y, where X is a cause of Y *Conditional probability, the probability of an event A given that another event B has occurred *Conditional proof, in logic: a proof that asserts a co ...
s,
vector Vector most often refers to: *Euclidean vector, a quantity with a magnitude and a direction *Vector (epidemiology), an agent that carries and transmits an infectious pathogen into another living organism Vector may also refer to: Mathematic ...
s, and
matrices Matrix most commonly refers to: * ''The Matrix'' (franchise), an American media franchise ** ''The Matrix'', a 1999 science-fiction action film ** "The Matrix", a fictional setting, a virtual reality environment, within ''The Matrix'' (franchis ...
. Algebraic expressions were written in reverse Polish notation; thus, a + b was written a b +, and similarly for the other arithmetic operations of subtraction, multiplication, and division. The algebraic expression ax^2 + bx + c was written a x dup × × b x × + c +, where 'dup' meant 'duplicate the value'. Following the reverse Polish form, an assignment statement to evaluate the formula y = ax^2 + bx + c was written as a x dup × × b x × + c + (y). The computer evaluated the expression as follows: the values of a, then x, were pushed onto the top of the accumulator stack; 'dup' caused a copy of the top-most value (x) to be pushed onto the top of the accumulator stack; Multiply (×) caused the top two values, namely, x and x, to be removed (popped) and multiplied, returning the product to the top of the accumulator stack. The second multiply (×) then caused the top two values on the stack (namely, a and x**2) to be popped and multiplied, and the product (a×x**2) to be pushed onto the top of the accumulator stack. And so on the remaining components of the expression. The final operation, namely (y), returned the value of the expression to storage without changing the status of the accumulator stack. Assuming that the value on the top of the accumulator stack was not required immediately, it would be removed (cleared) by using the operator (;). The following program reads in eight values and forms their sum:
0,
1, 8 rep (j)
   R +
]
(P)
: The first line initialises the sum by pushing the value zero onto the top of the accumulator stack. : The second line introduces a loop, is spoken as "for 1 to 8 repeat for j", and is terminated by the square bracket. : In the third line, R causes one number to be read in and pushed onto the top of the accumulator stack, and the plus sign (+) causes that value to be added to the (partial) sum, leaving only the partial sum on the top of the accumulator stack. : After the loop terminates, the (P) causes the final sum to be punched on a card. Manipulation of vectors and matrices requires subscript notation. In GEORGE, the subscript(s) preceded the vector or matrix name. Thus A(j) was written j , A. The following program reads in vector ''a'' of 10 values, then forms the squares of those values, and finally prints those values.
1, 10 R1 (a)
1, 10 rep (j)
   j ,  a dup * j ,  (a) ;
]
1, 10 P1 (a)
: In the program, the first line is a vector read that reads in the ten values into a(1) through a(10). : The second line introduces a loop to run through the ten values of j. : The third line fetches a(j), duplicates it, multiplies those two values giving the square, and then stores it in a(j). Note the semicolon (;), which clears (or cancels) the top entry in the accumulator stack. Were this not done, the accumulator would gradually fill up with the squares of the values. : The final line is a vector punch (i.e., print) to write out the ten squares. The above GEORGE coding table assisted in transcribing a program onto punch cards. Conditional operations were written as jumps, as follows: if a > 0 go to 5 (which transfers to label 5 if a is greater than zero) would be written
0 a > 5 ↑ 
Label 5 was indicated by including *5 elsewhere in the program. Unconditional transfers were written 5↑ Subroutine calls were made with the down arrow, .g., to call subroutine labelled 17, write 17↓, where the label 17 was encoded using column 3 of the above table.


Historical note

In the first version running by May 1957 on an
English Electric DEUCE The DEUCE (''Digital Electronic Universal Computing Engine'') was one of the earliest British commercially available computers, built by English Electric from 1955. It was the production version of the Pilot ACE, itself a cut-down version of ...
, all values were stored in binary fixed-point form in a 32-bit word, with 16 binary places. In the second version introduced by 1958, values were held in floating-point form, with one value per word: 22 bits for the mantissa and 10 bits for the exponent. Some form of coding table was needed because the printing equipment of the time provided only 26 letters of the alphabet, a decimal point, plus sign, minus sign, and slash.


References

{{Authority control Programming languages Stack-oriented programming languages Programming languages created in 1957