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