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


Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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 . [1]

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

MAD, MAD / I и GOM

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

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

История

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

Программы , написанные в MAD включены MAIL, [14] СТОК , [15] один из первых систем обработки текстов, а также ряд других утилит , все под Compatible Time-Sharing System (CTSS). [16] Была проделана работа над дизайном компилятора MAD для Multics , но он так и не был реализован. [17]

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

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

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

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

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

MAD, журнал MAD и Альфред Э. Нойман

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

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

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

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

Пример "Привет, мир"

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

ФОРМАТ ПЕЧАТИ HELLOW
ВЕКТОРНЫЕ ЗНАЧЕНИЯ ПРИВЕТ = 13ч0 $ Привет, мир * $
КОНЕЦ ПРОГРАММЫ

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

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

НЕ ПРИВЕТ
V'S HELLOW = $ 13h0Hello, world * $
ЭМ

Элементы языка

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

Формат ввода

Программы 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 СТРУКТУРА РЕЖИМА Опции режима
  • 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.

  • ВКЛЮЧИТЬ пакет

Смотрите также

  • АЛГОЛ 58
  • АЛГОЛ 60

Примечания

  1. ^ Альт, Франц (1967). Достижения в области компьютеров . Академическая пресса . п. 143. ISBN. 0-12-012104-2.
  2. ^ Технические памятки , публикации вычислительного центра Мичиганского университета, 1965-1999 гг.
  3. ^ Технические отчеты , публикации вычислительного центра Мичиганского университета, 1965-1999 гг.
  4. ^ Тематический файл 1960-1986 , отчеты вычислительного центра Мичиганского университета, 1952-1996 гг.
  5. ^ MAD (Michigan Algorithm Decoder) 1960-1979 , отчеты вычислительного центра Мичиганского университета, 1952-1996
  6. ^ A User's Reference Manual For The Michigan Algorithm Decoder (MAD) For IBM 7090 , Digital Computer Laboratory, Graduate College, University of Illinois, 1962, 221 страница.
  7. ^ a b Michigan Algorithm Decoder (The MAD Manual) , Брюс В. Арден, пересмотренное издание 1966 г.
  8. ^ a b c Джордж Грей (июнь 2002 г.). «УНИВАК и АЛГОЛ» . Информационный бюллетень по истории Unisys . 6 (2). Архивировано из оригинального 29 июня 2017 года.
  9. ^ a b Руководство MAD / I , Болас, Спрингер и Сродава, Технический отчет CONCOMP 32, 1970, Мичиганский университет, Анн-Арбор, 194 страницы
  10. MTS Volume 2: Public File Descriptions , University of Michigan Computing Center, 1990, p. 14
  11. ^ a b c d Руководство GOM , Дон Боттнер, Вычислительный центр Мичиганского университета, Анн-Арбор, июнь 1989 г.
  12. ^ a b c Компьютерные языки - принципы и история Архивировано 7 июня 2011 г. в Wayback Machine , Sammet, Jean E., Englewood Cliffs, NJ, Prentice-Hall 1969, p. 205
  13. В августе 2010 года, когда его спросили о заявлении Джин Саммет о том, что «MAD не похож на АЛГОЛ 58 каким-либо существенным образом», Брюс Арден написал: «Что касается Джин Саммет, она, возможно, объединила две версии IAL (58 и 60 ). В более поздней версии, в версии 58 ничего не говорилось о том, какие слова (или язык) следует использовать для обозначения условных операторов и операторов передачи, что привело по причинам синтаксического анализа к таким словам, как WHENEVER.Также в MAD были некоторые дополнительные функции, выходящие за рамки спецификаций 58. "
  14. ^ Документация и источник для ранней электронной почты и обмена сообщениями , Том Ван Влек
  15. ^ "... Дуг Макилрой и Боб Моррис написали сток Multics в BCPL на основе MAD-версии RUNOFF для CTSS Джерри Зальцера.", "Функции программного обеспечения Multics: раздел 1.7.7" , веб-сайт Multicans. Проверено 10 ноября 2018.
  16. ^ Совместимая система разделения времени (1961-1973): Обзор памятной даты пятидесятой годовщины , Дэвид Уолден и Том Ван Влек (редакторы), 2011, IEEE Computer Society. Проверено 10 ноября 2018.
  17. ^ «Глоссарий аббревиатур и терминов Multics» , Том Ван Флек, веб-сайт Multicans.
  18. ^ Интервью с Брайаном Керниганом: Разведение малых языков , Аллен Норен, 2009
  19. ^ Шнейдерман, Бен; Плезант, Екатерина (2004-05-07). Проектирование пользовательского интерфейса (4-е изд.). Эддисон Уэсли . ISBN 978-0-321-19786-3.
  20. ^ Бернард А. Галлер; Энид Х. Галлер (январь 2001 г.). «Карьерное интервью с Берни Галлером». IEEE Annals of the History of Computing . 23 (1): 22–33. DOI : 10.1109 / 85.910847 . ISSN 1058-6180 . 

использованная литература

  • Сокращенное описание языка компилятора MAD , Фернандо Дж. Корбато , Джером Х. Зальцер , Нил Барта и Томас Н. Гастингс, Меморандум CC-213 вычислительного центра Массачусетского технологического института, июнь 1963 г.
  • CLSYS, программа для облегчения использования транслятора MAD для больших (размер класса) пакетов , Джером Х. Зальцер, Меморандум CC-204 вычислительного центра Массачусетского технологического института. Февраль 1963 г.
  • Компьютерный учебник по безумному языку , Эллиот Ирвинг Органик , 1961.
  • Внутренняя организация переводчика MAD , Арден, Б.В., Галлер, Б.А. и Грэм, Р.М., стр. 28–31, CACM Volume 4 No. 1 (январь 1961 г.)
  • Введение в алгоритмические методы с использованием языка MAD , Алан Б. Марковиц и Эрл Дж. Швеппе, Macmillan, 1966.
  • Введение в цифровые компьютеры и язык MAD , Брайс Карнахан, Мичиганский университет.
  • Язык компьютеров , Бернард А. Галлер, Мичиганский университет, Макгроу-Хилл, 1962.
  • MAD в Мичигане: его функции и особенности , Arden, BW, Galler, BA, and Graham, RM, pp27–28, Datamation, Volume 7 No. 12 (декабрь 1961 г.)

внешние ссылки

  • Ретро-компилятор Эрика Раймонда для MAD
  • Тривиальный пример MAD-программы
  • Поддержка IBM 7094 Дэйва Питтса - имеет среду CTSS, которая включает версию MAD MAD.
Получено с https://en.wikipedia.org/w/index.php?title=MAD_(programming_language)&oldid=1014037824 "