stringtranslate.com

MAD (lenguaje de programación)

MAD ( Michigan Algorithm Decoder ) es un lenguaje de programación y compilador para los mainframes IBM 704 y posteriormente IBM 709 , IBM 7090 , IBM 7040 , UNIVAC 1107 , UNIVAC 1108 , Philco 210-211 y, finalmente, IBM System/370 . MAD, desarrollado en 1959 en la Universidad de Michigan por Bernard Galler , Bruce Arden y Robert M. Graham , es una variante del lenguaje ALGOL . 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 de computadora Compatible Time-Sharing System (CTSS), Multics y Michigan Terminal System . [1] La versión original del chatbot ELIZA fue escrita en MAD-SLIP . [2]

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. [3] [4] [5] [6]

MAD, MAD/I y GOM

Existen tres compiladores MAD:

  1. MAD original , el compilador desarrollado en 1959 en la Universidad de Michigan para los mainframes IBM 704 y posteriormente IBM 709 e IBM 7090 que ejecutaban los sistemas operativos University of Michigan Executive System (UMES) y Compatible Time-Sharing System (CTSS) . [7] [8] A mediados de la década de 1960, MAD fue portado en la Universidad de Maryland al UNIVAC 1108. [9] También había versiones de MAD disponibles para Philco 210-211 y UNIVAC 1107. [ 9]
  2. MAD/I , una versión "extendida" de MAD para la serie de computadoras IBM System/360 que funcionaban con el Sistema de Terminales de Michigan (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, gradualmente se hizo evidente que MAD/I era un nuevo lenguaje independiente de la versión 7090 original de MAD. [10]
  3. GOM (Good Old MAD), una reimplementación del MAD 7090 original para la serie IBM System/370 de computadoras mainframe que ejecutan el Michigan Terminal System (MTS). GOM fue creado a principios de los años 1980 por Don Boettner en el Centro de Computación de la Universidad de Michigan. [11] [12]

Historia

Si bien MAD estuvo motivado por ALGOL 58 , no se parece a ALGOL 58 de ninguna manera significativa. [13] [14]

Los programas escritos en MAD incluían MAIL, [15] RUNOFF , [16] uno de los primeros sistemas de procesamiento de texto y varias otras utilidades, todas bajo el Sistema de tiempo compartido compatible (CTSS). [17] Se trabajó en un diseño para un compilador MAD para Multics , pero nunca se implementó. [18]

La siguiente es una cita interesante de una entrevista con Brian Kernighan [19] cuando le preguntaron "¿Qué fue lo que te enganchó a la programación?":

Creo que lo más divertido que hice programando fue un trabajo de verano en el Proyecto MAC en el MIT en el verano de 1966, donde trabajé en un programa que creaba 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 más 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 era bastante rápido en comparación con otros compiladores de su época. Debido a que muchas personas estaban interesadas en utilizar el lenguaje FORTRAN y, sin embargo, querían obtener la velocidad del compilador MAD, se desarrolló un sistema llamado MADTRAN (escrito en MAD). MADTRAN era simplemente un traductor de FORTRAN a MAD, que luego producía código de máquina. MADTRAN se distribuyó a través de SHARE . [13]

MAD/I tiene una estructura sintáctica similar a ALGOL 60 junto con características importantes del MAD original y de PL/I . [10] MAD/I fue diseñado como un lenguaje extensible. Estaba disponible para su uso bajo MTS y proporcionó muchas ideas nuevas que se abrieron camino hacia otros lenguajes, pero las compilaciones de MAD/I eran lentas y MAD/I nunca se extendió a un uso generalizado en comparación con el MAD 7090 original. [12]

GOM es esencialmente el lenguaje MAD 7090 modificado y extendido para la arquitectura 360/370 con algunas modificaciones juiciosas para ajustarse mejor a las prácticas y problemas de programación actuales. [12] El sistema de mensajes MTS fue escrito en GOM.

MAD, la revista Mad y Alfred E. Neuman

Salida de impresora de línea después de un error del compilador MAD en una computadora IBM 704 en la Universidad de Michigan, alrededor de 1960

En una versión preliminar del MAD original, como referencia a la revista homónima de MAD , cuando un programa contenía demasiados errores de compilación, el compilador imprimía una imagen a página completa de Alfred E. Neuman usando arte ASCII . El título decía: "Vea a este hombre sobre su programa. Puede que quiera publicarlo. Nunca se preocupa, pero por el aspecto de su programa, usted debería hacerlo". [9] Esta característica no se incluyó en la versión oficial final. [20] Sin embargo, se incluyó en la versión de producción para el IBM 7040.

Y Bernie Galler recuerda:

Cuando diseñamos el lenguaje que pensamos que valdría la pena desarrollar y para el cual podríamos crear un compilador, ya no podíamos llamarlo Algol; realmente era diferente. Fue entonces cuando adoptamos el nombre MAD, por Michigan Algorithm Decoder (Descodificador de algoritmos de Michigan). Tuvimos una interacción divertida con la gente de la revista Mad, cuando les pedimos permiso para usar el nombre MAD. En una carta muy divertida, nos dijeron que nos llevarían a los tribunales y todo lo demás, pero terminaron la amenaza con una posdata al final: "Claro, adelante". Desafortunadamente, esa carta se perdió. [21]

Ejemplo de "Hola, mundo"

El programa de ejemplo " Hola, mundo " imprime la cadena "Hola, mundo" en una terminal o pantalla.

FORMATO DE IMPRESIÓN HOLAVALORES DEL VECTOR HELLOW=$13h0Hola, mundo*$FIN DEL PROGRAMA

El primer carácter de la línea se trata como 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 utilizar contracciones y el compilador las expandirá en el listado:

P'T HOLAV'S HELLOW=$13h0Hola mundo*$Soy yo

Elementos del lenguaje

MAD y GOM, pero no MAD/I, se componen de los siguientes elementos: [8] [12] [13]

Formato de entrada

Los programas MAD son una serie de instrucciones escritas en tarjetas perforadas, generalmente una instrucción por tarjeta, aunque una instrucción puede continuar en varias tarjetas. Las columnas 1 a 10 contienen una etiqueta de instrucción opcional, los comentarios o las observaciones se marcan con la letra "R" en la columna 11 y las columnas 73 a 80 no se utilizan y pueden contener un identificador de secuencia. Los espacios no son significativos en ningún lugar que no sea dentro de las constantes de caracteres. Para GOM, la entrada es de formato 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 variables, nombres de funciones y etiquetas de instrucciones tienen el mismo formato: una letra seguida de cero a cinco letras o dígitos. Los nombres de funciones terminan con un punto. Todos los nombres pueden tener subíndices (el nombre seguido de paréntesis, con múltiples subíndices separados por comas). En GOM, los nombres pueden tener hasta 24 caracteres y pueden incluir el carácter de guión bajo (_).

Pocas palabras clave del 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. Estas consisten en 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:

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 declaración.

Para GOM se agregan seis modos adicionales: CARÁCTER, ENTERO CORTO, ENTERO BYTE, ENTERO LARGO, PUNTERO y REGISTRO DINÁMICO .

Las constantes alfabéticas o de caracteres se almacenan como números enteros y se escriben utilizando el signo de dólar como delimitador ( $ABCDEF$ ) y se utilizan signos de dólar dobles 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 arreglos

Lista de operadores, declaraciones y funciones

Operadores

Declaraciones de declaración

Las variables pueden declararse de forma implícita o explícita. De forma predeterminada, se supone que todas las variables declaradas de forma implícita son de punto flotante. La declaración NORMAL MODE IS se puede utilizar para cambiar este valor predeterminado.

Sentencias ejecutables

Declaraciones de entrada y salida

Funciones

Los nombres de 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 funciones internas en una sola declaración. 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 del operador

Una de las características más interesantes de MAD es la capacidad de extender el lenguaje redefiniendo operadores existentes, definiendo nuevos operadores o definiendo nuevos tipos de datos (modos). Las definiciones se realizan utilizando sentencias de declaración MAD y mnemónicos de lenguaje ensamblador incluidos a continuación de la declaración hasta la pseudoinstrucción END que implementa la operación.

dónde:

Hay tres paquetes de definiciones predefinidos (MATRIX, DOUBLE PRECISION y COMPLEX) disponibles para su inclusión en programas fuente MAD utilizando la declaración INCLUDE.

Véase también

Notas

  1. ^ Alt, Franz (1967). Avances en computadoras . Academic Press . pág. 143. ISBN. 0-12-012104-2.
  2. ^ Shrager, Jeff. "ELIZA original de Joseph Weizenbaum".
  3. ^ Memorandos técnicos, publicaciones del Centro de Computación de la Universidad de Michigan, 1965-1999
  4. ^ Informes técnicos, publicaciones del Centro de Computación de la Universidad de Michigan, 1965-1999
  5. ^ Archivo temático 1960-1986, registros del Centro de Computación de la Universidad de Michigan, 1952-1996
  6. ^ MAD (Michigan Algorithm Decoder) 1960-1979, registros del Centro de Computación de la Universidad de Michigan, 1952-1996
  7. ^ Manual de referencia del usuario para el decodificador de algoritmos de Michigan (MAD) para IBM 7090, Digital Computer Laboratory, Graduate College, University of Illinois, 1962, 221 páginas
  8. ^ ab El decodificador de algoritmos de Michigan (Manual MAD), Bruce W. Arden, edición revisada de 1966
  9. ^ abc George Gray (junio de 2002). «UNIVAC y ALGOL». Boletín de noticias sobre la historia de Unisys . 6 (2). Archivado desde el original el 29 de junio de 2017.
  10. ^ ab The MAD/I Manual, Bolas, Springer y Srodawa, CONCOMP Technical Report 32, 1970, Universidad de Michigan, Ann Arbor, 194 páginas
  11. ^ MTS Volumen 2: Descripciones de archivos públicos, Centro de Computación de la Universidad de Michigan, 1990, pág. 14
  12. ^ Manual de GOM abcd , Don Boettner, Centro de Computación de la Universidad de Michigan, Ann Arbor, junio de 1989
  13. ^ abc Lenguajes informáticos: principios e historia
  14. ^ En agosto de 2010, cuando se le preguntó sobre 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 ). A diferencia de la versión posterior, la versión 58 no decía nada sobre qué palabras (o lenguaje) deberían usarse para identificar declaraciones condicionales y de transferencia, lo que llevó, por razones de análisis, a palabras como WHENEVER. También había algunas características adicionales en MAD que iban más allá de las especificaciones de 58".
  15. ^ Documentación y fuentes sobre los primeros sistemas de correo electrónico y mensajería, Tom Van Vleck
  16. ^ "... Doug McIlroy y Bob Morris escribieron Multics runoff en BCPL basándose en la versión MAD de Jerry Saltzer de RUNOFF para CTSS.", "Características del software de Multics: Sección 1.7.7", sitio web de Multicans. Consultado el 10 de noviembre de 2018.
  17. ^ Compatible Time-Sharing System (1961-1973): Fiftieth Anniversary Commemorative Overview, David Walden y Tom Van Vleck (Eds), 2011, IEEE Computer Society. Consultado el 10 de noviembre de 2018.
  18. ^ "Glosario de acrónimos y términos de Multics", Tom Van Vleck, sitio web de Multicans.
  19. ^ Noren, Allen (10 de abril de 2009). «Una entrevista con Brian Kernighan: criando pequeños lenguajes». Comunidad O'Reilly . Archivado desde el original el 30 de junio de 2017. Consultado el 28 de julio de 2023 .
  20. ^ 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.
  21. ^ Galler, Bernard A.; Galler, Enid H. (enero de 2001). "Una entrevista profesional con Bernie Galler". IEEE Annals of the History of Computing . 23 (1): 22–33. doi :10.1109/85.910847. ISSN  1058-6180.

Referencias

Enlaces externos