MATH-MATIC — это маркетинговое название компилятора AT-3 (Algebraic Translator 3), раннего языка программирования для UNIVAC I и UNIVAC II.
MATH-MATIC был создан примерно в 1955 году командой, возглавляемой Чарльзом Кацем под руководством Грейс Хоппер. В 1957 году было подготовлено предварительное руководство[1], а в следующем году и окончательное[2].
Синтаксически MATH-MATIC был схож с существовавшим в то же время ориентированным на выполнение коммерческих задач языком FLOW-MATIC, отличавшимся алгебраическим представлением выражений, поддержкой чисел с плавающей запятой и массивов, а не структур записи как в MATH-MATIC.
Особенности
При наличии специального пишущего устройства выражения в MATH-MATIC могут содержать числовые показатели, включая десятичные числа и обыкновенные дроби.[3]
Программы MATH-MATIC могут включать вставки языка ассемблера ARITH-MATIC и машинного кода UNIVAC.[4]
Память UNIVAC I хранила 1000 машинных слов, когда как его приемник UNIVAC II 2000. Но MATH-MATIC позволял запускать более крупные программы, автоматически генерируя код для чтения наложенных сегментов с ленты UNISERVO по мере необходимости. Компилятор попытался избежать разбиения циклов на сегменты.[4]
Влияние
Ожидая сотрудничество с ACM, которое приведёт к появлению Алгол-58, Общество прикладной математики и механики написало, что считает MATH-MATIC наиболее близким и доступным языком для своих целей.[5]
В отличие от Фортрана Бэкуса, MATH-MATIC не делал акцент на скорости выполнения скомпилированных программ. Машины UNIVAC не имели аппаратного обеспечения чисел с плавающей запятой, поэтому MATH-MATIC транслировался в псевдо-ассемблерный код A-3 (ARITH-MATIC), а не в непосредственно машинный код UNIVAC, что ограничивало его полезность.[6]
Пример программы
(2) TYPE-IN ALPHA .
(2A) READ A B C SERVO 4 STORAGE A IF SENTINEL JUMP TO SENTENCE 8 .
(3) READ D F SERVO 5 .
(4) VARY Y 1 (0.1) 3 SENTENCE 5 THRU 6 .
(5) X1=(7*10<sup>3</sup>*Y*A*SIN ALPHA)<sup>3</sup> / (B POW D+C POW E) .
(6) WRITE AND EDIT A Y D E X1 SERVO 6 .
(7) JUMP TO SENTENCE 2A .
(8) CLOSE-INPUT AND REWIND SENTENCE 3 .
(9) CLOSE-OUTPUT SENTENCE 6 .
(10) READ F G H N SERVO 4 STORAGE A IF SENTINEL JUMP TO SENTENCE 20 .
(11) EXECUTE SENTENCE 3 .
(12) X2 = (3 ROOT (E-G)+LOG (D+N)) / (F<sup>2.6</sup>*EXP H) .
(13) WRITE EDIT F D F X2 SERVO 6 .
(16) JUMP TO SENTENCE 10 .
(20) STOP .
Примечания
- ↑ Ash (1957)
- ↑ Univac (1958)
- ↑ Sammet (1969) p. 135
- ↑ 1 2 Sammet (1969) p. 137
- ↑ Bemer (1969) p. 161
- ↑ Knuth (1976) p. 90
Ссылки