Fortran

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
fortran
Fortran acs cover.jpeg
Paradigma procedural,
Orientação a objeto
Surgido em 1957 (1957)
Última versão Fortran 2008 (ISO/IEC 1539-1:2010)
Criado por John Backus & IBM
Estilo de tipagem: Forte, estática e manifesta
Dialetos: Absoft, Cray, GFortran, G95, IBM, Intel, Lahey/Fujitsu, Open Watcom, Pathscale, PGI, Silverfrost, Oracle, XL Fortran, Visual Fortran, outros
Influenciada por Speedcoding
Influenciou ALGOL 58, BASIC, C, PL/I, PACT I, MUMPS, Ratfor

A família de linguagens de programação conhecida globalmente como Fortran foi desenvolvida a partir da década de 1950 e continua a ser usada hoje em dia. O nome é um acrônimo da expressão "IBM Mathematical FORmula TRANslation System"

As versões iniciais da linguagem eram conhecidas como FORTRAN, mas a capitalização foi ignorada em versões recentes da linguagem começando a partir do Fortran 90. Os padrões oficiais da linguagem referem-se a ela atualmente como "Fortran".

A linguagem Fortran é principalmente usada em Ciência da Computação e Análise Numérica. Apesar de ter sido inicialmente uma linguagem de programação procedural, versões recentes de Fortran possuem características que permitem suportar programação orientada por objetos.

História, versões e revisões[editar | editar código-fonte]

Foi a primeira linguagem de programação imperativa. O primeiro compilador de FORTRAN foi desenvolvido para o IBM 704 em 1954-57 por uma equipe da IBM chefiada por John W. Backus. O compilador era optimizado, pois os autores acreditavam que ninguém iria usar essa linguagem se a sua prestação não fosse comparável com a da linguagem assembly. Le langage Fortran a connu de nombreuses évolutions[1]  :

  • 1956. Fortran II é um liguagem de programação criada após sua "original" FORTRAN em 1958.[2] Esta originou outras linguagens como BASIC
  • 1958. Fortran III Versão que nunca foi disponibilizada.
  • 1962. Fortran IV A linguagem Fortran foi largamente adaptada por cientistas para a escrita de programas numericamente intensivos, o que encorajou os produtores de compiladores a escrever compiladores que gerassem código mais rápido.
  • 1965. Documento ECMA Fortran[3]
  • 1966. Fortran 66 (ANSI X3.9-1966)[4] , quando a primeira versão padronizada da linguagem, conhecida como FORTRAN IV ou FORTRAN 66, estava disponível, Fortran já era a linguagem mais usada pela comunidade científica. FORTRAN IV foi padronizada pela American Standard Association (ASA).[5] A ampla disponibilidade de compiladores para diferentes computadores, a simplicidade da linguagem, facilidade para ensiná-la, sua eficiência e as vantagens introduzidas pelo uso de sub-rotinas e compilação independente destas e a capacidade de lidar com número complexo, além de muitas outras características, ajudaram em sua ampla difusão dentro da comunidade científica.
  • 1978. Fortran 77 (ANSI X3.9-1978)[6] ,

    entre outras melhorias, facilita a programação de estruturas com blocos. « IF / THEN / ELSE / ENDIF ». Em 1978, uma extensão introduzia entre outros « DO WHILE / END DO »[7] . Uma característica marcante do FORTRAN 77 são as regras de alinhamento das linhas do programa, uma herança da era dos cartões perfurados. Originalmente, a sintaxe do FORTRAN 77 foi definida de forma que cada linha do programa fosse escrita em um cartão perfurado, com um carácter por coluna, obedecendo as seguintes regras:

  • Coluna 1 - usada para indicar linha de comentário. Um carácter na coluna 1 (geralmente "C", "c" ou "*") indicava que todos os demais caracteres a partir da coluna 2 constituíam um comentário e não um comando ou declaração.
  • Colunas 2-5 - reservadas para os "labels" das linhas (números inteiros entre 1 e 9999). Os labels são usados para identificar e referenciar linhas específicas do programa.
  • Coluna 6 - quando marcada por um carácter, indicava que a linha era uma continuação da linha anterior.
  • Colunas 7-72 - reservadas para os comandos e declarações.
  • Colunas 73 em diante - reservadas para comentários.

