stringtranslate.com

Codificación automática

Autocode es el nombre de una familia de "sistemas de codificación simplificados", más tarde llamados lenguajes de programación , ideados en los años 1950 y 1960 para una serie de ordenadores digitales en las Universidades de Manchester , Cambridge y Londres . Autocodificar era un término genérico; Los códigos automáticos para diferentes máquinas no estaban necesariamente estrechamente relacionados como lo están, por ejemplo, las diferentes versiones del lenguaje único Fortran .

Hoy en día, el término se utiliza para referirse a la familia de lenguas tempranas descendientes de los sistemas de autocodificación Manchester Mark 1 , que en general eran similares. En la década de 1960, el término autocodificadores se usaba de manera más genérica para referirse a cualquier lenguaje de programación de alto nivel que utilizaba un compilador . [1] Ejemplos de lenguajes denominados códigos automáticos son COBOL y Fortran . [2]

Autocódigo 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 aumentar la comprensibilidad en la programación de las máquinas Mark 1, conocidas por su código de máquina particularmente abstruso. Aunque el lenguaje resultante era mucho más claro que el código de máquina, todavía dependía mucho de la máquina. [3]

A continuación se muestra un ejemplo de la función Autocode de Glennie que calcula la fórmula: . El ejemplo omite las instrucciones de escala necesarias para colocar números enteros en variables y supone que los resultados de la multiplicación caben en el acumulador inferior.

c@VA t@IC x@½C y@RC z@NCENTEROS +5 →c # Pon 5 en c →t # Cargar argumento desde el acumulador inferior # a la variable t +t TESTA Z # Poner |t| en el acumulador inferior -t ENTRADA ZSUBRUTINA 6 →z # Ejecutar subrutina de raíz cuadrada en # menor valor del acumulador # y poner el resultado en z +tt →y →x # Calcula t^3 y ponlo en x +tx →y →x+z+cx CERRAR ESCRIBIR 1 # Poner z + (c * x) en # acumulador inferior # y volver

El manual del usuario del compilador Autocode de Glennie menciona 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 llamado "Los programas de codificación automática desarrollados para las computadoras de la Universidad de Manchester".

Marca 1 Autocodificación

El segundo código automático para el Mark 1 fue planeado en 1954 y desarrollado por RA Brooker en 1955 y se llamó "Autocódigo Mark 1". El lenguaje era casi independiente de la máquina y tenía aritmética de punto flotante, a diferencia del primero. Por otro lado, permitía sólo una operación por línea, ofrecía pocos nombres mnemotécnicos y no tenía forma de definir subrutinas de usuario. [5]

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

 norte1 = 1 1 vn1 = leo la entrada en v[n[1]] norte1 = norte1 + 1 j1,11 ≥ n1 salta a 1 si n[1] ≤ 11

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

Códigos automáticos posteriores

Brooker también desarrolló un código automático para Ferranti Mercury en la década de 1950 junto con la Universidad de Manchester. Mercury Autocode tenía un repertorio limitado de variables az y a'-z' y, en algunos aspectos, se parecía a las primeras versiones del posterior lenguaje Dartmouth BASIC . Es anterior a ALGOL , no tiene concepto de pilas y, por lo tanto, no tiene recursividad ni matrices asignadas dinámicamente . Para superar el tamaño de tienda relativamente pequeño disponible en Mercury, se escribieron programas grandes como "capítulos" distintos, cada uno de los cuales constituía una superposición . Se requería cierta habilidad para minimizar las lentas transferencias de control entre capítulos. Este concepto de superposiciones del tambor bajo el control del usuario se volvió común hasta que la memoria virtual estuvo disponible en máquinas posteriores. Se implementaron dialectos ligeramente diferentes de Mercury Autocode para Ferranti Atlas (distinto del posterior Atlas Autocode ) y las gamas ICT 1300 y 1900 .

La versión para EDSAC 2 fue ideada por David Hartley del Laboratorio de Matemáticas 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 del código objeto y su código fuente. diagnósticos lingüísticos avanzados para la época. Se desarrolló una versión para el sucesor Titan (el prototipo de computadora Atlas 2) como solución temporal mientras se desarrollaba un lenguaje 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. Atlas Autocode, un hilo de desarrollo contemporáneo pero separado, fue desarrollado para la máquina Atlas 1 de la Universidad de Manchester.

Referencias

  1. ^ Londres, Keith (1968). "4, Programación". Introducción a las computadoras (1ª ed.). Londres: Faber and Faber Limited. pag. 184. SBN 571085938. Los lenguajes de programación de "alto" nivel suelen denominarse códigos automáticos y el programa del procesador, compilador.
  2. ^ Londres, Keith (1968). "4, Programación". Introducción a las computadoras (1ª ed.). Londres: Faber and Faber Limited. pag. 186. SBN 571085938. Dos lenguajes de programación de alto nivel que se pueden utilizar aquí como ejemplos para ilustrar la estructura y el propósito de los códigos automáticos son COBOL (lenguaje común orientado a los negocios) y FORTRAN (traducción formulada).
  3. ^ Knuth, pág. 42-43
  4. ^ Knuth, pág. 48
  5. ^ Knuth, pág. 63-64
  6. ^ Knuth, pág. sesenta y cinco

Fuentes

Otras lecturas