MAD (язык программирования)

редактировать
СУМАСШЕДШИЙ
Парадигма Императив
Разработчик Галлер, Арден и Грэм
Впервые появился 1959 г.
Операционные системы УМЭС, МТС, ЦТСС и др.
Основные реализации
IBM 704, IBM 7090, UNIVAC 1108, Philco 210-211, IBM S / 360 и IBM S / 370
Диалекты
MAD, MAD / I, GOM
Под влиянием
IAL, АЛГОЛ 58

MAD ( Michigan Algorithm Decoder) - это язык программирования и компилятор для IBM 704, а затем и для IBM 709, IBM 7090, IBM 7040, UNIVAC 1107, UNIVAC 1108, Philco 210-211 и, в конечном итоге, для мэйнфреймов IBM S / 370. Разработанный в 1959 году в Университете штата Мичиган по Bernard Galler, Брюс Арден и Роберт М. Грэм, MAD является вариант Алголом язык. Он широко использовался для обучения программированию в колледжах и университетах в 1960-х годах и сыграл незначительную роль в разработке компьютерных операционных систем CTSS, Multics и Michigan Terminal System.

Архивы Исторической библиотеки Bentley при Мичиганском университете содержат справочные материалы по развитию MAD и MAD / I, в том числе распечатки трех погонных футов с рукописными пометками и оригинальные печатные руководства.

СОДЕРЖАНИЕ
  • 1 MAD, MAD / I и GOM
  • 2 История
  • 3 MAD, MAD Magazine и Альфред Э. Нойман
  • 4 Пример "Hello, world"
  • 5 языковых элементов
    • 5.1 Формат ввода
    • 5.2 Имена
    • 5.3 Типы данных
    • 5.4 Массивы и матрицы
    • 5.5 Операторы
      • 5.5.1 Арифметические операторы
      • 5.5.2 Операторы-указатели (только GOM)
      • 5.5.3 Операторы отношения
      • 5.5.4 Логические операторы
      • 5.5.5 Битовые операторы (только GOM)
    • 5.6 Заявления о декларации
    • 5.7 Исполняемые операторы
    • 5.8 Операторы ввода и вывода
    • 5.9 Функции
  • 6 Определение и переопределение оператора
  • 7 См. Также
  • 8 Примечания
  • 9 ссылки
  • 10 Внешние ссылки
MAD, MAD / I и GOM

Есть три компилятора MAD:

  1. Оригинальный MAD, компилятор разработан в 1959 году в Университете штата Мичиган для IBM 704 и более поздних версий в IBM 709 и IBM 7090 мэйнфреймов компьютеров под управлением Мичиганского университета исполнительной системы (UMES) и Compatible Time-Sharing System (CTSS) операционных систем. В середине 1960-х годов MAD был перенесен в Университете Мэриленда на UNIVAC 1108. Версии MAD также были доступны для Philco 210-211 и UNIVAC 1107.
  2. MAD / I, «расширенная» версия MAD для компьютеров серии IBM System / 360, работающих под управлением Michigan Terminal System (MTS). Работа над новым компилятором началась в 1965 году в рамках спонсируемого ARPA проекта CONCOMP в Мичиганском университете. По мере продвижения работы постепенно становилось ясно, что MAD / I был новым языком, независимым от исходной версии MAD 7090.
  3. GOM ( G ood O ld M AD), повторная реализация оригинального 7090 MAD для серии мэйнфреймов IBM System / 370, на которых работает Michigan Terminal System (MTS). GOM был создан в начале 1980-х Доном Беттнером в вычислительном центре Мичиганского университета.
История

Хотя MAD был мотивирован АЛГОЛОМ 58, он ни в чем не похож на АЛГОЛ 58.

Программы, написанные на MAD, включали MAIL, RUNOFF, одну из первых систем обработки текста, и несколько других утилит, все в рамках Совместимой системы разделения времени (CTSS). Была проделана работа над дизайном компилятора MAD для Multics, но он так и не был реализован.

Ниже приводится интересная цитата из интервью с Брайаном Керниганом, когда его спросили: «Что вас зацепило программированием?»:

Я думаю, что больше всего мне нравилось программировать, когда я летом 1966 года работал в Project MAC в Массачусетском технологическом институте, где я работал над программой, которая создавала рабочую ленту для нового GE 645 в первые дни существования Multics. Я писал в MAD, что было намного проще и приятнее, чем FORTRAN и COBOL, которые я написал ранее, и я использовал CTSS, первую систему разделения времени, которая была бесконечно проще и приятнее, чем перфокарты.

