As quatro linguagens mães: Fortran

As quatro linguagens mães: Fortran

Como mencionamos anteriormente, neste artigo vamos comentar sobre a mais antiga das linguagens de programação: a Fortran.

Fortran

program hello

  print *, 'Hello, Fortran!'

end program hello

Hello, Fortran!

Cálculos matemáticos complexos e intensivos eram um dos principais usos de computadores para aplicações de modelos de engenharia, modelos de previsão do tempo, cálculos de balística e simulações. Tudo isto requer diversos ajustes finos para se chegar a um bom resultado. Computadores fariam muitos cálculos muito mais rápidos que humanos e poderiam ficar rodando ininterruptamente. Porém, era difícil programar apenas em Assembly (única disponível na época).

A IBM, como uma das principais fornecedoras de computadores na época, precisava criar uma linguagem de programação para o IBM 704 para cientistas e deu esta missão à equipe de John W. Backus. John criou a linguagem Fortran e seu compilador em 1957, entrando para a história como a primeira linguagem de alto nível. O nome Fortran veio do acrônimo IBM Mathematical FORmula TRANslation System.

John W. Backus, criador do Fortran

Fortran recebeu várias atualizações com o tempo e algumas foram marcantes: Fortran I (1957), Fortran II (1958), Fortran 66 (1966), Fortran 77 (1977), Fortran 90 (1990) e última versão Fortran 2018 (2018). Como podemos ver, ainda é uma linguagem que recebe atualizações constantes: um fóssil vivo!

Inovações e Código

Como primeira linguagem de alto nível criada, foi revolucionária para fazer rapidamente operações matemáticas. Como não existia internet, as documentações da linguagem eram feitas em um manual impresso.

Manual do Fortran para IBM 704

A inovação do Fortran foi transformar a programação de dados binários de instruções de Assembly em um código próximo com a língua inglesa muito mais acessível para programadores. Tudo isto feito por um compilador que faz o trabalho de traduzir o código Fortran em código de máquina.

Além da linguagem, o compilador de Fortran trouxe novas ideias e inovações em otimização de código em compilação. Mesmo que o programador não faça um código excelente, o compilador usa técnicas para melhorar o resultado final e gerar um binário com melhor qualidade, deixando a performance da execução melhor. Isto não era possível quando se programava em Assembly puro.

Vamos ver a evolução código de Fortran com um algoritmo que calcula a área de um triângulo usando a fórmula de Heron. O código abaixo foi feito para Fortran II:

      READ(5,501) IA,IB,IC

  501 FORMAT(3I5)

      IF (IA) 701, 777, 701

  701 IF (IB) 702, 777, 702

  702 IF (IC) 703, 777, 703

  777 STOP 1

  703 S = (IA + IB + IC) / 2.0

      AREA = SQRT( S * (S - IA) * (S - IB) * (S - IC) )

      WRITE(6,801) IA,IB,IC,AREA

  801 FORMAT(4H A= ,I5,5H  B= ,I5,5H  C= ,I5,8H  AREA= ,F10.2,

     $13H SQUARE UNITS)

      STOP

      END

Podemos ver que não existia definição de tipos e a execução do programa era definida pelos passos (os números no começo da linha). Os IFs definiam para qual passo o programa devia ir com instruções do tipo `GO TO` que eram muito comuns nas linguagens novatas. O conceito de algoritmo ainda não era bem aplicado na época, porém Fortran facilitava a programação.

Vamos comparar o mesmo algoritmo em Fortran 90:

PROGRAM  FormulaDeHeron

   IMPLICIT  NONE


   REAL     :: a, b, c             ! 3 lados do triângulo

   REAL     :: s                   ! metade do perímetro

   REAL     :: Area                ! área do triângulo

   LOGICAL  :: Cond_1, Cond_2      ! 2 condicionais


   READ(*,*)  a, b, c


   WRITE(*,*)  "a = ", a

   WRITE(*,*)  "b = ", b

   WRITE(*,*)  "c = ", c

   WRITE(*,*)


   Cond_1 = (a > 0.) .AND. (b > 0.) .AND. (c > 0.0)

   Cond_2 = (a + b > c) .AND. (a + c > b) .AND. (b + c > a)

   IF (Cond_1 .AND. Cond_2) THEN

      s    = (a + b + c) / 2.0

      Area = SQRT(s * (s - a) * (s - b) * (s - c))

      WRITE(*,*) "Area = ", Area

   ELSE

      WRITE(*,*) "Não é um triângulo"

   END IF


END PROGRAM  FormulaDeHeron

Muito mais parecido com o que conhecemos hoje, né? Vemos algumas evoluções:

  • - IF-ELSE passou a existir no Fortran 77
  • - Definições de tipo passou a existir no Fortran 66
  • - Sumiram as instruções do tipo `GO TO`

Curiosidades

Com apenas 64kb de memória, os satélites Voyager 1 e 2 atravessaram o Sistema Solar com código feito Fortran por engenheiros da NASA. São os equipamentos feitos pelo homem que estão mais distantes do nosso planeta. Mais detalhes podem ser vistos aqui.

Na NASA, Dorothy Vaughn, representada por Octavia Spencer no filme Estrelas Além do Tempo, foi pioneira ao aprender e repassar às colegas de trabalho a linguagem Fortran e se tornou uma das maiores especialistas na linguagem no mundo, trabalhando em cálculos que trouxeram o sucesso das missões espaciais norte-americanas com destino à Lua.

Dorothy Vaughn trabalhando em um mainframe IBM

Por fim, hoje benchmarks para definir os computadores mais velozes do mundo são códigos em Fortran com cálculos extremamente avançados.

Fortran ainda continua por aqui?

Fortran ainda continua sendo uma linguagem usada para simulações gigantescas como modelos de astrofísica, modelos de clima e cálculos de engenharia. O motivo de ainda ser muito usada é parecida com o COBOL: muito código legado ainda é usado e atualizado.

Comparando com as linguagens contemporâneas, o Fortran (em especial até ao Fortran 77) não tinha vários recursos de programação conhecidos hoje e, por isso, começou a cair em desuso com o surgimento do C e C++.

A sintaxe e formato do Fortran influenciou Basic e Visual Basic. Os conceitos de linguagem matemática influenciaram linguagens como R e Matlab. Fortran também influenciou bibliotecas científicas como Scikit-Learn, Pandas e NumPy para Python que são muito usadas por Cientistas de Dados.

Cenas dos próximos capítulos…

Gostou do nosso artigo sobre Fortran? Podemos ver várias similaridades com a sua linguagem preferida.

No próximo artigo, iremos falar da linguagem que permitiu o nascimento da Inteligência Artificial, o LISP! Não deixe de acompanhar a série :-)

⚠️
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.