Articulo de referencia

Código automático

Autocode es el nombre de una familia de "sistemas de codificación simplificados", posteriormente denominados lenguajes de programación , ideados en las décadas de 1950 y 1960 pa...

Autocode es el nombre de una familia de "sistemas de codificación simplificados", posteriormente denominados lenguajes de programación , ideados en las décadas de 1950 y 1960 para una serie de ordenadores digitales en las Universidades de Manchester , Cambridge y Londres . Autocode era un término genérico; los autocódigos para diferentes máquinas no estaban necesariamente relacionados entre sí, como sí lo están, por ejemplo, las diferentes versiones del lenguaje único Fortran .

Actualmente, el término se utiliza para referirse a la familia de lenguajes primitivos descendientes de los sistemas de autocodificación Manchester Mark 1 , que eran generalmente similares. En la década de 1960, el término autocodificadores se utilizaba de forma más genérica para referirse a cualquier lenguaje de programación de alto nivel que utilizara un compilador . [ 1 ] Ejemplos de lenguajes denominados autocodificadores son COBOL y Fortran . [ 2 ]

Código automático de Glennie

El primer código automático y su compilador fueron desarrollados por Alick Glennie en 1952 para la computadora Mark 1 en la Universidad de Manchester y algunos lo consideran el primer lenguaje de programación compilado . Su principal objetivo era mejorar la comprensibilidad de la programación de las máquinas Mark 1, conocidas por su código máquina particularmente complejo. Si bien el lenguaje resultante era mucho más claro que el código máquina, seguía dependiendo en gran medida de la máquina. [ 3 ]

A continuación se muestra un ejemplo de la función Autocode de Glennie que calcula la fórmula:F(t)=|t|+5t3{\displaystyle f(t)={\sqrt {|t|}}+5t^{3}}El ejemplo omite la instrucción de escalado necesaria para colocar números enteros en variables y asume que los resultados de la multiplicación caben en el acumulador inferior.

c@VA t@IC x@½C y@RC z@NC ENTEROS +5 →c # Coloca 5 en c →t # Cargar argumento desde el acumulador inferior # a la variable t +t PRUEBA Z # Coloca |t| en el acumulador inferior -t ENTRADA Z SUBRUTINA 6 →z # Ejecutar la subrutina de raíz cuadrada en # valor del acumulador inferior # y coloca el resultado en z +tt →y →x # Calcula t^3 y colócalo en x +tx →y →x +z+cx CERRAR ESCRIBIR 1 # Poner z + (c * x) en # acumulador inferior # y regresar

El manual de usuario del compilador Autocode de Glennie mencionaba que "la pérdida de eficiencia no supera el 10 %". [ 4 ]

El impacto del Autocode de Glennie en los hábitos de programación de otros usuarios de Manchester fue insignificante. Ni siquiera se mencionó en el artículo de Brooker de 1958 titulado "Los programas de Autocode desarrollados para las computadoras de la Universidad de Manchester".

Código automático Mark 1

El segundo código automático para el Mark 1 se planeó en 1954 y fue desarrollado por R.A. Brooker en 1955; se denominó "Mark 1 Autocode". El lenguaje era prácticamente independiente de la máquina y, a diferencia del primero, admitía aritmética de punto flotante. Sin embargo, solo permitía una operación por línea, ofrecía pocos nombres mnemotécnicos y no permitía definir subrutinas de usuario. [ 5 ]

Un ejemplo de código que carga una matriz de tamaño 11 de números de punto flotante desde la entrada se vería así:

 n1 = 1 1 vn1 = Yo lee la entrada en vn[1] n1 = n1 + 1 j1,11 ≥ n1 salta a 1 si n[1] ≤ 11

El Autocode de Brooker eliminó dos de las principales dificultades del programador Mark 1: la escalabilidad y la gestión del almacenamiento de dos niveles. A diferencia de su predecesor, fue muy utilizado. [ 6 ]

Autocódigos posteriores

Brooker también desarrolló un código automático para la Ferranti Mercury en la década de 1950 en colaboración con la Universidad de Manchester. El código automático de Mercury tenía un repertorio limitado de variables az y a'-z' y, en cierto modo, se asemejaba a las primeras versiones del posterior lenguaje BASIC de Dartmouth . Precedió a ALGOL , ya que no tenía el concepto de pilas y, por lo tanto, carecía de recursión o de matrices asignadas dinámicamente . Para superar el tamaño de memoria relativamente pequeño disponible en Mercury, los programas grandes se escribían como "capítulos" distintos, cada uno de los cuales constituía una superposición . Se requería cierta habilidad para minimizar las transferencias de control entre capítulos, que consumían mucho tiempo. Este concepto de superposiciones desde el tambor bajo el control del usuario se generalizó hasta que la memoria virtual estuvo disponible en máquinas posteriores. Se implementaron dialectos ligeramente diferentes del código automático de Mercury para la Ferranti Atlas (distintos del posterior código automático de Atlas ) y la gama ICT 1300 y 1900 .