As mesmas regras continuaram em vigor , mesmo depois dos cartões perfurados terem caído em desuso e os programas em FORTRAN 77 passarem a ser escritos diretamente em editores de texto.

Na mesma época que o FORTRAN 77 surgiu, já existiam outras linguagens de programação como o C, Pascal, Ada e Modula, que haviam introduzido novos conceitos em programação ou fundamentado outros como a tipagem explícita de variáveis e a definição de novos tipos de dados, o que permitia ao programador definir estruturas de dados mais adequadas para resolver problemas; alocação dinâmica de dados; subprogramas recursivos; controle de exceção (uma das principais características da linguagem Ada); e estabelecimento de módulos.

O FORTRAN 77 não oferecia nenhum desses recursos e começou a ser pouco a pouco abandonado pela comunidade científica que passaram a recorrer a outras linguagens de programação.

  • 1980. Fortran 8X. Durante a década de 1980, foi lançada uma nova revisão do 8x que incorporava todos os conceitos acima citados (exceto a tipagem explícita e o controle de exceção).
  • 1990. Fortran 90 (ANSI X3.198-1992)[8]  : O processo de definição do novo padrão foi longo e demorado, mas permitiu o amadurecimento de muitos dos novos conceitos que a linguagem apresentaria. A versão final desta revisão foi apresentada com o nome de FORTRAN 90. FORTRAN 90 é tão eficiente quanto o C e o Pascal para os fins a que ela se destina. FORTRAN 90 trouxe uma novidade para o mundo das linguagens de programação: mecanismos para manipulação de arranjos, que não são oferecidos por nenhuma outra linguagem.[9]
  • 1995. Fortran 95 (ISO/IEC 1539-1:1997)[10] O padrão formal da linguagem mais recente, publicado em 1996, é conhecido como Fortran 95[11] . Esta revisão do FORTRAN acrescentou pequenas alterações ao FORTRAN 90, motivada pela necessidade de aproximar o padrão à linguagem High Performance Fortran ou HPF a qual é voltada para o uso de computadores com arquiteturas avançadas. A linguagem HPF é uma espécie de extensão do FORTRAN 90 e, atualmente, muitos fabricantes oferecem compiladores HPF baseados na linguagem FORTRAN 90.
  • 2003. Fortran 2003 (ISO/IEC 1539-1:2004)[12]  : Desde 1997, o FORTRAN vem passando por um novo processo de revisão. O FORTRAN 2003 irá incorporar um conjunto de novos comandos que permitirão, entre outras coisas, o controle de exceções e programação orientada a objetos.
  • 2008. Fortran 2008 (ISO/IEC 1539-1:2010)[13] . O padrão mais recente, a ISO/IEC 1539-1:2010, conhecido informalmente como Fortran 2008, foi aprovado em Setembro de 2010.[14] Tal como o Fortran 95, sofreu pequenos melhoramentos, incorporando clarificações e correções ao Fortran 2003, assim como algumas novas funcionalidades, tais como:
  • Submodulos – facilidades estruturais adicionais para os módulos; substitui ISO/IEC TR 19767:2005
  • Co-array Fortran – um modelo de execução paralela
  • A construção Scalable parallelism – para iterações sem interdependências.
  • O atributo CONTIGUOUS – especifica restrições na definição da estrutura lógica
  • A construção Block ou Dynamic scoping – pode obter declarações de objetos com uso do escopo da construção
  • Tipo de dados ou componentes recursivos – como alternativa a indicadores recursivos em páginas derivadas.

O padrão Final Draft international Standard (FDIS) está disponível como o documento N1830.[15] Outro importante suplemento ao Fortran 2008 é a especificação técnica (TS) 29113 da ISO em Inglês Further Interoperability of Fortran with C,[16] [17] que foi submetida para aprovação do ISO em Maio de 2012. A especificação adiciona suporte para acesso a descritores de array ou ve(c)tores da linguagem de programação C e permite ignorar o tipo e importância dos argumentos.

