Sii curioso e impara: Fortran moderno in poche parole

I progressi della scienza e dell'ingegneria si affidano ancora a Fortran più di qualsiasi altro linguaggio per molte misure importanti. Sorpreso? Non dovresti esserlo, anche se molte persone che si definiscono programmatori non hanno mai appreso Fortran. Ti insegnerò Fortran in cinque minuti o meno. Non farà male e saprai qual è forse il linguaggio di programmazione più importante e influente di sempre.

Gli informatici potrebbero comportarsi come se Fortran non esistesse, ma la cultura popolare ( I Simpson , Stagione 26, Episodio 10) ha fatto meglio con la saggia osservazione: "Fortran, il più grande dei linguaggi di programmazione!" In effetti, più della metà del calcolo fatto dai computer più potenti del mondo proviene da Fortran. In alcuni sistemi di grandi dimensioni, il codice Fortran può essere responsabile dell'80-100% del calcolo.

È anche incredibilmente facile da imparare, come vedrai in questa breve introduzione alla programmazione Fortran. Presumo che tu sappia già come programmare in qualcosa di diverso da Fortran (se sei completamente nuovo alla programmazione, consiglio vivamente di imparare Fortran con "A Fortran Coloring Book").

 Iniziamo

 programma ciao

    print *, "Hello, World!"

fine programma ciao

