GEORGE (Generador de Orden General) es un lenguaje de programación inventado por Charles Leonard Hamblin en 1957. [ 1 ] [ 2 ] [ 3 ] [ 4 ] Fue diseñado en torno a una pila desplegable para operaciones aritméticas y empleó notación polaca inversa . [ 5 ] El lenguaje incluía bucles , subrutinas , condicionales , vectores y matrices .
Descripción
Las expresiones algebraicas se escribían en notación polaca inversa; por lo tanto,Se escribió a b +, y de manera similar para las demás operaciones aritméticas de resta, multiplicación y división.
La expresión algebraicase escribió 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órmulafue 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 insertaron en la parte superior de la pila del acumulador ; ' dup' hizo que una copia del valor más alto ( x) se insertara en la parte superior de la pila del acumulador; Multiplicar ( ×) hizo que los dos valores superiores, es decir, xy x, se eliminaran (extrajeran) y se multiplicaran, devolviendo el producto a la parte superior de la pila del acumulador. La segunda multiplicación ( ×) hizo que los dos valores superiores de la pila (es decir, ay x**2) se extrajeran y se multiplicaran, y el producto ( a×x**2) se insertara en la parte superior de la pila del acumulador. Y así sucesivamente con los componentes restantes de la expresión. La operación final, es decir ( y), devolvió el valor de la expresión al almacenamiento sin cambiar el estado de la pila del acumulador.
Suponiendo que el valor en la parte superior de la pila del acumulador no se necesitara inmediatamente, se eliminaría (borraría) utilizando el operador ( ;).
El siguiente programa lee ocho valores y calcula 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 del acumulador.
- La segunda línea introduce un bucle, se pronuncia como "para 1 a 8 repetir para j", y termina con el corchete.
- En la tercera línea, R hace que se lea un número y se coloque en la parte superior de la pila del acumulador, y el signo más (+) hace que ese valor se sume a la suma (parcial), dejando solo la suma parcial en la parte superior de la pila del acumulador.
- Una vez finalizado el bucle, la (P) hace que se perfore la suma final en una tarjeta.
La manipulación de vectores y matrices requiere notación de subíndices. En GEORGE, el/los subíndice(s) precedían al nombre del vector o matriz. Así, A(j) se escribía j | A. El siguiente programa lee el vector a , que contiene 10 valores, luego calcula el cuadrado de esos valores y, finalmente, los imprime.
1, 10 R1 (a) 1, 10 repeticiones (j) j | un duplicado * j | (a) ; ] 1, 10 P1 (a)
- En el programa, la primera línea es una lectura de vector que lee los diez valores en a(1) a a(10).
- La segunda línea introduce un bucle para recorrer los diez valores de j.
- La tercera línea obtiene a(j), lo duplica, multiplica esos dos valores para obtener el cuadrado y luego lo almacena en a(j). Nótese el punto y coma (;), que borra (o cancela) la entrada superior en la pila del acumulador. Si no se hiciera esto, el acumulador se llenaría gradualmente con los cuadrados de los valores.
- La última línea es una perforación vectorial (es decir, impresión) para escribir los diez cuadrados.
La tabla de codificación GEORGE anterior facilitó la transcripción de un programa a tarjetas perforadas.
Las operaciones condicionales se escribieron como saltos, como sigue: si a > 0 ir a 5 (que transfiere a la etiqueta 5 si a es mayor que cero) se escribiría
0 a > 5 ↑
La etiqueta 5 se indicó incluyendo *5 en otra parte del programa. Las transferencias incondicionales se escribieron 5↑
Las llamadas a subrutinas se realizaron con la flecha hacia abajo, .g., para llamar a la subrutina etiquetada como 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 funcionaba en mayo de 1957 en un ordenador English Electric DEUCE , todos los valores se almacenaban en formato binario de punto fijo en una palabra de 32 bits, con 16 posiciones binarias.
En la segunda versión, introducida en 1958, los valores se almacenaban en formato 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 los equipos de impresión de la época solo ofrecían 26 letras del alfabeto, un punto decimal, un signo más, un signo menos y una barra inclinada.
Referencias
- ↑ Hamblin, Charles Leonard (mayo de 1957). Un esquema de codificación sin direcciones basado en notación matemática (mecanografiado). Universidad Tecnológica de Nueva Gales del Sur .
{{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace ) - ↑ 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 Meridional: Centro de Investigación de Armamento .
- ↑ Hamblin, Charles Leonard (1957). "Lenguajes de computadora". The Australian Journal of Science (20?): 135– 139;Hamblin, Charles Leonard (noviembre de 1985). "Lenguajes de 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 semitraducción para DEUCE: Manual de programación y operación (PDF) . Facultad de Humanidades, Universidad de Nueva Gales del Sur, Kensington, Nueva Gales del Sur. Archivado (PDF) del original el 4 de abril de 2020. Consultado el 27 de julio de 2020 .
- ↑ Beard, Bob (otoño de 1997) [1996-10-01]. "La computadora KDF9: 30 años después" (PDF) . Resurrección : Boletín de la Sociedad de Conservación de Computadoras . N.° 18. Sociedad de Conservación de Computadoras (CCS). págs. 7–15 . ISSN 0958-7403 . Archivado (PDF) del original el 27 de julio de 2020. Recuperado el 27 de julio de 2020. [
…] La
KDF9
es notable porque se cree que es la primera computadora con formato de instrucciones de dirección cero que se anunció (en 1960). Se entregó por primera vez casi al mismo tiempo (principios de 1963) que la otra famosa computadora de dirección cero, la
Burroughs B5000
en Estados Unidos. Al igual que muchas calculadoras de bolsillo modernas, una máquina de dirección cero permite el uso de aritmética polaca inversa; Esto ofrece ciertas ventajas a los desarrolladores de compiladores. Se cree que el equipo de English Electric se interesó por primera vez en el concepto de direcciones cero gracias al contacto con George (General Order Generator), un sistema de programación de código automático escrito para una computadora
Deuce
en la
Universidad Tecnológica de Nueva Gales del Sur
, Australia, a finales de la década de 1950. George utilizaba
la convención de Polaco Invertido
, y el equipo del KDF9 se sintió atraído por esta convención por la razón práctica de querer mejorar el rendimiento minimizando los accesos a la memoria principal. Esto contrasta con la línea más «teórica» adoptada independientemente por
Burroughs
. Además de una
memoria anidada
o pila de hardware —el mecanismo básico de una computadora de direcciones cero—, el KDF9 contaba con otros grupos de registros centrales para mejorar el rendimiento, lo que le confería una interesante estructura interna. […]
(Nota: Esta es una versión editada de una charla impartida al Grupo Noroeste de la Sociedad en el Museo de Ciencia e Industria de Manchester, Reino Unido, el 1 de octubre de 1996).
- ↑ Curso de Programación . Escuela de Ingeniería Eléctrica, Universidad de Nueva Gales del Sur . ndp 24.
- Lenguajes de programación
- Lenguajes de programación orientados a pilas
- Lenguajes de programación creados en 1957