MAD ( Michigan Algorithm Decoder ) es un lenguaje de programación y compilador para IBM 704 y más tarde IBM 709 , IBM 7090 , IBM 7040 , UNIVAC 1107 , UNIVAC 1108 , Philco 210-211 y, finalmente, las computadoras centrales IBM S / 370 . Desarrollado en 1959 en la Universidad de Michigan por Bernard Galler , Bruce Arden y Robert M. Graham , MAD es una variante de ALGOLidioma. Fue ampliamente utilizado para enseñar programación en colegios y universidades durante la década de 1960 y jugó un papel menor en el desarrollo de los sistemas operativos informáticos CTSS , Multics y Michigan Terminal System . [1]
Paradigma | Imperativo |
---|---|
Desarrollador | Galler, Arden y Graham |
Apareció por primera vez | 1959 |
SO | UMES , MTS , CTSS , otros |
Implementaciones importantes | |
IBM 704 , IBM 7090 , UNIVAC 1108 , Philco 210-211, IBM S / 360 e IBM S / 370 | |
Dialectos | |
MAD, MAD / I, GOM | |
Influenciado por | |
IAL , ALGOL 58 |
Los archivos de la Biblioteca Histórica Bentley de la Universidad de Michigan contienen materiales de referencia sobre el desarrollo de MAD y MAD / I, incluidos tres pies lineales de impresiones con anotaciones escritas a mano y manuales impresos originales. [2] [3] [4] [5]
MAD, MAD / I y GOM
Hay tres compiladores MAD:
- Original, MAD , el compilador desarrollado en 1959 en la Universidad de Michigan para el IBM 704 y más tarde los de IBM 709 y el IBM 7090 de mainframe equipos que ejecutan la Universidad de Michigan Sistema Ejecutivo (UMES) y el Sistema de Intercambio de Tiempo-Compatible (CTSS) sistemas operativos . [6] [7] A mediados de la década de 1960, MAD fue portado en la Universidad de Maryland al UNIVAC 1108 . [8] Las versiones de MAD también estaban disponibles para Philco 210-211 y UNIVAC 1107 . [8]
- MAD / I , una versión "extendida" de MAD para la serie de computadoras IBM System / 360 que se ejecutan bajo el Michigan Terminal System (MTS). El trabajo en el nuevo compilador comenzó en 1965 como parte del proyecto CONCOMP patrocinado por ARPA en la Universidad de Michigan. A medida que avanzaba el trabajo, quedó claro gradualmente que MAD / I era un nuevo lenguaje independiente de la versión 7090 original de MAD. [9]
- GOM ( G ood O ld M AD), una reimplementación del 7090 MAD original para la serie IBM System / 370 de computadoras centrales que ejecutan el Michigan Terminal System (MTS). GOM fue creado a principios de la década de 1980 por Don Boettner en el Centro de Computación de la Universidad de Michigan. [10] [11]
Historia
Aunque MAD fue motivado por ALGOL 58 , no se parece a ALGOL 58 de manera significativa. [12] [13]
Los programas escritos en MAD incluyeron MAIL, [14] RUNOFF , [15] uno de los primeros sistemas de procesamiento de texto y varias otras utilidades, todas bajo el Compatible Time-Sharing System (CTSS). [16] Se trabajó en el diseño de un compilador MAD para Multics , pero nunca se implementó. [17]
La siguiente es una cita interesante de An Interview with Brian Kernighan [18] cuando le preguntaron "¿Qué te atrajo de la programación?":
- Creo que lo más divertido que tuve programando fue un trabajo de verano en Project MAC en el MIT en el verano de 1966, donde trabajé en un programa que creó una cinta de trabajo para el nuevo GE 645 en los primeros días de Multics. Estaba escribiendo en MAD, que era mucho más fácil y agradable que el FORTRAN y COBOL que había escrito antes, y estaba usando CTSS, el primer sistema de tiempo compartido, que era infinitamente más fácil y más agradable que las tarjetas perforadas.
MAD fue bastante rápido en comparación con algunos de los otros compiladores de su época. Debido a que varias personas estaban interesadas en usar el lenguaje FORTRAN y, sin embargo, querían obtener la velocidad del compilador MAD, se desarrolló un sistema llamado MADTRAN (escrito en MAD). MADTRAN fue simplemente un traductor de FORTRAN a MAD, que luego produjo código de máquina. MADTRAN se distribuyó a través de SHARE . [12]
MAD / I tiene una estructura sintáctica similar a ALGOL 60 junto con características importantes de la MAD original y de PL / I . [9] MAD / I fue diseñado como un lenguaje extensible. Estaba disponible para su uso en MTS y proporcionó muchas ideas nuevas que se abrieron paso en otros idiomas, pero las compilaciones MAD / I eran lentas y MAD / I nunca se extendió a un uso generalizado en comparación con el 7090 MAD original. [11]
GOM es esencialmente el lenguaje MAD 7090 modificado y extendido para la arquitectura 360/370 con algunas adaptaciones juiciosas para adaptarse mejor a las prácticas y problemas de programación actuales. [11] El sistema de mensajes MTS se escribió en GOM.
MAD, MAD Magazine y Alfred E. Neuman
En una versión preliminar del MAD original, como referencia al homónimo de MAD , la revista MAD , cuando un programa contenía demasiados errores de tiempo de compilación, el compilador imprimía una imagen de página completa de Alfred E. Neuman usando arte ASCII . La leyenda decía: "Vea a este hombre acerca de su programa. Puede que quiera publicarlo. Nunca se preocupa, pero por el aspecto de su programa, debería hacerlo". [8] Esta característica no se incluyó en la versión oficial final. [19] Sin embargo, se incluyó en la versión de producción del IBM 7040.
Y Bernie Galler recuerda:
- Cuando diseñamos el lenguaje que pensamos que valdría la pena hacer y para el que podríamos hacer un compilador, ya no pudimos llamarlo Algol; realmente fue diferente. Fue entonces cuando adoptamos el nombre MAD, para el decodificador de algoritmos de Michigan. Tuvimos una interacción divertida con la gente de Mad Magazine, cuando pedimos permiso para usar el nombre MAD. En una carta muy divertida, nos dijeron que nos llevarían a la corte y todo lo demás, pero terminaron la amenaza con una PD en la parte inferior: "Claro, adelante". Desafortunadamente, esa carta se perdió. [20]
Ejemplo de "Hola, mundo"
El programa de ejemplo " hola mundo " imprime la cadena "hola mundo" en un terminal o pantalla.
IMPRIMIR FORMATO HELLOWVALORES VECTORIALES HELLOW = $ 13h0Hola, mundo * $FIN DE PROGRAMA
El primer carácter de la línea se trata como un control de carro lógico , en este ejemplo el carácter "0" que hace que se imprima una línea a doble espacio.
Alternativamente, se pueden usar contracciones y el compilador las expandirá en la lista:
P'T HELLOWV'S HELLOW = $ 13h0 Hola, mundo * $E'M
Elementos del lenguaje
MAD y GOM, pero no MAD / I, se componen de los siguientes elementos: [7] [11] [12]
Formato de entrada
Los programas MAD son una serie de declaraciones escritas en tarjetas perforadas, generalmente una declaración por tarjeta, aunque una declaración puede continuar en varias tarjetas. Las columnas 1 a 10 contienen una etiqueta de declaración opcional, los comentarios o observaciones se marcan con la letra "R" en la columna 11, y las columnas 73 a 80 no se utilizan y podrían contener un identificador de secuencia. Los espacios no son significativos en ningún otro lugar que no sea dentro de las constantes de caracteres. Para GOM, la entrada es de forma libre sin campo de secuencia y las líneas pueden tener hasta 255 caracteres de longitud; las líneas que comienzan con un asterisco (*) son comentarios; y las líneas que comienzan con un signo más (+) son líneas de continuación.
Nombres
Los nombres de las variables, los nombres de las funciones y las etiquetas de las declaraciones tienen la misma forma, una letra seguida de cero a cinco letras o dígitos. Los nombres de las funciones terminan con un punto. Todos los nombres se pueden incluir en subíndices (el nombre seguido de paréntesis, con varios subíndices separados por comas). Para GOM, los nombres pueden tener hasta 24 caracteres y pueden incluir el carácter de subrayado (_).
Pocas palabras clave en el idioma son palabras reservadas, ya que la mayoría tienen más de seis letras o están rodeadas de puntos. Existe un conjunto estándar de abreviaturas que se pueden utilizar para reemplazar las palabras más largas. Se componen de la primera y la última letra de las palabras clave con un apóstrofo entre ellas, como W'R para WHENEVER y D'N para DIMENSION.
Tipos de datos
MAD utiliza el término "modo" para sus tipos de datos. Se admiten cinco modos básicos:
- Entero escrito con o sin un factor de escala (1, +1, -1, 1K10, 1K) o como constantes octales (hasta 7777777777777K);
- Punto flotante escrito con o sin exponente (0., 1.5, -0.05, +100.4, -4., .05E-2, -.05E2, 5E02, 5.E2);
- Booleano (1B para verdadero y 0B para falso);
- Etiqueta de declaración y
- Nombre de función escrito como un nombre seguido de un punto (SQRT.).
El modo de una constante se puede redefinir agregando el carácter M seguido de un solo dígito al final de la constante, donde 0 indica punto flotante, 1 entero, 2 booleano, 3 nombre de función y 4 etiqueta de instrucción.
Para GOM se agregan seis modos adicionales: CARÁCTER, INTEGRO CORTO, INTEGRO DE BYTE, INTEGRO LARGO, PUNTERO y REGISTRO DINÁMICO.
Las constantes alfabéticas o de caracteres se almacenan como números enteros y se escriben usando el signo de dólar como delimitador ($ ABCDEF $) con signos de dólar dobles que se usan para ingresar un signo de dólar verdadero ($$$. 56 $ es 56 centavos). Las cadenas de más de seis caracteres se representan mediante matrices.
Matrices y matrices
- No hay límite en el número de dimensiones.
- Se permiten subíndices negativos y cero, así como de coma flotante.
- Las matrices se almacenan en ubicaciones de memoria consecutivas en el orden determinado variando primero el subíndice situado más a la derecha.
- Las matrices pueden ser referenciadas usando un subíndice para cada dimensión, NOMBRE (s 1 , s 2 , s 3 ), o usando un solo subíndice, NOMBRE (s 1 ).
- Las listas de entrada-salida, declaraciones VECTOR VALUES y algunas subrutinas permiten el uso de notación de bloque, que tiene la forma A, ..., B o A ... B, que es una referencia a toda la región de A a B. inclusivo. En términos de un vector, A (1) ... A (N) sería A (1), A (2), A (3), ..., A (N).
- Hay instalaciones que permiten cambiar dimensiones en tiempo de ejecución; permitir que el programador varíe la ubicación del elemento inicial en una matriz dentro del bloque general que se ha reservado para la matriz; y permitir que se especifique un mapeo de almacenamiento arbitrario.
Operadores
Operadores aritméticos
Operadores de puntero (solo GOM)
| Operadores relacionales
operadores booleanos
Operadores de bits (solo GOM)
|
Declaraciones de declaraciones
Las variables pueden declararse implícita o explícitamente. De forma predeterminada, se supone que todas las variables declaradas implícitamente son de punto flotante. La instrucción NORMAL MODE IS se puede utilizar para cambiar este valor predeterminado.
|
|
Declaraciones ejecutables
|
|
Declaraciones de entrada y salida
|
|
Funciones
Los nombres de las funciones terminan con un punto. Se admiten funciones internas y externas. Las funciones internas se compilan como parte del programa en el que se utilizan y comparten declaraciones y variables con el programa principal. Las funciones externas se compilan por separado y no comparten declaraciones ni variables. Se permite una definición de una declaración de funciones internas. Se permiten funciones recursivas, aunque la función debe realizar parte del trabajo de guardado y restauración requerido por sí misma.
|
|
Definición y redefinición de operador
Una de las características más interesantes de MAD es la capacidad de ampliar el lenguaje redefiniendo los operadores existentes, definiendo nuevos operadores o definiendo nuevos tipos de datos (modos). Las definiciones se realizan utilizando declaraciones de declaración MAD y mnemónicos en lenguaje ensamblador incluidos después de la declaración hasta la pseudoinstrucción END que implementan la operación.
- DEFINIR OPERADOR BINARIO operación definida , rango de PRECEDENCIA operación existente MODO ESTRUCTURA opciones de modo
- DEFINIR OPERADOR UNARIO operación definida , rango de PRECEDENCIA operación existente MODO ESTRUCTURA opciones de modo
- ESTRUCTURA DEL MODO mode-no = modo-no existente-op mode-no
- ESTRUCTURA DEL MODO modo-no = modo-no existente- modo de operación -no MISMA SECUENCIA QUE modo-no existente- modo de operación -no
dónde:
- el rango es uno de MISMO QUE, MENOR QUE O MAYOR QUE; y
- Las opciones de modo son las opciones que aparecen en la instrucción MODE STRUCTURE.
Hay tres paquetes predefinidos de definiciones (MATRIX, DOUBLE PRECISION y COMPLEX) disponibles para su inclusión en los programas fuente MAD utilizando la instrucción INCLUDE.
- INCLUYE paquete
Ver también
- ALGOL 58
- ALGOL 60
Notas
- ^ Alt, Franz (1967). Avances en informática . Prensa académica . pag. 143. ISBN 0-12-012104-2.
- ^ Notas técnicas , publicaciones del Centro de Computación de la Universidad de Michigan, 1965-1999
- ^ Informes técnicos , publicaciones del Centro de computación de la Universidad de Michigan, 1965-1999
- ↑ Topical File 1960-1986 , University of Michigan Computing Center records, 1952-1996
- ^ MAD (Decodificador de algoritmo de Michigan) 1960-1979 , Registros del Centro de Computación de la Universidad de Michigan, 1952-1996
- ^ Un manual de referencia del usuario para el decodificador de algoritmos de Michigan (MAD) para IBM 7090 , Laboratorio de computación digital, Graduate College, Universidad de Illinois, 1962, 221 páginas
- ^ a b El decodificador de algoritmos de Michigan (El manual MAD) , Bruce W. Arden, edición revisada 1966
- ^ a b c George Gray (junio de 2002). "UNIVAC y ALGOL" . Boletín de Historia de Unisys . 6 (2). Archivado desde el original el 29 de junio de 2017.
- ^ a b El Manual MAD / I , Bolas, Springer y Srodawa, Informe técnico 32 de CONCOMP, 1970, Universidad de Michigan, Ann Arbor, 194 páginas
- ^ Volumen 2 de MTS: Descripciones de archivos públicos , Centro de computación de la Universidad de Michigan, 1990, p. 14
- ^ a b c d Manual de GOM , Don Boettner, Centro de Computación de la Universidad de Michigan, Ann Arbor, junio de 1989
- ^ a b c Lenguajes de computadora - Principios e historia Archivado el 7 de junio de 2011 en la Wayback Machine , Sammet, Jean E., Englewood Cliffs, Nueva Jersey, Prentice-Hall 1969, p. 205
- ^ En agosto de 2010, cuando se le preguntó acerca de la declaración de Jean Sammet de que "MAD no se parece a ALGOL 58 de ninguna manera significativa", Bruce Arden escribió: "Con respecto a Jean Sammet, es posible que haya combinado las dos versiones de IAL (58 y 60 ). En la versión posterior, la versión 58 no dijo nada sobre qué palabras (o idioma) deberían usarse para identificar declaraciones condicionales y de transferencia, lo que llevó, por razones de análisis, a palabras como WHENEVER. También hubo algunas características adicionales en MAD que iban más allá de las 58 especificaciones. "
- ^ Documentación y fuente de los primeros mensajes y correo electrónico , Tom Van Vleck
- ^ "... Doug McIlroy y Bob Morris escribieron la escorrentía de Multics en BCPL basándose en la versión MAD de Jerry Saltzer de RUNOFF para CTSS", "Funciones del software Multics: Sección 1.7.7" , sitio web de Multicans. Consultado el 10 de noviembre de 2018.
- ^ Sistema de tiempo compartido compatible (1961-1973): Resumen conmemorativo del cincuentenario , David Walden y Tom Van Vleck (Eds), 2011, IEEE Computer Society. Consultado el 10 de noviembre de 2018.
- ^ "Glosario de términos y siglas de Multics" , Tom Van Vleck, sitio Web de Multicans.
- ^ Una entrevista con Brian Kernighan: Breeding Little Languages , por Allen Noren, 2009
- ^ Shneiderman, Ben; Plaisant, Catherine (7 de mayo de 2004). Diseño de la interfaz de usuario (4ª ed.). Addison Wesley . ISBN 978-0-321-19786-3.
- ^ Bernard A. Galler; Enid H. Galler (enero de 2001). "Una entrevista de carrera con Bernie Galler". IEEE Annals of the History of Computing . 23 (1): 22–33. doi : 10.1109 / 85.910847 . ISSN 1058-6180 .
Referencias
- Una descripción abreviada del lenguaje del compilador MAD , Fernando J. Corbató , Jerome H. Saltzer , Neil Barta y Thomas N. Hastings, MIT Computation Center Memorandum CC-213, junio de 1963.
- CLSYS, un programa para facilitar el uso del traductor MAD para lotes grandes (del tamaño de una clase) , Jerome H. Saltzer, Memorando CC-204 del Centro de Computación del MIT. Febrero de 1963.
- Una cartilla informática para el lenguaje loco , Elliott Irving Organick , 1961.
- Organización interna del traductor MAD , Arden, BW, Galler, BA y Graham, RM, págs. 28–31, CACM Volumen 4 No. 1 (enero de 1961)
- Introducción a los métodos algorítmicos que utilizan el lenguaje MAD , Alan B. Marcovitz y Earl J. Schweppe, Macmillan, 1966.
- Introducción a las computadoras digitales y el lenguaje MAD , Brice Carnahan, Universidad de Michigan.
- El lenguaje de las computadoras , Bernard A. Galler, Universidad de Michigan, McGraw-Hill, 1962.
- MAD en Michigan: su función y características , Arden, BW, Galler, BA y Graham, RM, págs. 27–28, Datamation, Volumen 7 No. 12 (diciembre de 1961)
enlaces externos
- Retrocompilador de Eric Raymond para MAD
- Un ejemplo trivial de un programa MAD
- Compatibilidad con IBM 7094 de Dave Pitts : tiene un entorno CTSS que incluye la versión MIT de MAD.