2.1 Fortran II

«Durante o período de depuração de campo, algumas deficiências no design do sistema, das quais tínhamos conhecimento antes, mas não tínhamos tempo para lidar com elas, vinham constantemente à nossa atenção. No início do outono de 1957, começamos a planejar maneiras de corrigir essas deficiências; um documento datado de 25 de setembro de 1957 [Especificações propostas 1957] as caracteriza como (a) necessidade de melhores diagnósticos, comentários mais claros sobre a natureza dos erros do programa de origem e (b) necessidade de recursos de definição de sub-rotina. “(Embora um diagnóstico do FORTRAN I identifique, em uma impressão, uma vírgula ausente em uma declaração específica, outros podem ser muito enigmáticos.).

Este documento é intitulado “Especificações propostas para o FORTRAN II para o 704"; esboça um diagnóstico mais geral e descreve a nova “definição de sub-rotina” e a instrução END, além de outras que não foram implementadas. Ele descreve como as informações simbólicas são retidas na forma binária realocável de uma sub-rotina para que o “carregador de sub-rotina simbólica binária [BSS]” possa implementar referências a sub-rotinas compiladas separadamente. Ele descreve novos prólogos para essas sub-rotinas e ressalta que misturas de programas binários relocáveis ​​codificados em FORTRAN e em assembly podem ser carregados e executados juntos. Não discute a instrução FUNCTION que também estava disponível no FORTRAN II.

O FORTRAN II foi desenvolvido principalmente por Nelson, Ziller e por mim. Mitchell programou a maioria dos novos códigos do FORTRAN II (com o recurso mais incomum que ela entregou antes do previsto). Ela foi ajudada por Bernyce Brady e LeRoy May. Sheridan planejou e fez as mudanças necessárias em sua parte da seção I; Nutt fez o mesmo para a seção 6. FORTRAN II foi distribuído na primavera de 1958.» (John Backus, The History of Fortran I, II, and III, IBM Research Laboratory, San Jose, California)

Resumo das melhorias com relação ao Fortran I:

  • Declarações SUBROUTINE, FUNCTION, CALL, RETURN e END para a codificação de sub-rotinas;
  • Operações lógicas bit a bit em variáveis inteiras;
  • Uso do ASSIGNed GO TO, onde o GO TO depende do valor atribuído a uma variável:
    • ASSIGN valor TO N
    • GO TO N, (N1, N2,…,Nm)
  • Adição dos formatos O para octal e A para binário na declaração FORMAT.

Exemplo:

C     PROGRAMA FII (FORTRAN II)                                         MAIN0001
C     MOSTRA 1, 2 OU 3 SE O O VALOR LIDO FOR MENOR, IGUAL O MAIOR QUE 0 MAIN0002
C     LER E EXIBIR O VALOR DE I                                         MAIN0003
      READ 1000, I                                                      MAIN0004
      PRINT 1000, I                                                     MAIN0005
C     SE I FOR MENOR, IGUAL OU MAIOR QUE ZERO VÁ PARA 10, 20 OU 30      MAIN0006
      IF (I) 10, 20, 30                                                 MAIN0007
   10 ASSIGN 100 TO N                                                   MAIN0008
      GO TO 40                                                          MAIN0009
   20 ASSIGN 200 TO N                                                   MAIN0010
      GO TO 40                                                          MAIN0011
   30 ASSIGN 300 TO N                                                   MAIN0012
C     IR PARA 100, 200 OU 300 DE ACORDO COM O VALOR DE N                MAIN0013
   40 GO TO N, (100, 200, 300)                                          MAIN0014
  100 J = 1                                                             MAIN0015
      GO TO 400                                                         MAIN0016
  200 J = 2                                                             MAIN0017
      GO TO 400                                                         MAIN0018
  300 J = 3                                                             MAIN0019
C     MOSTRAR O VALOR DE J                                              MAIN0020
  400 PRINT 1000, J                                                     MAIN0021
      STOP                                                              MAIN0022
 1000 FORMAT(I4)                                                        MAIN0023
      E  N  D                                                           MAIN0024

Makefile:

FII: FII.F
	gfortran -std=legacy FII.F -o FII
clean:
	rm FII

Execução:

pi@raspberrypi:~/F/FortranII $ ./FII 
-100
-100
   1
pi@raspberrypi:~/F/FortranII $ ./FII 
   0
   0
   2
pi@raspberrypi:~/F/FortranII $ ./FII 
 100
 100
   3