Código FORTRAN num Cartão perfurado, mostrando as colunas de texto especializadas 1-5, 6 e 73-80.

Compiladores[editar | editar código-fonte]

O compilador livre gcc permite a compilação com o Fortran 77 (compilador g77[18] , até ao 3.4.6) e depois o 90 e 95 (a partir de gcc 4.0.0, que substitui g77 para gfortran[19]  · [20] ), para as novas plataformas, o compilador g95[21] é também baseado no gcc, mas já não era mantido depois de 2011. O compilador g77, agora distribuído separadamente do gcc, pode ser incluído no gcc para compilar[22] , e os seus binários são ainda disponibilizados para certos modelos de computadores[23]  · [24]  · [25] . Outros compiladores, como o da empresa IBM, nunca foram muito populares e esse aspecto foi especialmente notado no FORTRAN IV. WATFOR, a versão do FORTRAN IV desenvolvida na Universidade de Waterloo, Canadá, foi universalmente preferida, pois o compilador produzia melhores relatórios dos erros de compilação. O software para a geração automática de fluxogramas a partir de programas em FORTRAN também foi desenvolvido fora da IBM.

Compiladores Fortran para processamento paralelo e/ou distribuído em Cluster of Workstations (COW) ou Cluster of PCs (agrupamentos de PCs):

Características e extensões[editar | editar código-fonte]

O Fortran permite a criação de programas que primam pela velocidade de execução. Daí reside seu uso em aplicações científicas computacionalmente intensivas como meteorologia, oceanografia, física, astronomia, geofísica, engenharia, economia etc.

Inicialmente, a linguagem dependia da formatação precisa do código-fonte e do uso extensivo de números de depoimento e de depoimentos goto. Estas idiossincrasias foram removidas de versões mais recentes da linguagem. As diversas actualizações também introduziram conceitos "modernos" de programação, tais como comentários no código-fonte e saídas de texto, IF-THEN-ELSE (em FORTRAN 77), recursividade (em FORTRAN 90), e construções paralelas, enquanto se tentava preservar o perfil "leve" e a prestação de alto rendimento que faziam a imagem de marca do Fortran. Entre as linguagens especializadas mais populares baseadas em Fortran encontram-se a linguagem SAS, para gerar relatórios estatísticos, e SIMSCRIPT, para simulação de processos onde estão envolvidas listas de espera. Vendedores de computadores científicos de alto rendimento (Burroughs, CDC, Cray, IBM, Texas Instruments, …) adicionaram extensões à linguagem Fortran para fazer uso de características especiais do hardware, tais como: cache de instruções, pipeline da CPU, disposições de vectores, etc. Por exemplo, um dos compiladores de Fortran da IBM (H Extended IUP) possuía um nível de optimização que reordenava as instruções do código para manter as unidades aritméticas da máquina ocupadas simultaneamente, obtendo assim um rendimento máximo. Outro exemplo é CFD, uma "versão" especial da linguagem Fortran projectada especialmente para o supercomputador ILLIAC IV, que se encontra no Centro de Pesquisa Ames da NASA. Estas extensões têm vindo desde então a desaparecer ou então os seus elementos têm sido incorporados no padrão principal da linguagem; a extensão da linguagem que ainda persiste é a OpenMP, que é uma extensão multi-plataforma para programação de memória partilhada. Uma extensão recente, CoArray Fortran, tem como objectivo a promoção de programação paralela.

Pontos fortes/fracos da sintaxe[editar | editar código-fonte]

