Oggi diamo per scontato che un programmatore scriva formule e cicli in un linguaggio leggibile e che un compilatore li traduca in codice macchina efficiente. A metà degli anni Cinquanta non era affatto ovvio. Molti programmatori esperti erano convinti che nessun programma automatico potesse produrre codice veloce quanto quello scritto a mano. FORTRAN, sviluppato in IBM da un gruppo guidato da John Backus, dimostrò il contrario e cambiò il modo di lavorare di un'intera generazione di scienziati e ingegneri.
Il costo della programmazione
All'inizio degli anni Cinquanta i computer erano costosissimi e il tempo macchina era la risorsa da risparmiare. Ma Backus notò che il costo della programmazione e della correzione degli errori stava diventando paragonabile, se non superiore, a quello della macchina. Scrivere un calcolo scientifico in codice macchina o in linguaggio assembly richiedeva settimane e produceva programmi difficili da leggere e da modificare.
Alla fine del 1953 Backus propose ai suoi superiori in IBM di sviluppare un sistema che permettesse di scrivere i programmi in una notazione simile a quella matematica. Il progetto fu approvato e il gruppo iniziò a lavorare nel 1954. Il nome FORTRAN deriva da FORmula TRANslation, traduzione di formule.
La sfida dell'efficienza
Il gruppo sapeva che il linguaggio sarebbe stato accettato solo a una condizione: il codice generato doveva essere quasi altrettanto efficiente di quello scritto a mano da un esperto. Se un programma FORTRAN fosse stato due volte più lento, i clienti avrebbero continuato a programmare in assembly.
Per questo una parte enorme del lavoro fu dedicata all'ottimizzazione: il compilatore analizzava il programma per eliminare calcoli ridondanti, usare al meglio i registri e generare cicli efficienti, in particolare per l'accesso agli elementi degli array. Il primo compilatore FORTRAN, consegnato ai clienti dell'IBM 704 nella primavera del 1957, è considerato il primo compilatore ottimizzante della storia.
Il risultato superò le aspettative di molti. In parecchi casi il codice generato era paragonabile a quello scritto a mano, e il tempo per scrivere un programma si riduceva drasticamente.
Com'era un programma FORTRAN
I primi programmi FORTRAN si scrivevano su schede perforate, con un formato rigido: le colonne da 1 a 5 per le etichette numeriche, la colonna 6 per indicare la continuazione di una riga, il codice dalla colonna 7 alla 72. Ecco un esempio nello stile delle versioni classiche, che calcola la somma dei quadrati dei primi dieci numeri:
ISOMMA = 0
DO 10 I = 1, 10
ISOMMA = ISOMMA + I*I
10 CONTINUE
PRINT *, ISOMMA
END
Alcune caratteristiche saltano all'occhio:
- il ciclo
DOindica l'etichetta dell'istruzione che chiude il ciclo; - le variabili non venivano dichiarate: per convenzione, quelle con iniziale tra I e N erano intere, le altre reali;
- tutto era in maiuscolo, perché le perforatrici dell'epoca non avevano le minuscole.
La convenzione sulle iniziali delle variabili ha lasciato un'abitudine che sopravvive ancora: usare i, j, k come nomi dei contatori dei cicli.
L'evoluzione del linguaggio
FORTRAN si diffuse rapidamente nei centri di calcolo scientifici e fu presto portato su computer di altri produttori. Le versioni principali raccontano l'evoluzione della programmazione:
| Versione | Novità principali |
|---|---|
| FORTRAN (1957) | Espressioni, cicli DO, array |
| FORTRAN II (1958) | Sottoprogrammi compilati separatamente |
| FORTRAN 66 | Primo linguaggio di programmazione con uno standard ufficiale americano |
| FORTRAN 77 | Costrutto IF-THEN-ELSE strutturato, stringhe di caratteri |
| Fortran 90 | Formato libero, moduli, operazioni su interi array |
Con Fortran 90 il nome cominciò a essere scritto con la sola iniziale maiuscola, e il linguaggio adottò costrutti moderni. Le revisioni successive hanno aggiunto la programmazione orientata agli oggetti e il supporto al calcolo parallelo.
Perché è ancora usato
Fortran è ancora oggi usato nel calcolo scientifico ad alte prestazioni: modelli climatici, fluidodinamica, fisica computazionale. Le ragioni sono concrete. Esistono enormi librerie numeriche collaudate per decenni, e il linguaggio è progettato in modo da permettere ai compilatori ottimizzazioni aggressive sulle operazioni con array. Molte librerie di algebra lineare usate indirettamente anche da linguaggi moderni hanno origine nel mondo Fortran.
John Backus dopo FORTRAN
Backus diede un altro contributo fondamentale partecipando alla definizione di ALGOL. Per descrivere la sintassi di quel linguaggio propose una notazione formale, poi perfezionata da Peter Naur e nota come forma di Backus-Naur (BNF). Ancora oggi le grammatiche dei linguaggi di programmazione e di molti formati di dati si descrivono con varianti di questa notazione.
Nel 1977 Backus ricevette il premio Turing. Nella conferenza che accompagnò il premio criticò, in modo sorprendente, proprio lo stile di programmazione imperativo che FORTRAN aveva reso popolare, proponendo un approccio funzionale.
La lezione di FORTRAN
La storia di FORTRAN contiene un principio che vale ancora: un'astrazione viene adottata solo se il suo costo è accettabile. I linguaggi di alto livello si sono imposti non perché fossero più eleganti, ma perché il compilatore di Backus dimostrò che la comodità non doveva per forza essere pagata con la lentezza.
In sintesi
- FORTRAN fu proposto da John Backus in IBM alla fine del 1953 e il primo compilatore fu consegnato per l'IBM 704 nel 1957.
- Il suo compilatore ottimizzante dimostrò che il codice generato automaticamente poteva competere con quello scritto a mano.
- FORTRAN 66 fu il primo linguaggio con uno standard ufficiale americano; Fortran 90 introdusse il formato libero e i moduli.
- Backus contribuì anche alla notazione BNF e ricevette il premio Turing nel 1977.