MAD (lenguaje de programación) - MAD (programming language)

ENOJADO
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

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 desempeñó un papel menor en el desarrollo de los sistemas operativos informáticos CTSS , Multics y Michigan Terminal System .

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.

MAD, MAD / I y GOM

Hay tres compiladores MAD:

  1. 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 . A mediados de la década de 1960, MAD se trasladó en la Universidad de Maryland a UNIVAC 1108 . Las versiones de MAD también estaban disponibles para Philco 210-211 y UNIVAC 1107 .
  2. 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 idioma independiente de la versión 7090 original de MAD.
  3. 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.

Historia

Si bien MAD fue motivado por ALGOL 58 , no se parece a ALGOL 58 de manera significativa.

Los programas escritos en MAD incluyeron MAIL, RUNOFF , uno de los primeros sistemas de procesamiento de texto, y varias otras utilidades, todas bajo el Compatible Time-Sharing System (CTSS). Se trabajó en el diseño de un compilador MAD para Multics , pero nunca se implementó.

La siguiente es una cita interesante de Una entrevista con Brian Kernighan 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 .

MAD / I tiene una estructura sintáctica similar a ALGOL 60 junto con características importantes de la MAD original y de PL / I . 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.

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. El sistema de mensajes MTS se escribió en GOM.

MAD, MAD Magazine 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, c. 1960

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". Esta característica no se incluyó en la versión oficial final. 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ó.

Ejemplo de "Hola, mundo"

El programa de ejemplo " hola mundo " imprime la cadena "hola mundo" en un terminal o pantalla.

PRINT FORMAT HELLOW
VECTOR VALUES HELLOW=$13h0Hello, world*$
END OF PROGRAM

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 HELLOW
V'S HELLOW=$13h0Hello, world*$
E'M

Elementos del lenguaje

MAD y GOM, pero no MAD / I, se componen de los siguientes elementos:

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. Estos consisten en la primera y última letra de las palabras clave con un apóstrofe 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 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, las declaraciones VECTOR VALUES y algunas subrutinas permiten el uso de la notación de bloques, 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.
Lista de operadores, declaraciones y funciones

Operadores

Declaraciones de declaración

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

Notas

Referencias

enlaces externos