MAD (язык программирования)
Парадигма | процедурный , императивный , структурированный |
---|---|
Семья | АЛГОЛ |
Разработано | Бернард Галлер , Брюс Арден , Роберт М. Грэм |
Разработчик | Мичиганский университет |
Впервые появился | 1959 год |
Дисциплина набора текста | Статический , сильный |
Объем | Лексический |
ТЫ | УМЭС , МТС , ЦТСС и другие |
Основные реализации | |
ИБМ 704 , 7090 , С/360 , С/370 ; УНИВАК 1108 ; Филко 210-211 | |
Диалекты | |
БЕЗУМНЫЙ, БЕЗУМНЫЙ/Я, ГОМ | |
Под влиянием | |
ПОЧЕМУ, АЛГОЛ 58 |
MAD ( Michigan Algorithm Decoder ) — язык программирования и компилятор для IBM 704 , а затем и IBM 709 , IBM 7090 , IBM 7040 , UNIVAC 1107 , UNIVAC 1108 , Philco 210-211 и, в конечном итоге, IBM System/370 для мейнфреймов . MAD, разработанный в 1959 году в Мичиганском университете Бернардом Галлером , Брюсом Арденом и Робертом М. Грэмом , представляет собой вариант языка АЛГОЛ . Он широко использовался для преподавания программирования в колледжах и университетах в 1960-х годах и сыграл незначительную роль в разработке Compatible Time-Sharing System (CTSS), Multics и Michigan Terminal System компьютерных операционных систем . [1] Оригинальная версия чат-бота ELIZA была написана на MAD-SLIP . [2]
Архивы Исторической библиотеки Бентли Мичиганского университета содержат справочные материалы по развитию MAD и MAD/I, в том числе три погонных фута распечаток с рукописными пометками и оригинальные печатные руководства. [3] [4] [5] [6]
МАД, МАД/Я и ГОМ
[ редактировать ]Существует три компилятора MAD:
- Оригинальный MAD , компилятор, разработанный в 1959 году в Мичиганском университете для IBM 704 , а затем и IBM 709 и IBM 7090, мэйнфреймов работающих под управлением систем исполнительной системы Мичиганского университета (UMES) и совместимой системы разделения времени (CTSS) операционных . [7] [8] В середине 1960-х годов MAD был портирован в Университете Мэриленда на UNIVAC 1108 . [9] Версии MAD также были доступны для Philco 210-211 и UNIVAC 1107 . [9]
- MAD/I — «расширенная» версия MAD для IBM System/360, компьютеров серии работающих под управлением Michigan Terminal System (MTS). Работа над новым компилятором началась в 1965 году в рамках проекта CONCOMP, спонсируемого ARPA, в Мичиганском университете. По мере продвижения работы постепенно становилось ясно, что MAD/I — это новый язык, независимый от исходной версии MAD 7090. [10]
- GOM (Старый добрый MAD), повторная реализация исходного 7090 MAD для IBM System / 370, серии мэйнфреймов работающих под управлением Michigan Terminal System (MTS). GOM был создан в начале 1980-х годов Доном Беттнером в Вычислительном центре Мичиганского университета. [11] [12]
История
[ редактировать ]Хотя MAD был основан на АЛГОЛе 58 , он не имеет существенного сходства с АЛГОЛом 58. [13] [14]
Программы, написанные на MAD, включали MAIL, [15] СТОК , [16] одна из первых систем обработки текста и несколько других утилит, все в рамках совместимой системы разделения времени (CTSS). [17] Была проведена работа над проектом компилятора MAD для Multics , но он так и не был реализован. [18]
Ниже приводится интересная цитата из интервью с Брайаном Керниганом. [19] когда его спросили "Что тебя зацепило в программировании?":
- Я думаю, что больше всего удовольствия от программирования мне принесла летняя работа в Project MAC в Массачусетском технологическом институте летом 1966 года, где я работал над программой, которая создавала рабочую ленту для совершенно нового GE 645 на заре Multics. Я писал на MAD, который был намного проще и приятнее, чем на FORTRAN и COBOL, которые я написал ранее, и использовал CTSS, первую систему разделения времени, которая была намного проще и приятнее, чем перфокарты.
MAD был довольно быстрым по сравнению с некоторыми другими компиляторами того времени. Поскольку многие люди были заинтересованы в использовании языка FORTRAN и при этом хотели получить скорость компилятора MAD, была разработана система под названием MADTRAN (написанная на MAD). MADTRAN был просто переводчиком с FORTRAN на MAD, который затем создавал машинный код. MADTRAN распространялся через SHARE . [13]
MAD/I имеет синтаксическую структуру, аналогичную ALGOL 60, вместе с важными функциями исходного MAD и PL/I . [10] MAD/I был разработан как расширяемый язык. Он был доступен для использования под MTS и содержал множество новых идей, которые нашли свое отражение в других языках, но компиляции MAD/I были медленными, и MAD/I так и не получил широкого распространения по сравнению с оригинальным 7090 MAD. [12]
GOM , по сути, представляет собой язык 7090 MAD, модифицированный и расширенный для архитектуры 360/370 с некоторыми разумными изменениями, чтобы лучше соответствовать текущим практикам и проблемам программирования. [12] Система сообщений МТС написана на GOM.
MAD, журнал Mad и Альфред Э. Нойман
[ редактировать ]В предварительной версии оригинального MAD, как отсылка к одноименному журналу MAD, журналу Mad , когда программа содержала слишком много ошибок времени компиляции, компилятор печатал полностраничное изображение Альфреда Э. Ноймана, используя рисунок ASCII . Подпись гласила: «Поговорите с этим человеком о вашей программе. Возможно, он захочет ее опубликовать. Он никогда не беспокоится, но, судя по вашей программе, вам следует это сделать». [9] Эта функция не была включена в окончательную официальную версию. [20] Однако он был включен в производственную версию IBM 7040.
А Берни Галлер вспоминает:
- К тому времени, когда мы разработали язык, который, по нашему мнению, стоило бы создавать и для которого мы могли бы создать компилятор, мы уже не могли называть его Алголом; это действительно было по-другому. Именно тогда мы приняли название MAD для декодера алгоритмов штата Мичиган. У нас был забавный разговор с людьми из журнала Mad, когда мы попросили разрешения использовать название MAD. В очень смешном письме нам сообщили, что подадут в суд и все остальное, но закончили угрозу ПС внизу - "Конечно, давайте". К сожалению, это письмо утеряно. [21]
Пример «Привет, мир»
[ редактировать ]Пример программы « 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, состоят из следующих элементов: [8] [12] [13]
Формат ввода
[ редактировать ]Программы MAD представляют собой серию утверждений, написанных на перфокартах, обычно по одному утверждению на карту, хотя утверждение может быть продолжено на нескольких картах. Столбцы 1–10 содержат необязательные метки операторов, комментарии или примечания помечаются буквой «R» в столбце 11, а столбцы 73–80 не используются и могут содержать идентификатор последовательности. Пробелы не имеют значения нигде, кроме символьных констант. Для GOM ввод осуществляется в произвольной форме, без поля последовательности, а длина строк может достигать 255 символов; строки, начинающиеся со звездочки (*), являются комментариями; а строки, начинающиеся со знака плюс (+), являются линиями продолжения.
Имена
[ редактировать ]Имена переменных, имена функций и метки операторов имеют одинаковую форму: за буквой следуют от нуля до пяти букв или цифр. Имена функций заканчиваются точкой. Все имена могут иметь индексы (за именем следуют круглые скобки, а несколько индексов разделены запятыми). Имена GOM могут иметь длину до 24 символов и могут включать символ подчеркивания (_).
Лишь немногие ключевые слова в языке являются зарезервированными, поскольку большинство из них длиннее шести букв или окружены точками. Существует стандартный набор сокращений, которыми можно заменить более длинные слова. Они состоят из первой и последней букв ключевых слов с апострофом между ними, например W'R для КОГДА и D'N для ИЗМЕРЕНИЯ.
Типы данных
[ редактировать ]MAD использует термин «режим» для своих типов данных. Поддерживаются пять основных режимов:
- Целое число, записанное с масштабным коэффициентом или без него ( 1, +1, -1, 1K10, 1K ) или в виде восьмеричных констант (чтобы 7777777777777К );
- Плавающая точка, записанная с экспонентой или без нее ( 0., 1,5, -0,05, +100,4, -4., .05E-2, -.05E2, 5E02, 5.E2 );
- Логическое значение ( 1B для истинного и 0B — ложь);
- Метка заявления и
- Имя функции, записанное как имя, за которым следует точка ( КОРОТКИЙ. ).
Режим константы можно переопределить, добавив символ M, за которым следует одна цифра в конце константы, где 0 означает плавающую запятую, 1 — целое число, 2 — логическое значение, 3 — имя функции и 4 — метку оператора.
Для GOM добавлено шесть дополнительных режимов: СИМВОЛ, КОРОТКОЕ ЦЕЛОЕ ЧИСЛО, БАЙТОВОЕ ЦЕЛОЕ, ДЛИННОЕ ЦЕЛОЕ, УКАЗАТЕЛЬ и ДИНАМИЧЕСКАЯ ЗАПИСЬ .
Буквенные или символьные константы хранятся как целые числа и записываются с использованием знака доллара в качестве разделителя ( $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).
- Существуют средства, позволяющие изменять размеры во время выполнения; предоставление программисту возможности изменять положение начального элемента массива внутри всего блока, отведенного для массива; и возможность указать произвольное сопоставление памяти.
Определение и переопределение оператора
[ редактировать ]Одной из наиболее интересных особенностей MAD является возможность расширения языка путем переопределения существующих операторов, определения новых операторов или определения новых типов данных (режимов). Определения выполняются с использованием операторов объявления MAD и мнемоники языка ассемблера, включенной после объявления до псевдоинструкции END, реализующей операцию.
- ОПРЕДЕЛЕНИЕ БИНАРНОГО ОПЕРАТОРА определённая операция , ПРИОРИТЕТ ранг существующей операции СТРУКТУРА РЕЖИМА параметры режима
- ОПРЕДЕЛИТЬ УНАРНЫЙ ОПЕРАТОР определённый-оператор , ПРИОРИТЕТ ранжировать существующий-оператор СТРУКТУРА РЕЖИМА параметры режима
- СТРУКТУРА РЕЖИМА mode-no = mode-no существующий-op mode-no
- СТРУКТУРА РЕЖИМА режим-нет = режим-нет существующий-оператор режим-нет ТАКАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ, КАК режим-нет существующий-оператор режим-нет
где:
- ранг может быть одним из значений SAME AS, LOWER THAN или HIGHER THAN; и
- Опции режима — это параметры, которые появляются в операторе MODE STRUCTURE.
Три предопределенных пакета определений (MATRIX, DOUBLE PRECISION и COMPLEX) доступны для включения в исходные программы MAD с помощью оператора INCLUDE.
- ВКЛЮЧИТЬ пакет
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Альт, Франц (1967). Достижения в области компьютеров . Академическая пресса . п. 143. ИСБН 0-12-012104-2 .
- ^ Шрагер, Джефф. «Оригинальная ЭЛИЗА Джозефа Вайценбаума» .
- ^ Технические записки , публикации Вычислительного центра Мичиганского университета, 1965–1999 гг.
- ^ Технические отчеты , публикации Вычислительного центра Мичиганского университета, 1965–1999 гг.
- ^ Тематический файл 1960–1986 гг. , Записи вычислительного центра Мичиганского университета, 1952–1996 гг.
- ^ MAD (декодер алгоритмов Мичигана) 1960–1979 гг. , записи Вычислительного центра Мичиганского университета, 1952–1996 гг.
- ^ Справочное руководство пользователя для декодера алгоритмов Мичигана (MAD) для IBM 7090 , Лаборатория цифровых компьютеров, Аспирантура, Университет Иллинойса, 1962, 221 страница
- ^ Jump up to: а б Декодер алгоритмов Мичигана (Руководство MAD) , Брюс В. Арден, исправленное издание 1966 г.
- ^ Jump up to: а б с Джордж Грей (июнь 2002 г.). «УНИВАК и АЛГОЛ» . Информационный бюллетень истории Unisys . 6 (2). Архивировано из оригинала 29 июня 2017 года.
- ^ Jump up to: а б Руководство MAD/I , Болас, Спрингер и Сродава, Технический отчет CONCOMP 32, 1970 г., Мичиганский университет, Анн-Арбор, 194 страницы.
- ^ MTS Том 2: Описания общедоступных файлов , Вычислительный центр Мичиганского университета, 1990, стр. 14
- ^ Jump up to: а б с д Руководство GOM , Дон Беттнер, Вычислительный центр Мичиганского университета, Анн-Арбор, июнь 1989 г.
- ^ Jump up to: а б с Компьютерные языки — принципы и история
- ↑ В августе 2010 года, когда его спросили о заявлении Джин Саммет о том, что «MAD ничем существенным образом не напоминает АЛГОЛ 58», Брюс Арден написал: «Что касается Джин Саммет, она, возможно, объединила две версии IAL (58 и 60 ). В отличие от более поздняя версия, версия 58, ничего не говорила о том, какие слова (или язык) следует использовать для идентификации условных операторов и операторов переноса, что привело к необходимости синтаксического анализа таких слов, как КОГДА. Также в MAD были некоторые дополнительные функции, выходящие за рамки спецификаций 58. "
- ^ Документация и источник ранней электронной почты и обмена сообщениями , Том Ван Флек
- ^ «... Дуг Макилрой и Боб Моррис написали последнюю версию Multics в BCPL на основе MAD-версии RUNOFF Джерри Зальцера для CTSS.», «Функции программного обеспечения Multics: Раздел 1.7.7» , веб-сайт Multicans. Проверено 10 ноября 2018 г.
- ^ Совместимая система разделения времени (1961-1973): Обзор памятного пятидесятилетия , Дэвид Уолден и Том Ван Флек (редакторы), 2011, Компьютерное общество IEEE. Проверено 10 ноября 2018 г.
- ^ «Глоссарий сокращений и терминов Multics» , Том Ван Флек, веб-сайт Multicans.
- ^ Норен, Аллен (10 апреля 2009 г.). «Интервью с Брайаном Керниганом: разведение маленьких языков» . Сообщество О'Рейли . Архивировано из оригинала 30 июня 2017 года . Проверено 28 июля 2023 г.
- ^ Шнейдерман, Бен; Плезант, Кэтрин (7 мая 2004 г.). Проектирование пользовательского интерфейса (4-е изд.). Эддисон Уэсли . ISBN 978-0-321-19786-3 .
- ^ Галлер, Бернард А.; Галлер, Энид Х. (январь 2001 г.). «Карьерное интервью с Берни Галлером». IEEE Анналы истории вычислений . 23 (1): 22–33. дои : 10.1109/85.910847 . ISSN 1058-6180 .
Ссылки
[ редактировать ]- Сокращенное описание языка компилятора MAD , Фернандо Дж. Корбато , Джером Х. Зальцер , Нил Барта и Томас Н. Гастингс, Меморандум вычислительного центра Массачусетского технологического института CC-213, июнь 1963 г.
- CLSYS, программа, облегчающая использование транслятора MAD для больших пакетов (размера класса) , Джером Х. Зальцер, Меморандум вычислительного центра Массачусетского технологического института CC-204. Февраль 1963 года.
- Компьютерный учебник по безумному языку , Эллиот Ирвинг Органик , 1961.
- Внутренняя организация переводчика MAD , Арден, Б.В., Галлер, Б.А. и Грэм, Р.М., стр. 28–31, CACM, том 4, № 1 (январь 1961 г.)
- Введение в алгоритмические методы с использованием языка MAD , Алан Б. Марковиц и Эрл Дж. Швеппе, Macmillan, 1966.
- Введение в цифровые компьютеры и язык MAD , Брайс Карнахан, Мичиганский университет.
- Язык компьютеров , Бернард А. Галлер, Мичиганский университет, МакГроу-Хилл, 1962.
- MAD в Мичигане: его функции и особенности , Арден, Б.В., Галлер, Б.А., и Грэм, Р.М., стр. 27–28, Datamation, Том 7, № 12 (декабрь 1961 г.)
- Блок-схемы декодера алгоритма Мичигана , составленные ГБ Смитом, Общая программная библиотека SHARE, номер распространения SHARE 1327 PA, 1961 г.
Внешние ссылки
[ редактировать ]- Ретрокомпилятор Эрика Рэймонда для MAD
- Тривиальный пример программы MAD
- Поддержка IBM 7094 Дэйва Питтса — имеет среду CTSS, включающую версию MAD для MIT.