MATH-MATIC é o nome de marketing para o compilador AT-3 (Algebraic Translator 3), uma linguagem de programação antiga para o UNIVAC I e o UNIVAC II.

MATH-MATIC foi escrita começando por volta de 1955 por uma equipa liderada por Charles Katz sob a direção da Grace Hopper. Um manual preliminar foi produzido em 1957 e um manual em sua versão final no ano seguinte.

Sintaticamente, MATH-MATIC era semelhante à linguagem orientada a negócios contemporânea da Univac, FLOW-MATIC, diferindo no fornecimento de expressões de estilo algébrico e aritmética de ponto flutuante, e arrays em vez de estruturas de registro.

Características notáveis

As expressões em MATH-MATIC poderiam conter expoentes numéricos, incluindo decimais e frações, por meio de uma máquina de escrever personalizada.

Os programas em MATH-MATIC poderiam incluir seções de inline assembler de código ARITH-MATIC e código de máquina do UNIVAC.

O UNIVAC I tinha somente 1000 palavras de memória, e o sucessor UNIVAC II tão pouco quanto 2000. O MATH-MATIC permitia programas maiores, gerando automaticamente o código para ler segmentos de sobreposição de fitas UNISERVO como requerido. O computador tentava evitar loops divididos entre os segmentos.Sammet (1969) p. 137

Influência

Ao propor a colaboração com a ACM que levou ao ALGOL 58, o Gesellschaft für Angewandte Mathematik und Mechanik escreveu que considerava a MATH-MATIC a linguagem mais próxima disponível da sua própria proposta.

Em contraste com o FORTRAN de Backus a MATH-MATIC não enfatiza a velocidade de execução dos programas compilados. As máquinas UNIVAC não tem hardware para ponto flutuante, e a MATH-MATIC foi traduzida via código pseudo-assembler da A-3 (ARITH-MATIC) ao invés de diretamente para código de máquina da UNIVAC, limitando sua utilidade.

Programa simples em MATH-MATIC

Um programa simples em MATH-MATIC program:Univac (1958) p. 8

(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*103*Y*A*SIN ALPHA)3 / (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)) / (F2.6*EXP H) . (13) WRITE EDIT F D F X2 SERVO 6 . (16) JUMP TO SENTENCE 10 . (20) STOP . </div>

Categoria:Linguagens de programação Categoria:Linguagens de programação procedurais