Fortran
| fortran | |
|---|---|
| Paradigma | procedural, Orientação a objeto |
| Surgido em | 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.
Í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. Le langage Fortran a connu de nombreuses évolutions1 :
- 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 Fortran3
- 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 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.
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 9511 . 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.
- 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 approvado 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 modulos; 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êcias.
- 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 linguaguem de programação C e permite ignorar o tipo e importância dos argumentos.
[editar] Compiladores
O compilador libre gcc permite a compilação com o Fortran 77 (compilador g7718 , até ao 3.4.6) e depois o 90 e 95 (a partir de gcc 4.0.0, que substitui g77 para gfortran19 · 20 ), para as novas plataformas, o compilador g9521 é tambem baseado no gcc, mas já não era mantido depois de 2011. O compilador g77, agora distribuido separadamente do gcc, pode se incluído no gcc para compilart22 , e os seu binarios são ainda disponibilizados para certos modelos de computadores23 · 24 · 25 . Outro compiladores como o da empresa 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 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 Clustes of PCs (agrupamentos de PCs):
- gFortran -- g95 -- GNU Compiler Collection -- F2c -- Intel Fortran Compiler -- IBM VisualAge -- Open64
[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 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 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
[editar] em FORTRAN 77
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**2-4.0*A*C C IF( DELTA.GT.0 )THEN ! (DUAS RAIZES 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 RAIZES REAIS IGUAIS) X1= -B / ( 2.0*A ) X2= X1 PRINT *, "RAIZES: X1=X2= ", X1 ELSE ! (DUAS RAIZES 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
[editar] em Fortran 90
[editar] tabela de graus -> radians
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
[editar] em FORTRAN 95
program ola print*,"Olá Mundo!" end program ola
[editar] Área do cilindro
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
- ↑ Veja aqui o site de Working Group 5 e de comité J3 para mais informações sobre a evolução atual do Acordo
- ↑ Feio, Rui Alberto Lopes. Curso de Programação Fortran. Lisboa: Fundação Calouste Gulbenkian, 1986. 191 p. p. 2. Depósito Legal nº 13449/86
- ↑ Standard ECMA Fortran (PDF). Página visitada em 25 de setembro 2012.
- ↑ Standard Fortran 66 (PDF). Página visitada em 25 de setembro 20112.
- ↑ Setzer, Valdemar Waingort; Simon, Imre; Kowaltowski, Tomasz. Curso de Fortran IV Básico. São Paulo: Edgard Blücher, 1972. 102 p. p. 5. CDD 651.8
- ↑ Standard Fortran 77 (PDF). Página visitada em 25 de setembro 2012.
- ↑ MIL-STD-1753, Military Standard: Fortran, DOD Supplement to American National Standard X3.9-1978 (PDF). Página visitada em 25 de setembro 2012.
- ↑ Standard Fortran 90 (PDF). Página visitada em 25 de setembro 2012.
- ↑ da Cunha, Rudnei Dias, "Introdução à Linguagem de Programação Fortran 90", Editora da UFRGS, Porto Alegre, 2005. ISBN 85-7025-829-1.
- ↑ Standard Fortran 95 (PDF). Página visitada em 25 de setembro 2012.
- ↑ da Cunha, Rudnei Dias, "Programação Científica em Fortran 95", Clube de Autores, Porto Alegre, 2010. ISBN 978-85-910277-0-5.
- ↑ Standard Fortran 2003 (PDF). Página visitada em 25 de setembro 2012.
- ↑ Standard Fortran 2008 (PDF). Página visitada em 25 de setembro 2012.
- ↑ 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)
- ↑ N1830, Information technology — Programming languages — Fortran — Part 1: Base language ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1830.pdfPDF ( 7.9 MiB)
- ↑ ISO page to ISO/IEC DTS 29113, Further Interoperability of Fortran with C
- ↑ Draft of the Technical Specification (TS) 29113 ftp://ftp.nag.co.uk/sc22wg5/N1901-N1950/N1917.pdfPDF ( 312 kiB)
- ↑ Copia arquivo de site sobre g77
- ↑ GCC Wiki - GFortran
- ↑ gfortran.org
- ↑ Sitio oficial de g95
- ↑ Como compilar g77 com uma versão recente de gcc ?
- ↑ g77 para o Windows site oficial USGS
- ↑ g77 para MacOS X
- ↑ g77 para MS-DOS no site da DJGPP
[editar] Ligações externas
- Programação em Fortran no Linux
- Curso de Fortran 77 e 90 em português
- Early Fortran Manuals
- The Fortran Company: compilers, books, tutorials, consulting
- Fortran Open Directory category
- Usenet forum: comp.lang.fortran
- Fortran 90, 95 and 2003 information
- USER NOTES ON FORTRAN PROGRAMMING (UNFP)
- Unit 7.1 FORTRAN 77 –; Part of ASPIRE's textbook in Computational Science
- Unit 7.2 FORTRAN 90 –; Ditto
- How Not to Write FORTRAN in Any Language There are characteristics of good coding that transcend all programming languages.
- Debugging tool for FORTRAN and its derivatives.
- Professional Programmer's Guide to Fortran77