No que foi a primeira tentativa de projecção de uma linguagem de programação de alto nível, a sintaxe da linguagem é considerada arcaica por muitos programadores que aprenderam linguagens mais modernas. É difícil escrever um loop for, e erros na escrita de apenas um carácter podem levar a erros durante o tempo de execução em vez de erros de compilação, caso construções mais recentes não forem usadas, tais como estilo livre do código fonte. Algumas das versões anteriores não possuíam facilidades que seriam tidas como úteis em máquinas modernas, tais como a alocação dinâmica de memória. Deve-se, no entanto, ter em conta que a sintaxe de Fortran foi "afinada" para o uso em trabalhos numéricos e científicos, e que muitas das suas deficiências têm sido abordadas em revisões mais recentes da linguagem. Por exemplo, Fortran 95 possui comandos muito breves para efectuar operações matemáticas com matrizes e disposições de tipos, o que não só melhora em muito a leitura do programa como também fornece informação útil ao compilador, o que torna possível a vectorização de operações. Por estas razões, Fortran não é muito utilizado fora dos campos da ciência da computação e da análise numérica, mas permanece a linguagem a escolher para desempenhar tarefas da área da computação numérica de alto rendimento.

Padrões[editar | editar código-fonte]

Os dois padrões abaixo reflectem as implementações actuais de Fortran:

  • ANSI X3.198-1992 (R1997). Título: Programming Language "Fortran" Extended. É informalmente conhecida como Fortran 90.O padrão é publicado pela ANSI.
  • ISO/IEC 1539-1:1997. Título: Information technology - Programming languages - Fortran - Part 1: Base language. É informalmente conhecido como Fortran 95. Existem mais duas partes deste padrão. A Parte 1 foi formalmente adoptada pelo ANSI.

Exemplos de código[editar | editar código-fonte]

em FORTRAN 77[editar | editar código-fonte]

C 1 2 3 4
C234567890123456789012345678901234567890
      PROGRAM HELLO
      PRINT *, "HELLO WORLD!"    ! ← USANDO COMANDO PRINT
      END

Resolvendo uma equação de 2°. grau[editar | editar código-fonte]

C 1 2 3 4 5 6
C2345678901234567890123456789012345678901234567890123456789012345
      PROGRAM BASKHARA
C
      REAL :: A,B,C, DELTA, X1,X2, RE, IM
C
      PRINT *, "Este programa resolve uma equação de 2o.grau"
      PRINT *, "no formato: a*x**2 + b*x + c = 0"
C
      PRINT  10, "Digite a, b, c: "
 10   FORMAT( A, 1X, $)
 20   READ(*, *, ERR=20)A, B, C
C
      DELTA= B**2-4.0*A*C
C
      IF( DELTA.GT.0 )THEN      ! (DUAS RAÍZES REAIS)
          X1= ( -B-SQRT(DELTA) ) / ( 2.0*A )
          X2= ( -B+SQRT(DELTA) ) / ( 2.0*A )
          PRINT *, "RAIZES:  X1= ", X1
          PRINT *, "X2= ", X2
      ELSE 
          IF( DELTA.EQ.0 ) THEN ! (DUAS RAÍZES REAIS IGUAIS)
          X1= -B / ( 2.0*A )
          X2= X1
          PRINT *, "RAIZES: X1=X2= ", X1
      ELSE                      ! (DUAS RAÍZES COMPLEXAS)
          RE= -B / ( 2.0*A )
          IM= SQRT( -DELTA ) / ( 2.0*A )
          PRINT *, "RAIZES COMPLEXAS: X1= ", RE,"- ", IM, "i"
          PRINT *, "X2= ", RE, "+ ",IM, "i"
          END IF
      END IF
C         
      END PROGRAM BASKHARA

em Fortran 90[editar | editar código-fonte]

tabela de graus -> radians[editar | editar código-fonte]

      PROGRAM DEGRAD 
! Declaracao das variaveis                                             
      INTEGER DEG 
      REAL RAD, COEFF 
! Inicio do programa
      WRITE ( *, 10) 
   10 FORMAT      (' ',20('*') /                                        &
     &             ' * Degres * Radians *' /                            &
     &             ' ', 20('*') )                                       
! Corpo do programa
      COEFF = (2.0 * 3.1416) / 360.0 
      DO DEG = 0, 90 
         RAD = DEG * COEFF 
         WRITE ( *, 20) DEG, RAD 
   20 FORMAT         (' *  ',I4,'  * ',F7.5,' *') 
      END DO 
! Fim da tabela
      WRITE ( *, 30) 
   30 FORMAT      (' ',20('*') ) 
! Fim do programa
      STOP 
      END PROGRAM DEGRAD

em FORTRAN 95[editar | editar código-fonte]

program ola
print*,"Olá Mundo!"
end program ola

Área do cilindro[editar | editar código-fonte]

program cilindro
! Calcula a área de um cilindro.
!
! Declara as variáveis e constantes.
implicit none ! Requer que todas as variáveis sejam declaradas -- Habilidade do Fortran 90.
integer :: ierr
real :: raio,altura,area
real , parameter :: pi = 3.14159
do
   ! Pergunta ao usuário o raio e a altura e lê os valores. 
   write (*,*) "Entre com o raio e a altura, 'q' para sair."
   read (*,*,iostat=ierr) raio,altura
   ! 
   ! Se o raio e a altura não puderam ser lidos da entrada, termina o programa.
   if (ierr /= 0) stop "finalizando o programa"
   !
   ! Calcula a área. O sinal ** significa "eleva a uma potência".
   area = 2*pi*(raio**2 + raio*altura)
   !
   ! Escreve as variáveis de entrada (raio, altura) e a saida (área) na tela.
   write (*,"(1x,'raio=',f6.2,5x,'altura=',f6.2,5x,'area=',f6.2)") raio,altura,area
end do
end program cilindro

Referências

  1. Veja aqui o site de Working Group 5 e de comité J3 para mais informações sobre a evolução atual do Acordo
  2. Feio, Rui Alberto Lopes. Curso de Programação Fortran. Lisboa: Fundação Calouste Gulbenkian, 1986. 191 pp. p. 2. Depósito Legal nº 13449/86
  3. Standard ECMA Fortran (PDF). Visitado em 25 de setembro 2012.
  4. Standard Fortran 66 (PDF). Visitado em 25 de setembro 20112.
  5. Setzer, Valdemar Waingort; Simon, Imre; Kowaltowski, Tomasz. Curso de Fortran IV Básico. São Paulo: Edgard Blücher, 1972. 102 pp. p. 5. CDD 651.8
  6. Standard Fortran 77 (PDF). Visitado em 25 de setembro 2012.
  7. MIL-STD-1753, Military Standard: Fortran, DOD Supplement to American National Standard X3.9-1978 (PDF). Visitado em 25 de setembro 2012.
  8. Standard Fortran 90 (PDF). Visitado em 25 de setembro 2012.
  9. da Cunha, Rudnei Dias, "Introdução à Linguagem de Programação Fortran 90", Editora da UFRGS, Porto Alegre, 2005. ISBN 85-7025-829-1.
  10. Standard Fortran 95 (PDF). Visitado em 25 de setembro 2012.
  11. da Cunha, Rudnei Dias, "Programação Científica em Fortran 95", Clube de Autores, Porto Alegre, 2010. ISBN 978-85-910277-0-5.
  12. Standard Fortran 2003 (PDF). Visitado em 25 de setembro 2012.
  13. Standard Fortran 2008 (PDF). Visitado em 25 de setembro 2012.
  14. N1836, Summary of Voting/Table of Replies on ISO/IEC FDIS 1539-1, Information technology - Programming languages - Fortran - Part 1: Base language ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1836.pdfPDF ( 101 KiB)
  15. N1830, Information technology — Programming languages — Fortran — Part 1: Base language ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1830.pdfPDF ( 7.9 MiB)
  16. ISO page to ISO/IEC DTS 29113, Further Interoperability of Fortran with C
  17. Draft of the Technical Specification (TS) 29113 ftp://ftp.nag.co.uk/sc22wg5/N1901-N1950/N1917.pdfPDF ( 312 kiB)
  18. Copia arquivo de site sobre g77
  19. GCC Wiki - GFortran
  20. gfortran.org
  21. Sitio oficial de g95
  22. Como compilar g77 com uma versão recente de gcc ?
  23. g77 para o Windows site oficial USGS
  24. g77 para MacOS X
  25. g77 para MS-DOS no site da DJGPP

Ligações externas[editar | editar código-fonte]