Queste sono alcune domande che mi sono stare rivolte riguardo ai post sul Fortran. Di alcune ho la risposta, di altre the answer is blowin’ in the wind, (Dylan 1962).
Contributi benvenuti, come al solito. Non c’è un ordine particolare, non me le ricordo tutte (non ho preso appunti, azt!).

D: Come si fa a passare da stringa a numero e viceversa? L’equivalente di questo codice Python.

R: In fortran esiste, da F77, un modo elegante e atipico che consiste nel leggere dalla variabile stringa il valore numerico o scrivere quest’ultimo in una stringa. Il codice equivalente a quello Python è il seguente:
program intRW implicit none integer :: i real :: r character(16) st, rst st = '1234' read(st, *) i print *, st, i r = 42.8 write(rst, *) r print *, r, rst end

Anticamente esisteva una coppia di funzioni encode e decode che i vecchi ancora rimpiangono, ma niente da fare: rimosse.
D: A proposito scrivere in modalità ‘*‘ (default) è spesso brutto; quali sono le specifiche per format e fmt?
R: Una volta quando i manuali erano di carta c’erano un paio di tabelle (probabilmente le più fotocopiate) che unite a un righello meccanografico con le dimensioni dei caratteri erano uno strumento indispensabile del programmatore. Poi i numeri si mettevano comunque dentro per successive approssimazioni. Oggi si può trovare qualcosa di simile sul Web, per esempio questo
D: È possibile mescolare codice vecchio (formattato) e nuovo (free-format)?
R: Sì, senza alcun problema. In particolare il compilatore gfortran ipotizza il free-format in base all’estensione:
Source files with ‘.f’, ‘.for’, ‘.fpp’, ‘.ftn’, ‘.F’, ‘.FOR’, ‘.FPP’, and ‘.FTN’ extensions are treated as fixed form. Source files with ‘.f90’, ‘.f95’, ‘.f03’, ‘.f08’, ‘.F90’, ‘.F95’, ‘.F03’ and ‘.F08’ extensions are treated as free form. The capitalized versions of either form are run through preprocessing. Source files with the lower case ‘.fpp’ extension are also run through preprocessing.
(da Using GNU Fortran).
Esistono poi le opzioni -ffree-form e -ffixed-form per casi particolari.
Secondo me se si hanno file vecchi scritti in fixed-form OK ma i nuovi vanno scritti in free-form: cambiano solo le convenzioni per il commento e la continuazione su più righe, dai!
D: Conviene suddividere il programma in più file?
R: Quelli grossi sì. Tra le altre cose è più agevole la compilazione, specie quando si è alla caccia di errori. Anzi non sarebbe una cattiva idea usare make.
Probabilmente conviene avere un file per il main e uno per ogni modulo, oltre a quelli per gli include.
D: I moduli possono essere visti come librerie?
R: I moduli sono fatti per contenere parametri e variabili globali e procedure (funzioni e subroutine) per cui sì, possono essere visti come librerie. Ma sono una cosa un po’ diversa da quelle presenti negli usuali linguaggi; a me ricordano gli unit del Borland Pascal poi diventato Delphi. OK, c’è using del Visual Basic e chissà quanti altri ma io parlavo di cose serie
D: Negli esempi usi spesso e funzioni e poco le subroutine; c’è un motivo?
R: No, e sono al corrente che di solito i fortranisti preferiscono le subroutine. Però quando ci si aspetta un solo valore di ritorno la funzione è più comoda, secondo me. Poi possono esserci effetti collaterali (side effects) ma questo è un altro discorso e probabilmente un male. Giova ricordare che in Fortran tutti i dati vengono passati per riferimento, a differenza della maggior parte degli altri linguaggi (C e Python p.es.). Per evitare errori comuni nelle ultime versioni del Fortran è stato introdotto intent che può essere in, out o inout.
Ci sono poi linguaggi in cui mancano le subroutine, hanno solo le funzioni, al limite possono non ritornare nessun dato (void) o puoi ignorare il valore ritornato, come il C e il Lisp.
D: Puoi elencare i link ai documenti che hai usato?
R: Certo, eccoli:
il manuale di gfortran: Using GNU Fortran;
TACC: Modern Programming Languages: Fortran90/95/2003/2008;
Tanja van Mourik Fortran 90/95 Programming Manual;
D: Nomini spesso il Lisp: ma davvero ti piace?
R: Sì

Nota: lo so che ho promesso a Walter ulteriori confronti tra linguaggi, compreso il C++ ma questo post è in cantiere da una settimana, sono in ritardo
