Autocódigo es el nombre de una familia de «sistemas de codificación simplificados», posteriormente llamados lenguajes de programación , ideados en los años 1950 y 1960 para una serie de ordenadores digitales de las universidades de Manchester , Cambridge y Londres . Autocódigo era un término genérico; los autocódigos de las distintas máquinas no estaban necesariamente estrechamente relacionados como lo están, por ejemplo, las distintas versiones del lenguaje único Fortran .
Hoy en día, el término se utiliza para referirse a la familia de lenguajes tempranos descendientes de los sistemas de autocodificadores Manchester Mark 1 , que en general eran similares. En la década de 1960, el término autocodificadores se utilizó de manera más genérica para referirse a cualquier lenguaje de programación de alto nivel que utiliza un compilador . [1] Ejemplos de lenguajes a los que se hace referencia como autocodificadores son COBOL y Fortran . [2]
El código automático de Glennie
El primer código automático y su compilador fueron desarrollados por Alick Glennie en 1952 para el ordenador Mark 1 de la Universidad de Manchester y algunos lo consideran el primer lenguaje de programación compilado . Su principal objetivo era aumentar la comprensión de la programación de las máquinas Mark 1, que eran 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, seguía siendo muy dependiente 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 la instrucción de escala necesaria 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@NC
ENTEROS +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 Z
SUBRUTINA 6 →z # Ejecutar subrutina de raíz cuadrada en
# valor del acumulador inferior
# y pon el resultado en z
+tt →y →x # Calcula t^3 y pónlo en x
+tx →y →x
+z+cx CERRAR ESCRIBIR 1 # Poner z + (c * x) en
# acumulador inferior
# y regresa
El manual de usuario del compilador de código automático de Glennie menciona que "la pérdida de eficiencia no es más del 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 lo mencionó en el artículo de Brooker de 1958 titulado "Los programas 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 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, solo permitía 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í
n1 = 1
1 vn1 = I lee la entrada en v[n[1]]
n1 = n1 + 1
j1,11 ≥ n1 salta a 1 si n[1] ≤ 11
El Autocode de Brooker eliminó dos de las principales dificultades que tenía el programador de Mark 1: el escalado y la gestión del almacenamiento de dos niveles. A diferencia de su predecesor, su uso era muy intenso. [6]
Autocódigos posteriores
Brooker también desarrolló un autocódigo para el Ferranti Mercury en la década de 1950 en colaboración con la Universidad de Manchester. El autocódigo de Mercury tenía un repertorio limitado de variables az y a'-z' y, en algunos aspectos, se parecía a las primeras versiones del lenguaje BASIC de Dartmouth . Era anterior a ALGOL , ya que no tenía el concepto de pilas y, por lo tanto, no tenía recursión ni matrices asignadas dinámicamente . Para superar el tamaño de almacenamiento 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 transferencias de control que consumían mucho tiempo entre capítulos. Este concepto de superposiciones desde el 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 del autocódigo de Mercury para el Ferranti Atlas (distinto del posterior autocódigo Atlas ) y la gama ICT 1300 y 1900 .
La versión para el EDSAC 2 fue ideada por David Hartley del Laboratorio de Matemáticas de la Universidad de Cambridge en 1961. Conocida 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 diagnósticos del lenguaje fuente que eran avanzados para la época. Se desarrolló una versión para el sucesor Titan (el prototipo de 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 lugar 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, se desarrolló para la máquina Atlas 1 de la Universidad de Manchester.
Referencias
- ^ Londres, 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 a menudo se denominan autocódigos y el programa del procesador, un compilador.
- ^ Londres, Keith (1968). "4, Programación". Introducción a las computadoras (1.ª ed.). Londres: Faber and Faber Limited. pág. 186. SBN 571085938
Dos 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 (lenguaje común orientado a negocios) y FORTRAN (traducción de fórmulas)
. - ^ Knuth, pág. 42-43
- ^ Knuth, pág. 48
- ^ Knuth, pág. 63-64
- ^ Knuth, pág. 65
Fuentes
- Campbell-Kelly, Martin (1980). "Programación del Mark 1: Actividad temprana de programación en la Universidad de Manchester". Anales de la historia de la informática . 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. 261.
- Knuth, Donald E.; Pardo, Luis Trabb (1976). "Desarrollo temprano de lenguajes de programación". Universidad de Stanford, Departamento de Ciencias de la Computación.
Lectura adicional
- Los Autocódigos: la perspectiva del usuario
- Brooker, RA (1 de enero de 1958). "Los programas de autocodificación 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 facilidades de codificación automática para la computadora Manchester (Mercury)". The Computer Journal . 1 (3): 124–127. doi : 10.1093/comjnl/1.3.124 . ISSN 0010-4620.
- Clarke, B. (1 de abril de 1959). "El autocódigo de 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 Titan Autocode . Cambridge, Laboratorio de Matemáticas de la Universidad.
- Barron, David William (1968) [1967]. "1.5. Recursión en 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)