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 objectos.
■ 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 otimizado, 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.
■ 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 das mesmas; 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.
■ 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 caractere por coluna, obedecendo às seguintes regras:
- Coluna 1 - usada para indicar linha de comentário. Um caractere na coluna 1 (geralmente "C", "c" ou "*") indicava que todos os demais caracteres a partir da coluna 2 constituiam 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 caractere, 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.
■ 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).
■ 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.
■ 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 oferecem compiladores HPF baseados na linguagem FORTRAN 90.
■ 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.
■ 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, física, astronomia, geofísica, engenharia 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 atualizaçõ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 vetores, etc. Por exemplo, um dos compiladores de Fortran da IBM (H Extended IUP) possuía um nível de otimizaçã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 projetada 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
No que foi a primeira tentativa de projeçã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 efetuar 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 vetorizaçã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 uma linguagem para desempenhar tarefas da área da computação numérica de alto rendimento.
■ Padrões
Os dois padrões abaixo refletem as implementações atuais 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 adaptada pelo ANSI.
■ Exemplos de código em FORTRAN 77
Olá Mundo!
Caso você não tenha o ambiente de desenvolvimento e compilador Fortran para Windows, você pode baixá-lo gratuitamente para testar seus códigos.
C 1 2 3 4
C234567890123456789012345678901234567890
PROGRAM HELLO
PRINT *, "OLA, MUNDO!" ! <-- USANDO COMANDO PRINT
END
Resolvendo uma equação de 2o. grau
C 1 2 3 4 5 6
C23456789012345678901234567890123456789012
34567890123456789012345
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
Exemplos de código em FORTRAN 95
Olá Mundo!
program hello
print*,"Olá Mundo!"
end program hello
Á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
■ Ligações externas
Curso prático
Compiladores, tutoriais e manuais
Fortran
Guia Fortran 77 - [Topo].