MAD был довольно быстрым по сравнению с некоторыми другими компиляторами того времени. Поскольку многие люди были заинтересованы в использовании языка FORTRAN и все же хотели получить скорость компилятора MAD, была разработана система под названием MADTRAN (написанная на MAD). MADTRAN был просто переводчиком с FORTRAN на MAD, который затем производил машинный код. MADTRAN распространялся через SHARE.

MAD / I имеет синтаксическую структуру, подобную Алголом 60 вместе с важными функциями от оригинального MAD и от PL / I. MAD / I был разработан как расширяемый язык. Он был доступен для использования под MTS и предоставил много новых идей, которые перекочевали на другие языки, но компиляции MAD / I были медленными, и MAD / I никогда не распространился на широкое использование по сравнению с исходным 7090 MAD.

GOM - это, по сути, язык 7090 MAD, модифицированный и расширенный для архитектуры 360/370 с некоторой разумной адаптацией, чтобы лучше соответствовать текущим методам программирования и задачам. Система сообщений МТС была написана на языке GOM.

MAD, журнал MAD и Альфред Э. Нойман
Вывод на строчный принтер после ошибки компилятора MAD на компьютере IBM 704 в Мичиганском университете, c. 1960 г.

В предварительной версии оригинального MAD, как отсылка к тезке MAD, журналу MAD, когда программа содержала слишком много ошибок времени компиляции, компилятор печатал полностраничное изображение Альфреда Э. Ноймана с использованием ASCII-арта. Подпись гласила: «Посмотрите на этого человека о своей программе - он может захотеть опубликовать ее. Он никогда не беспокоится - но, судя по виду вашей программы, вам следует». Эта функция не была включена в окончательную официальную версию. Однако он был включен в производственную версию для IBM 7040.

А Берни Галлер вспоминает:

К тому времени, когда мы разработали язык, который, как мы думали, стоит делать и для которого мы могли бы сделать компилятор, мы уже не могли называть его Algol; это действительно было иначе. Именно тогда мы приняли название MAD от Michigan Algorithm Decoder. У нас было забавное общение с людьми из Mad Magazine, когда мы попросили разрешения использовать имя MAD. В очень забавном письме они сказали нам, что подадут на нас в суд и все остальное, но закончили угрозу PS внизу - «Конечно, продолжайте». К сожалению, это письмо потеряно.
Пример "Привет, мир"

Программа- пример « hello, world » выводит строку «Hello, world» на терминал или экран.

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

Первый символ строки рассматривается как логический элемент управления кареткой, в этом примере это символ «0», который вызывает печать строки с двойным интервалом.

В качестве альтернативы можно использовать сокращения, и компилятор развернет их в листинге:

P'T HELLOW V'S HELLOW=$13h0Hello, world*$ E'M
Элементы языка

MAD и GOM, но не MAD / I, состоят из следующих элементов:

Формат ввода

Программы MAD представляют собой серию утверждений, записанных на перфокартах, обычно по одному утверждению на карту, хотя утверждение может быть продолжено на нескольких картах. Столбцы 1-10 содержат необязательную метку оператора, комментарии или примечания помечаются буквой «R» в столбце 11, а столбцы 73-80 не используются и могут содержать идентификатор последовательности. Пробелы не имеют значения где-либо, кроме символьных констант. Для GOM ввод - произвольная форма без поля последовательности, и строки могут быть длиной до 255 символов; строки, начинающиеся со звездочки (*), являются комментариями; а строки, начинающиеся со знака «плюс» (+), являются линиями продолжения.

Имена

Имена переменных, имена функций и метки операторов имеют одинаковую форму: буквы, за которыми следуют от нуля до пяти букв или цифр. Имена функций заканчиваются точкой. Все имена могут иметь нижние индексы (имя, за которым следует круглые скобки, с несколькими нижними индексами, разделенными запятыми). Имена GOM могут содержать до 24 символов и могут включать символ подчеркивания (_).

Некоторые ключевые слова в языке являются зарезервированными, поскольку большинство из них длиннее шести букв или окружены точками. Существует стандартный набор сокращений, которые можно использовать для замены более длинных слов. Они состоят из первой и последней букв ключевых слов с апострофом между ними, например W'R для WHENEVER и D'N для DIMENSION.

Типы данных

