MATH-MATIC (MATH-MATIC)

Перейти к навигации Перейти к поиску

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 .

Примечания

[править | править код]
  1. Ash (1957)
  2. Univac (1958)
  3. Sammet (1969) p. 135
  4. 1 2 Sammet (1969) p. 137
  5. Bemer (1969) p. 161
  6. Knuth (1976) p. 90
  • Ash, R.; Broadwin, E.; Della Valle, V.; Greene, M.; Jenny, A.; Katz, C.; Yu, L. (1957-04-19). Preliminary Manual for MATH-MATIC and ARITH-MATIC Systems for Algebraic Translation and Compilation for UNIVAC I and II (PDF) (Technical report). Philadelphia: Remington Rand Univac. Архивировано (PDF) 26 декабря 2014. Дата обращения: 19 марта 2016.