GEORGE (Generador de órdenes generales) es un lenguaje de programación inventado por Charles Leonard Hamblin en 1957. [1] [2] [3] [4]
Se diseñó en torno a una pila emergente desplegable para operaciones aritméticas y empleó la notación polaca inversa . [5]
El lenguaje incluía bucles , subrutinas , condicionales , vectores y matrices .
Las expresiones algebraicas se escribieron en notación polaca inversa; por lo tanto,fue escrito a b +
, y de manera similar para las otras operaciones aritméticas de resta, multiplicación y división.
La expresión algebraica fue escrito a x dup × × b x × + c +
, donde ' dup
' significaba 'duplicar el valor'.
Siguiendo la forma polaca inversa, una declaración de asignación para evaluar la fórmula fue escrito como a x dup × × b x × + c + (y)
.
La computadora evaluó la expresión de la siguiente manera: los valores de a
, luego x
, se colocaron en la parte superior de la pila de acumuladores ; ' dup
' provocó que una copia del valor más alto ( x
) se empujara a la parte superior de la pila de acumuladores; Multiply ( ×
) provocó que los dos valores superiores, a saber, x
y x
, se eliminen (aparezcan) y se multipliquen, devolviendo el producto a la parte superior de la pila del acumulador. El segundo multiplicar ( ×
) provocó que los dos valores superiores de la pila (a saber, a
y x**2
) aparecieran y se multiplicaran, y que el producto ( a×x**2
) se empujara a la parte superior de la pila de acumuladores. Y así sucesivamente los componentes restantes de la expresión. La operación final, a saber ( y
), devolvió el valor de la expresión al almacenamiento sin cambiar el estado de la pila de acumuladores.
Suponiendo que el valor en la parte superior de la pila de acumuladores no se requiriera inmediatamente, se eliminaría (borraría) utilizando el operador ( ;
).
El siguiente programa lee ocho valores y forma su suma:
0,1, 8 repeticiones (j) R +](PAG)
- La primera línea inicializa la suma colocando el valor cero en la parte superior de la pila de acumuladores.
- La segunda línea introduce un bucle, se dice como "para 1 a 8 repetir para j" y termina con un corchete.
- En la tercera línea, R hace que se lea un número y se coloque en la parte superior de la pila de acumuladores, y el signo más (+) hace que ese valor se agregue a la suma (parcial), dejando solo la suma parcial en la parte superior de la pila de acumuladores.
- Una vez que termina el ciclo, la (P) hace que la suma final se marque en una tarjeta.
La manipulación de vectores y matrices requiere notación de subíndices. En GEORGE, el (los) subíndice (s) precedieron al vector o al nombre de la matriz. Así se escribió A (j) j | A
. El siguiente programa lee en el vector a de 10 valores, luego forma los cuadrados de esos valores y finalmente imprime esos valores.
1, 10 R1 (a)1, 10 repeticiones (j) j | a dup * j | (a) ;]1, 10 P1 (a)
- En el programa, la primera línea es un vector leído que lee los diez valores en un (1) a un (10).
- La segunda línea introduce un bucle para recorrer los diez valores de j.
- La tercera línea obtiene a (j), la duplica, multiplica esos dos valores dando el cuadrado y luego lo almacena en a (j). Tenga en cuenta el punto y coma (;), que borra (o cancela) la entrada superior en la pila de acumuladores. Si no se hiciera esto, el acumulador se llenaría gradualmente con los cuadrados de los valores.
- La línea final es un punzón de vector (es decir, imprimir) para escribir los diez cuadrados.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | ||
---|---|---|---|---|---|---|---|---|---|---|
0 | / | 0 | dieciséis | a | q | (a) | (q) | Iniciar sesión | R | |
1 | , | // | 1 | 17 | B | r | (B) | (r) | Exp | (PAG) |
2 | ; | ~ | 2 | 18 | C | s | (C) | (s) | pow | |
3 | * | Y | 3 | 19 | D | t | (D) | (t) | movimiento rápido del ojo | |
4 | ∨ | 4 | 20 | mi | tu | (mi) | (u) | sqrt | ||
5 | + | ] | 5 | 21 | F | v | (F) | (v) | pecado | |
6 | - | ↓ | 6 | 22 | gramo | w | (gramo) | (w) | porque | |
7 | × | ↑ | 7 | 23 | h | X | (h) | (X) | ||
8 | ÷ | reps | 8 | 24 | I | y | (I) | (y) | R1 | |
9 | neg | I | 9 | 25 | j | z | (j) | (z) | P1 | |
10 | modificación | 10 | 26 | k | α | (k) | (α) | R11 | ||
11 | max | 11 | 27 | l | β | (l) | (β) | P11 | ||
12 | dup | 12 | 28 | metro | γ | (metro) | (γ) | |||
13 | Rvdo | 13 | 29 | norte | λ | (norte) | (λ) | |||
14 | = | 14 | 30 | Θ | μ | (Θ) | (μ) | |||
15 | > | 15 | 31 | pag | ω | (pag) | (ω) |
La tabla de codificación de GEORGE anterior ayudó a transcribir un programa en tarjetas perforadas.
Las operaciones condicionales se escribieron como saltos, de la siguiente manera: si a> 0 ir a 5 (que se transfiere a la etiqueta 5 si a es mayor que cero) se escribiría
0 a> 5 ↑
La etiqueta 5 se indicó mediante la inclusión de * 5 en otras partes del programa. Se escribieron transferencias incondicionales 5 ↑
Las llamadas a subrutinas se realizaron con la flecha hacia abajo, .g., Para llamar a la subrutina etiquetada 17, escriba 17 ↓, donde la etiqueta 17 se codificó utilizando la columna 3 de la tabla anterior.
Nota histórica
En la primera versión que se ejecutó en mayo de 1957 en un DEUCE eléctrico inglés , todos los valores se almacenaron en forma de punto fijo binario en una palabra de 32 bits, con 16 lugares binarios.
En la segunda versión introducida en 1958, los valores se mantuvieron en forma de punto flotante, con un valor por palabra: 22 bits para la mantisa y 10 bits para el exponente.
Se necesitaba algún tipo de tabla de codificación porque el equipo de impresión de la época proporcionaba solo 26 letras del alfabeto, un punto decimal, un signo más, un signo menos y una barra.
Referencias
- ^ Hamblin, Charles Leonard (mayo de 1957). Un esquema de codificación sin direcciones basado en notación matemática (mecanografiado). Universidad de Tecnología de Nueva Gales del Sur .
- ^ Hamblin, Charles Leonard (junio de 1957). "Un esquema de codificación sin direcciones basado en notación matemática". Actas de la Primera Conferencia Australiana sobre Computación y Procesamiento de Datos . Salisbury, Australia del Sur: Establecimiento de investigación de armas .
- ^ Hamblin, Charles Leonard (1957). "Idiomas de la computadora". The Australian Journal of Science (¿20?): 135-139;Hamblin, Charles Leonard (noviembre de 1985). "Idiomas de la computadora". The Australian Computer Journal (reimpresión). 17 (4): 195-198.
- ^ Hamblin, Charles Leonard (1958). GEORGE IA y II: Un esquema de programación de semi-traducción para DEUCE: Manual de programación y operación (PDF) . Escuela de Humanidades, Universidad de Nueva Gales del Sur, Kensington, Nueva Gales del Sur. Archivado (PDF) desde el original el 4 de abril de 2020 . Consultado el 27 de julio de 2020 .
- ^ Beard, Bob (otoño de 1997) [1 de octubre de 1996]. "La computadora KDF9 - 30 años después" (PDF) . Resurrección - El Boletín de la Sociedad de Conservación de Computadoras . No. 18. Sociedad de Conservación de Computadoras (CCS). págs. 7–15. ISSN 0958-7403 . Archivado (PDF) desde el original el 27 de julio de 2020 . Consultado el 27 de julio de 2020 .
[…] El KDF9 es notable porque se cree que es el primer ordenador con formato de instrucción de dirección cero que se ha anunciado (en 1960). Se entregó por primera vez aproximadamente al mismo tiempo (principios de 1963) que la otra computadora famosa de dirección cero, la Burroughs B5000 en Estados Unidos. Como muchas calculadoras de bolsillo modernas, una máquina de dirección cero permite el uso de la aritmética polaca inversa; esto ofrece ciertas ventajas a los redactores de compiladores. Se cree que la atención del equipo de English Electric se dirigió por primera vez al concepto de dirección cero a través del contacto con George (Generador de órdenes generales), un sistema de programación de código automático escrito para una computadora Deuce por la Universidad de Sydney , Australia, en este último mitad de la década de 1950. George utilizó Reversed Polish , y el equipo de KDF9 se sintió atraído por esta convención por la razón pragmática de querer mejorar el rendimiento minimizando los accesos a la tienda principal. Esto puede contrastarse con la línea más "teórica" tomada independientemente por Burroughs . Además de una tienda o pila de anidamiento de hardware , el mecanismo básico de una computadora de dirección cero, el KDF9 tenía otros grupos de registros centrales para mejorar el rendimiento que le daban una estructura interna interesante. […]
[1] (NB. Esta es una versión editada de una charla dada al North West Group of the Society en el Museo de Ciencia e Industria, Manchester, Reino Unido, 1996-10-01.) - ^ Curso de programación . Escuela de Ingeniería Eléctrica, Universidad de Nueva Gales del Sur . ndp 24.