vintage

Breve storia del linguaggio di programmazione Fortran

Cosa ci dice il nome Fortran ai giorni nostri? Quale significato ha e a cosa serve? Sapete per cosa è ancora utilizzato?

Andrea Scianò Andrea Scianò 21 Gen 2020 · lettura da 5 min
Breve storia del linguaggio di programmazione Fortran

Fortran (o FORTRAN) è l'acronimo di FORmula TRANslation (oppure FORmula TRANslator) che significa traduzione, o traduttore, di formule - ed è uno dei primi linguaggi di programmazione.

(Se preferisci ascoltare l'articolo anzichè leggerlo, puoi farlo grazie al podcast di Valerio Galano premendo semplicemente play nel lettore qui sotto).

Il linguaggio di programmazione Fortran

Il primo compilatore FORTRAN fu sviluppato a partire dal 1954 per il calcolatore IBM 704 da un gruppo di lavoro guidato da John Backus. Si trattava di un compilatore ottimizzato, poiché i progettisti dell'epoca, ritenevano che nessuno avrebbe mai usato un linguaggio la cui efficienza non era paragonabile a quella dei linguaggi assembly in voga in quel periodo.

Un esemplare di IBM 704 presente al Museo Nazionale di Scienza e Tecnologia *Leonardo da Vinci* a Milano.

Il primo manuale di riferimento per i programmatori FORTRAN I, The FORTRAN automatic coding system for the IBM 704 EPDM, scritto dallo stesso Backus, è del 1956 mentre il compilatore sopracitato fu pubblicato nel 1957.

Grazie agli innumerevoli programmi applicativi sviluppati nel corso degli anni ed alle immense librerie di funzioni richiamabili anche da programmi scritti con altri linguaggi, Fortran è tuttora un linguaggio usato.

Esistono delle sue varianti per supportare il calcolo parallelo, utili alla simulazione di fluidi, interazioni fra particelle, previsioni meteorologiche, ecc... Progettato originariamente come linguaggio procedurale, alcune sue versioni più recenti consentono di usare costrutti derivati della programmazione orientata agli oggetti.

Veniva usato su larga scala soprattutto per scrivere programmi che eseguivano molti calcoli matematici e questo incoraggiò i progettisti a creare compilatori che generavano codice molto velocemente. L'inclusione di un tipo apposito per la rappresentazione dei numeri complessi, rese Fortran il linguaggio de facto della comunità scientifica.

Al giorno d'oggi vengono ancora progettati nuovi compilatori Fortran con prestazioni sempre più alte. Non si deve dimenticare che molti progressi nella teoria e nella progettazione di traduttori/compilatori, sono proprio derivati dalla necessità di ottenere compiler Fortran in grado di generare codice migliore.

Diverse sono le versioni nate: FORTRAN I nel 1957, FORTRAN II nel 1958, FORTRAN III nel 1958, usato da una ventina di clienti di IBM ma mai pubblicato come prodotto commerciale per la sua mancanza di portabilità, FORTRAN IV nel 1961, ad oggi la versione più conosciuta e diffusa, FORTRAN 66 nel 1966, FORTRAN 77 nel 1977, Fortran 90 nel 1990, Fortran 95 nel 1995, Fortran 2003 nel 2003 e Fortran 2008 nel 2008 (praticamente la stessa creatività che hanno quelli di EA sports nello scegliere i nomi per FIFA).

FORTRAN II introdusse la possibilità di poter avere compilazioni separate, FORTRAN III la possibilità di usare espressioni booleane (o logiche) e di inserire codice assembly in line (cioè di poter mescolare istruzioni Fortran e istruzioni in linguaggio assembly).
Proprio questa ultima modifica lo rese non portabile poiché, come forse saprete, ciascun linguaggio assembly è specifico di un dato calcolatore, non essendo altro che una forma simbolica del suo linguaggio macchina.

Le espressioni booleane furono mantenute anche in FORTAN IV, mentre vide la luce un nuovo costrutto condizionale chiamato IF logico, in grado di eseguire un test sulla veridicità di un'espressione booleana. Quest'ultimo si aggiungeva alla già presente istruzione di IF aritmetico, introdotta in FORTRAN I, capace di valutare un'espressione numerica, prevedendo tre diversi salti a seconda che il suo valore fosse negativo, nullo o positivo.

I primi programmi in FORTRAN erano creati su schede perforate a 80 colonne, con regole molto stringenti sul formato della singola istruzione. In particolare: una riga di codice non poteva superare i 72 caratteri, che venivano perforati nelle colonne da 1 a 72, se la colonna 1 conteneva una C i caratteri successivi costituivano un commento, le colonne da 1 a 5 erano riservate ad un'etichetta numerica che identificava l'istruzione e che poteva essere usata per saltare all'istruzione stessa da un altro punto del programma, le colonne da 7 a 72 contenevano l'istruzione vera e propria, la colonna 6 (normalmente vuota) se conteneva un carattere qualsiasi (spesso un *) indicava che l'istruzione era il seguito dell'istruzione perforata nella scheda precedente. D'altra parte, le colonne da 73 a 80 venivano spesso usate per numerare le schede e permettere così di riordinarle nel caso fossero state accidentalmente mescolate.

Una scheda perforata dell'IBM System/3 del 1969.

Con l'avvento del Fortran 90, una revisione massiccia del linguaggio sino a quel momento esistente, queste regole stringenti furono abbandonate in favore di codice in formato libero. Altre notevoli innovazioni introdotte dal Fortran 90 sono l'allocazione dinamica della memoria, le operazioni sugli array, i tipi di dati astratti, l'overloading (o sovraccarico) degli operatori, i puntatori e i moduli (quest'ultimi consentono di raggruppare sottoprogrammi e dati correlati).