La versión para el EDSAC 2 fue ideada por David Hartley del Laboratorio Matemático de la Universidad de Cambridge en 1961. Conocido como EDSAC 2 Autocode, fue un desarrollo directo de Mercury Autocode adaptado a las circunstancias locales, y se destacó por su optimización de código objeto y diagnósticos de lenguaje fuente que eran avanzados para la época. Se desarrolló una versión para el sucesor Titan (el prototipo de la computadora Atlas 2) como una solución provisional mientras se desarrollaba un lenguaje sustancialmente más avanzado conocido como CPL . CPL nunca se completó, pero dio origen a BCPL (desarrollado por M. Richards), que a su vez condujo a B y finalmente a C. Un hilo de desarrollo contemporáneo pero independiente, Atlas Autocode , se desarrolló para la máquina Atlas 1 de la Universidad de Manchester.

Otros códigos de automóvil

Los códigos automáticos desarrollados en la Unión Soviética incluyen AKI ( AvtoKod "Inzhener" , es decir, " código automático de ingeniero "). [ 7 ] y avtokod "Ekonomist" ( автокод ЭКОНОМИСТ ), utilizado en la familia de computadoras de Minsk . [ 8 ]

Referencias

  1. London, Keith (1968). "4, Programación". Introducción a las computadoras (1.ª  ed.). Londres: Faber and Faber Limited. pág.  184. SBN 571085938Los lenguajes de programación de "alto" nivel suelen denominarse autocódigos, y el programa procesador, compilador .
  2. London, Keith (1968). "4, Programación". Introducción a las computadoras (1.ª ed.). Londres: Faber and Faber Limited. pág. 186. SBN   571085938Dos lenguajes de programación de alto nivel que pueden usarse aquí como ejemplos para ilustrar la estructura y el propósito de los autocódigos son COBOL (Common Business Oriented Language) y FORTRAN (Formular Translation) .
  3. Knuth, págs. 42-43
  4. Knuth, pág. 48
  5. Knuth, págs. 63-64
  6. Knuth, pág. 65
  7. АвтоКод ИНЖЕНЕР
  8. Из истории первых белорусских ЭВМ серии «Минск»

Fuentes

  • Campbell-Kelly, Martin (1980). "Programando la Mark 1: Actividad de programación temprana en la Universidad de Manchester". Annals of the History of Computing . 2 (2). IEEE: 130– 167. doi : 10.1109/MAHC.1980.10018 . S2CID 10845153 . 
  • García Camarero, Ernesto (1961). AUTOCODE un sistema simplificado de codificación para la computadora MERCURY (en español). Universidad de Buenos Aires. pag.  70.
  • Londres, Keith (1968). Introducción a las computadoras . pág.  261.
  • Knuth, Donald E. ; Pardo, Luis Trabb (1976). "Desarrollo temprano de los lenguajes de programación". Universidad de Stanford, Departamento de Ciencias de la Computación.

Lecturas adicionales

  • Los códigos automáticos: la perspectiva del usuario
  • Brooker, RA (1958-01-01). "Los programas de Autocode desarrollados para las computadoras de la Universidad de Manchester" . The Computer Journal . 1 (1): 15– 21. doi : 10.1093/comjnl/1.1.15 . ISSN 0010-4620 . 
    • Brooker, RA (1958-03-01). "Más funciones de Autocode para la computadora Manchester (Mercury)" . The Computer Journal . 1 (3): 124– 127. doi : 10.1093/comjnl/1.3.124 . ISSN 0010-4620 . 
    • Clarke, B. (1959-04-01). "El código automático Pegasus" . The Computer Journal . 1 (4): 192– 195. doi : 10.1093/comjnl/1.4.192 . ISSN 0010-4620 . 
  • Barron, David William ; et  al. (1967). Manual de programación de Titan Autocode . Cambridge, Laboratorio Matemático Universitario.
  • Barron, David William (1968) [1967]. "1.5. Recursión en la programación funcional". En Gill, Stanley (ed.). Técnicas recursivas en programación . Macdonald Computer Monographs (1.ª  ed.). Londres: Macdonald & Co. (Publishers) Ltd. pág.  8. SBN 356-02201-3.(viii+64 páginas)