Digita (usa l'estensione .f95 o .f90 per il tuo file), compila, esegui e stampa "Hello, World!". L'asterisco "*" nell'istruzione print significa essenzialmente formattazione automatica .

Il mio secondo esempio fa un po 'di matematica e termina con le istruzioni "if / then / else":

programmare la matematica

  nessuno implicito

  real :: answer, x, y, sum, prod, cubedx, cubedy

  print *, "Digita due numeri (xey)"

  leggi *, x                                          

  pronto                                          

  somma = x + y  

  prod = x * y                                       

  cubedx = x ** 3;

  cubedy = y ** 3;

  print *, 'La somma x + y è', sum

  print *, "Il prodotto x * y è", prod

  print *, "Cubed x e y", cubedx, cubedy

  print *, 'seno di x e y', sin (x), sin (y)

  se (x> y) allora

    print *, "Ho notato che x è maggiore di y"

  altro

    print *, "Sembra che y non sia minore di x"

  finisci se

terminare la matematica del programma  

Potresti notare che sono scivolato in "nessuno implicito". Questo è normale nella moderna Fortran: dice al compilatore di richiedere che le variabili siano dichiarate esplicitamente in modo che le variabili sconosciute siano contrassegnate come errori. Senza di esso, Fortran presume che le variabili che iniziano con "i" fino a "n" (le prime due lettere dell'intero) siano numeri interi e le altre siano numeri in virgola mobile ("reali"). Ciò ha ridotto il numero di carte che abbiamo dovuto perforare decenni fa, ma in questi tempi moderni è generalmente disapprovato.

 L'esecuzione di questo programma (e la digitazione in 3.14 e 1.57) produce quanto segue:

Digita due numeri (x e y)

3.14

1.57

 La somma x + y è 4.71000004   

 Il prodotto x * y è 4,92980051   

 X e y cubo 30,9591484 3,86989355   

 seno di x e y 1,59254798E-03 0,999999702

 Ho notato che x è maggiore di y   

Fortran è progettato per la matematica (FORmula TRANslation), nota che "sin (…)" è integrato senza alcuna necessità di includere intestazioni o pacchetti. Naturalmente, Fortran supporta numeri in virgola mobile e interi, ma supporta anche numeri complessi. Non sono necessari additivi.

Il mio terzo esempio riguarda i loop (chiamati "do" in Fortran):

 ciclo di programma

  nessuno implicito    

  intero :: i, j, mantieni (100,2), w

  w = 0

  faccio io = 10, 50, 5

    fai j = i, 20, 5

       stampa *, i, j

       w = w + 1

       mantieni (w, 1) = i

       mantieni (w, 2) = j

    fine fare

  fine fare

  do io = 1, w

    print *, 'keep:', keep (i, 1), keep (i, 2)

  fine fare

fine ciclo di programma

La riga print nel mio programma di esempio viene eseguita solo se viene eseguito il ciclo j do. Il ciclo j non viene eseguito affatto quando i supera 20. Questo esempio introduce anche gli array con l'uso di un array chiamato "keep". Fortran inizia la numerazione degli array a "1" anziché a zero, che è lo stesso modo in cui gli americani numerano i piani degli edifici (il piano n. 2 si riferisce al piano terra che si presume sia "1"). Altri luoghi nel mondo usano la numerazione a base zero per i loro edifici (il "primo piano" è quello che gli americani chiamano il "secondo piano") come C e C ++ fanno per gli array. L'output di quell'esempio di 'ciclo di programma' è mostrato di seguito:

           10 10

          10 15

          10 20

          15 15

          15 20

          20 20

 tenere: 10 10

 tenere: 10 15

 tenere: 10 20

 tenere: 15 15

 tenere: 15 20

 tenere: 20 20

 Nel mio ultimo esempio, definirò una subroutine (funzione) chiamata "ave" per prendere la media di tre numeri che definisco staticamente. Noterai che sono diventato pigro e ho appena scritto "end" dopo il programma e la funzione. Va bene, ma se usi nomi, come ho fatto in precedenza, il compilatore ti aiuterà a verificare che la fine corrisponda a ciò che volevi corrispondesse.

Callret del programma

  nessuno implicito

  reale a, b, c

  av reale, avsq1, avsq2

  vero ave

  dati a, b, c / 5.0,2.0,3.0 /

  av = ave (a, b, c)

  print *, "La media di", a, b, c, "è:", AV

fine

funzione reale ave (x, y, z)

  x reale, y, z, somma

  somma = x + y + z

  ave = somma / 3.0

  ritorno

fine

 Questo stampa:

 La media di 5.00000000 2.00000000 3.00000000 è: 3.33333325 

 Sì, Fortran può formattare l'output. Se sostituiamo la "stampa" sopra come segue:

  print 8, "La media di", a, b, c, "è", AV

8 formato (a, 2 (f4.2, ','), f4.2, a, f7.5)

L'output diventerà:

La media di 5,00, 2,00, 3,00 è 3,33333

La formattazione di Fortran può anche essere eseguita su una singola riga e avere lo stesso grazioso output:

print "(a, 2 (f4.2, ','), f4.2, a, f7.5)", 'La media di', a, b, c, 'is', AV

Se sei stato indotto a credere che Fortran sia strano, sei stato fuorviato. Ho scritto tutti questi esempi in quello che i programmatori Fortran chiamano "forma libera". Questo è diventato ufficialmente parte di Fortran con lo standard "Fortran 90" (da qui le mie istruzioni per usare .f90 o .f95 come estensioni di file; questi dicono al compilatore, senza opzioni speciali, che stiamo usando la forma libera). Tieni presente che nel 1956 gli utenti volevano qualcosa di adatto alle perforazioni delle carte. Potrei andare avanti per ore su come Fortran lo adatta con formati orientati alle colonne e caratteri di continuazione, ecc. Ma, come ho mostrato, non hai davvero bisogno di imparare questo per scrivere o leggere codice Fortran.

Allora perché Fortran viene evitato dagli scienziati informatici? Ottima domanda. Fortran è la lingua più antica (1956 circa). È iniziato in un'era di nastri, schede perforate e sostituzione dei computer umani. Precede la programmazione strutturata a blocchi, la teoria dell'analisi e la grafica. Lungo la strada, gli informatici hanno esplorato i progressi nell'informatica introducendo migliaia di linguaggi di programmazione, la maggior parte dei quali non è riuscita a prendere piede. Tuttavia, in ogni campo dell'attività umana, "fuori il vecchio, dentro il nuovo" è di moda. L'informatica non è diversa. 

Ma quando lo scricchiolio dei numeri è importante, niente è meglio o più facile di Fortran. Suggerisco che tutti dovremmo conoscere molti strumenti e utilizzare lo strumento migliore per il lavoro. Solo perché il mio fidato martello è nella mia cassetta degli attrezzi da molto tempo non significa che non ne abbia bisogno per il lavoro giusto. Fortran non è diverso.

Fortran non è solo il linguaggio di programmazione originale di alto livello, è vivo, importante e ampiamente utilizzato. Chi ha avviato le voci per suggerire il contrario?

 Risorse

  • Intel Fortran: molto utilizzato per x86 (Intel / AMD), prestazioni elevate
    • Puoi qualificarti per un compilatore gratuito (e altri strumenti)
    • Copie di prova disponibili con opzione per l'acquisto in seguito
    •  La beta del 2018 durerà fino a luglio 2018: prova gratuitamente questa ultima e più grande beta completamente funzionale, inclusi Fortran e gli strumenti correlati, fino ad allora: Intel Parallel Studio XE 2018 Beta - Iscriviti ora
  • GNU Fortran: supporto più ampio (molti processori, molti sistemi), prestazioni inferiori
    • open source e gratuito
    • sul mio MacBook Air ... dovevo solo dire "brew install gcc" e ottengo gfortran gratuitamente

Fare clic qui per scaricare la versione di prova gratuita di 30 giorni di Intel Parallel Studio XE