Il Fortran 95, una revisione minore del suo predecessore, ha introdotto essenzialmente la possibilità di effettuare programmazione parallela.

Fortran 2003 (anche se il documento che lo definisce è stato pubblicato nel 2004) è un'estensione propria del Fortran 95, che include l'aritmetica in virgola mobile IEEE 754, la gestione delle eccezioni, costrutti per la programmazione orientata agli oggetti e una migliorata interoperabilità col linguaggio C.

La bozza finale dello standard di Fortran 2008 è stata rilasciata il 7 giugno 2010 ed introduce parecchie novità mentre lo standard formale più recente del linguaggio è il Fortran 2018, ed è nuovamente una revisione minore del fratello nato 10 anni prima.

E oggi?

Nel 2017 la NASA aveva annunciato una specie di hackaton lanciando una sfida da risolvere in Fortran, per poi annullarlo poco dopo.
Vi era una semplice regola: esiste un risolutore (sotto determinate condizioni) per le equazioni di Navier-Stokes, le quali sono un sistema di equazioni differenziali alle derivate parziali che descrivono il comportamento di un fluido dal punto di vista macroscopico e, in sostanza, chi riusciva ad eseguirlo in modo più veloce sul supercomputer Pleiades, avrebbe vinto il primo premio.

Pleiades, il super computer NASA.

Dato che Fortran non è il linguaggio più popolare all'interno della comunità di programmatori, molti credono che sia complesso ed obsoleto e la programmazione in Fortran è percepita come andare in giro con una carrozza trainata da cavalli in un mondo di automobili.
Tanti pensavano che la competizione non avrebbe mai avuto luogo per mancanza di candidati, mentre avvenne esattamente l'opposto: il numero estremamente elevato di candidati, oltre 1.800, unito alla difficoltà nel soddisfare i requisiti di controllo per la distribuzione pubblica del software, fece fare un passo indietro agli organizzatori.

Fortran non è ovviamente obsoleto né complesso. In realtà, questi pregiudizi sono nati perché è stato progettato per rendere più semplice ed efficiente la compressione dei numeri. I suoi utilizzatori sono scienziati e ingegneri, non informatici (o ingegneri del software).
Così iniziò il mito della complessità, la maggior parte del codice che si vede in Fortran è davvero complesso, questo perché il problema alla base è complesso ed il codice è stato scritto da specialisti del problema stesso e non da programmatori.

Fortran è sufficientemente semplice per queste figure non informatiche, ultra specializzate riguardo il dominio del problema, a cui non interessa scrivere del buon codice organizzato, ma necessitano comunque di scrivere del codice ed ottenere dei buoni risultati.

Come abbiamo visto nella cronologia delle uscite, anche il pregiudizio riguardante la vecchiaia del linguaggio è infondato. Fortran viene costantemente modernizzato passo dopo passo senza tradire la sua mission: rimanere un linguaggio semplice agli occhi di utilizzatori non informatici.
Tuttavia, il Fortran "moderno" contiene moduli, oggetti, tipi generici e supporto integrato al calcolo parallelo: nuove funzionalità lo fanno crescere costantemente per soddisfare le esigenze del mondo attuale.
Per certi versi, eccelle ancora nella buona vecchia programmazione strutturata: ha caratteristiche peculiari che mancano persino nei linguaggi mainstream come il C, ad esempio, si può uscire o continuare un ciclo da un ciclo annidato.

Conclusioni

Se Fortran, come abbiamo detto, non è complesso né obsoleto, come mai è sparito dai nostri radar?

Alcuni programmatori dell'eopoca che scrivono il loro codice su schede perforate

La risposta a questa domanda è la medesima che daremmo se dovessimo chiederci dove sono finiti i vecchi programmatori.
Possiamo immaginare che banalmente essi rimangano in attività e, poiché il numero di essi raddoppia ogni cinque anni, sono notevolmente sommersi dall'esercito di persone più giovani che si affaccia su questo mondo.

D'altro canto, c'è anche da considerare che gli utenti di Fortran sono scienziati e ingegneri, ed il loro numero non cresce esponenzialmente. Per cui possiamo dedurre che abbiamo più o meno la stessa quantità di utilizzatori, vecchi e giovani, che esisteva circa 30 o 40 anni fa, quando Fortran era al suo apice.

In un certo senso, lasciatemi affermare che Fortran è stato al suo apice per tutto questo tempo e, se vogliamo usare un'esagerazione, è il mondo attorno ad essere impazzito: linguaggi che compaiono e scompaiono in un batter d'occhio; paradigmi che maturano e spariscono, l'intera industria del software è ora molto più simile a quella della moda!

Ma quando si vuol far volare un aereo, si devono ancora fare i conti con il fidato Fortran. Questa è la bellezza delle cose che funzionano, forse non serve che esse cambino molto...