stringtranslate.com

GEORGE (lenguaje de programación)

GEORGE (General Order Generator) 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 emergente de inserción hacia abajo 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; así, se escribía , y lo mismo se aplicaba a las demás operaciones aritméticas de resta, multiplicación y división.a b +

La expresión algebraica se escribió , donde ' ' significaba 'duplicar el valor'.a x dup × × b x × + c +dup

Siguiendo la forma polaca inversa, una declaración de asignación para evaluar la fórmula se escribió como .a x dup × × b x × + c + (y)

La computadora evaluó la expresión de la siguiente manera: los valores de a, luego x, fueron empujados a la parte superior de la pila del acumulador ; ' dup' hizo que una copia del valor más alto ( x) fuera empujada a la parte superior de la pila del acumulador; Multiply ( ×) hizo que los dos valores superiores, a saber, xy x, fueran eliminados (extraidos) y multiplicados, devolviendo el producto a la parte superior de la pila del acumulador. La segunda multiplicación ( ×) hizo que los dos valores superiores en la pila (a saber, ay x**2) fueran extraídos y multiplicados, y que el producto ( a×x**2) fuera empujado a la parte superior de la pila del acumulador. Y así sucesivamente con 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 del acumulador.

Suponiendo que el valor en la parte superior de la pila del acumulador no fuera necesario 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 empujando el valor cero hacia la parte superior de la pila del acumulador.
La segunda línea introduce un bucle, se dice "para 1 a 8, repita 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 del acumulador, 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 del acumulador.
Una vez finalizado el bucle, la (P) hace que la suma final se perfore en una tarjeta.

La manipulación de vectores y matrices requiere la notación de subíndices. En GEORGE, los subíndices precedían al nombre del vector o la matriz. Por lo tanto, se escribía A(j) j | A. El siguiente programa lee el vector a de 10 valores, luego forma los cuadrados de esos valores y, por último, imprime esos valores.

1, 10 R1 (a)1, 10 repeticiones (j) j | un dup * j | (a) ;]1, 10 P1 (a)
En el programa, la primera línea es una lectura vectorial que lee los diez valores desde a(1) hasta a(10).
La segunda línea introduce un bucle que recorre los diez valores de j.
La tercera línea obtiene a(j), lo duplica, multiplica esos dos valores dando el cuadrado y luego lo almacena en a(j). Observe 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 línea final es una perforación vectorial (es decir, una impresión) para escribir los diez cuadrados.

La tabla de codificación 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ó incluyendo *5 en otras partes del programa. Las transferencias incondicionales se escribieron 5↑

Las llamadas a subrutinas se realizaron con la flecha hacia abajo, por ejemplo, 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 funcionó en mayo de 1957 en un DEUCE eléctrico inglés , todos los valores se almacenaban en formato binario de punto fijo en una palabra de 32 bits, con 16 lugares binarios.

En la segunda versión introducida en 1958, los valores se guardaban 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 sólo 26 letras del alfabeto, un punto decimal, un signo más, un signo menos y una barra.

Referencias

  1. ^ Hamblin, Charles Leonard (mayo de 1957). Un esquema de codificación sin direcciones basado en notación matemática (Typescript). Universidad Tecnológica de Nueva Gales del Sur .{{cite book}}: Mantenimiento de CS1: falta la ubicación del editor ( enlace )
  2. ^ Hamblin, Charles Leonard (junio de 1957). "Un esquema de codificación sin dirección basado en notación matemática". Actas de la Primera Conferencia Australiana sobre Informática y Procesamiento de Datos . Salisbury, Australia del Sur: Weapons Research Establishment .
  3. ^ Hamblin, Charles Leonard (1957). "Lenguajes informáticos". The Australian Journal of Science (20?): 135–139; Hamblin, Charles Leonard (noviembre de 1985). "Lenguajes informáticos". The Australian Computer Journal (reimpresión). 17 (4): 195–198.
  4. ^ 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) . Facultad 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 .
  5. ^ Beard, Bob (otoño de 1997) [1996-10-01]. "La computadora KDF9: 30 años después" (PDF) . Resurrección - El boletín de la Computer Conservation Society . N.º 18. Computer Conservation Society (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 . […] La KDF9 es notable porque se cree que fue la primera computadora con formato de instrucción de dirección cero que se anunció (en 1960). Se entregó por primera vez aproximadamente 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 escritores 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 (General Order Generator), un sistema de programación de código automático escrito para una computadora Deuce por la Universidad de Sydney , Australia, en la segunda mitad de la década de 1950. George utilizó el polaco inverso , y el equipo de KDF9 se sintió atraído por esta convención por la razón pragmática de querer mejorar el rendimiento al minimizar los accesos al almacenamiento principal. Esto puede contrastarse con la línea más "teórica" ​​adoptada independientemente por Burroughs . Además de un almacenamiento 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 Grupo Noroeste de la Sociedad en el Museo de Ciencia e Industria, Manchester, Reino Unido, el 1 de octubre de 1996).
  6. ^ Curso de programación . Facultad de Ingeniería Eléctrica, Universidad de Nueva Gales del Sur . ndp 24.