MAD использует термин «режим» для своих типов данных. Поддерживаются пять основных режимов:

  • Целое число, записанное с масштабным коэффициентом или без него (1, +1, -1, 1K10, 1K) или как восьмеричные константы (до 7777777777777K);
  • Плавающая точка, записанная с показателем степени или без него (0., 1.5, -0.05, +100.4, -4.,.05E-2, -.05E2, 5E02, 5.E2);
  • Boolean (1B для истины и 0B для false);
  • Этикетка с заявлением и
  • Имя функции записывается как имя, за которым следует точка (SQRT.).

Режим константы можно переопределить, добавив символ M, за которым следует одна цифра в конце константы, где 0 указывает на плавающую точку, 1 целое число, 2 логических значения, 3 имени функции и 4 метки оператора.

Для GOM добавлены шесть дополнительных режимов: CHARACTER, SHORT INTEGER, BYTE INTEGER, LONG INTEGER, POINTER и DYNAMIC RECORD.

Буквенные или символьные константы хранятся в виде целых чисел и записываются с использованием знака доллара в качестве разделителя ($ ABCDEF $) с двойными знаками доллара, используемыми для ввода истинного знака доллара ($$$. 56 $ - 56 центов). Строки длиной более шести символов представлены массивами.

Массивы и матрицы

  • Нет ограничений на количество измерений.
  • Допускаются отрицательные и нулевые индексы, а также индексы с плавающей запятой.
  • Матрицы хранятся в последовательных ячейках памяти в порядке, определяемом первым изменением самого правого нижнего индекса.
  • На матрицы можно ссылаться с использованием нижнего индекса для каждого измерения NAME (s 1, s 2, s 3) или с использованием одного нижнего индекса NAME (s 1).
  • Списки ввода-вывода, операторы VECTOR VALUES и некоторые подпрограммы позволяют использовать блочную нотацию, которая имеет форму A,..., B или A... B, которая является ссылкой на всю область от A до B. включительно. В терминах вектора A (1)... A (N) будет A (1), A (2), A (3),..., A (N).
  • Есть средства, позволяющие изменять размеры во время работы; разрешение программисту изменять положение начального элемента в массиве внутри всего блока, который был выделен для массива; и позволяет указать произвольное отображение хранилища.
Список операторов, операторов и функций

Операторы

Заявления декларации

Переменные могут быть объявлены явно или неявно. По умолчанию предполагается, что все неявно объявленные переменные имеют значения с плавающей запятой. Для изменения этого значения по умолчанию можно использовать оператор NORMAL MODE IS.

Исполняемые операторы

Операторы ввода и вывода

Функции

Имена функций заканчиваются точкой. Поддерживаются внутренние и внешние функции. Внутренние функции компилируются как часть программы, в которой они используются, и разделяют объявления и переменные с основной программой. Внешние функции компилируются отдельно и не имеют общих объявлений и переменных. Допускается определение внутренних функций одним оператором. Рекурсивные функции разрешены, хотя функция должна сама выполнять некоторые необходимые операции по сохранению и восстановлению.

Определение и переопределение оператора

Одной из наиболее интересных функций MAD ​​является возможность расширения языка путем переопределения существующих операторов, определения новых операторов или определения новых типов данных (режимов). Определения сделаны с использованием операторов объявления MAD и мнемоники языка ассемблера, включенной после объявления до псевдо-инструкции END, реализующей операцию.

  • DEFINE BINARY OPERATOR defined-op, PRECEDENCE rank existing-op MODE STRUCTURE mode-options
  • DEFINE UNARY OPERATOR defined-op, PRECEDENCE rank existing-op MODE STRUCTURE mode-options
  • СТРУКТУРА РЕЖИМА mode-no = mode-no existing-op mode-no
  • СТРУКТУРА РЕЖИМА режим-нет = режим-нет существующий-операционный режим-нет ТАКАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ, КАК режим-нет- существующий-операционный режим-нет

куда:

  • ранг может быть одним из таких же, НИЖЕ или ВЫШЕ, ЧЕМ; а также
  • Параметры режима - это параметры, которые появляются в операторе MODE STRUCTURE.

Три предопределенных пакета определений (MATRIX, DOUBLE PRECISION и COMPLEX) доступны для включения в исходные программы MAD с помощью оператора INCLUDE.

  • ВКЛЮЧИТЬ пакет
Смотрите также
Примечания
использованная литература
внешние ссылки
Последняя правка сделана 2023-12-31 10:31:00
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте