Fortran

Fonte: SAPO Saber, a enciclopédia portuguesa livre.

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 tem como origens a expressão "FORmula TRANslation" (ou "Translator").

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.

Índice

[editar] História, versões e revisões

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.

[editar] 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. Em 1966, 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. 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.

[editar] FORTRAN 77

A linguagem foi modernizada a partir de 1970 e um novo padrão lançado em 1977, FORTRAN 77, introduzia algumas pequenas alterações na estrutura dos comandos, como o uso dos blocos IF...THEN...ELSE.

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 caracter por coluna, obedecendo as seguintes regras:

  • Coluna 1 - usada para indicar linha de comentário. Um caracter 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 caracter, 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.

[editar] FORTRAN 8X

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.

Durante a década de 1980, foi lançada uma nova revisão do FORTRAN conhecida como FORTRAN 8X que incorporava todos os conceitos acima citados (exceto a tipagem explícita e o controle de exceção).

[editar] FORTRAN 90

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.

[editar] FORTRAN 95

O padrão formal da linguagem mais recente, publicado em 1996, é conhecido como Fortran 95. 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 oferencem compiladores HPF baseados na linguagem FORTRAN 90.

[editar] FORTRAN 2000

Desde 1997, o FORTRAN vem passando por um novo processo de revisão. O FORTRAN 2000 irá incorporar um conjunto de novos comandos que permitirão, entre outras coisas, o controle de exceções e programação orientada a objetos.

[editar] Compiladores

Os compiladores da IBM nunca foram muito populares comparando com outros compiladores 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 flow charts 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 Clustes of PCs (agrupamentos de PCs):

[editar] Características e extensões

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 construcçõ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 instrucçõ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 instrucçõ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.

[editar] Pontos fortes/fracos da sintaxe

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 construcçõ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.

[editar] Padrões

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.

[editar] Exemplos de código em FORTRAN 77

[editar] Hello World!

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

[editar] Resolvendo uma equação de 2o. grau

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*B-4.*A*C
C
      IF (DELTA.GT.0) THEN      ! (DUAS RAIZES REAIS)
         X1=(-B-SQRT(DELTA))/(2.*A)
         X2=(-B+SQRT(DELTA))/(2.*A)
         PRINT *, "RAIZES:  X1=",X1
         PRINT *, "         X2=",X2
      ELSE IF (DELTA.EQ.0) THEN ! (DUAS RAIZES REAIS IGUAIS)
         X1=-B/(2.*A)
         X2=X1
         PRINT *, "RAIZES: X1=X2=",X1
      ELSE                      ! (DUAS RAIZES COMPLEXAS)
         RE=-B/(2.*A)
         IM=SQRT(-DELTA)/(2.*A)
         PRINT *, "RAIZES COMPLEXAS: X1=",RE," -",IM,"i"
         PRINT *, "                  X2=",RE," +",IM,"i"
      ENDIF
C
      END

[editar] Exemplos de código em FORTRAN 95

[editar] Olá Mundo!

program hello
print*,"Olá Mundo!"
end program hello.



[editar] Área do cilindro

program cylinder
! Calculate the area of a cylinder.
!
! Declare variables and constants.
implicit none ! Require all variables to be declared -- Fortran 90 feature.
integer            :: ierr
real               :: radius,height,area
real   , parameter :: pi = 3.14159
do
   ! Prompt the user for radius and height and read them.
   write (*,*) "Enter radius and height, 'q' to end."
   read (*,*,iostat=ierr) radius,height
   ! 
   ! If radius and height could not be read from input, terminate program.
   if (ierr /= 0) stop "ending program"
   !
   ! Compute area. The ** means "raise to a power".
   area = 2*pi*(radius**2 + radius*height)
   !
   ! Write the input variables (radius, height) and output (area) to the screen.
   write (*,"(1x,'radius=',f6.2,5x,'height=',f6.2,5x,'area=',f6.2)") radius,height,area
end do
end program cylinder

[editar] Ligações externas

" style="vertical-align:middle; padding-left:7px; width:0%;">}}}}

sah:Fortran

Ferramentas pessoais