Privacy Policy Cookie Policy Terms and Conditions Fortran - Wikipedia

Fortran

Da Wikipedia, l'enciclopedia libera.

Il Fortran (o FORTRAN: il nome in tutte maiuscole è stato sostituito da quello con la sola iniziale maiuscola a partire dal Fortran 90), è uno dei primi linguaggi di programmazione, essendo stato sviluppato, a partire dal 1954, da un gruppo di lavoro guidato da John Backus. Il primo manuale di riferimento per il programmatore del FORTRAN I, "The FORTRAN automatic coding system for the IBM 704 EDPM", scritto dallo stesso Backus, è del 1956; il compilatore fu rilasciato nel 1957. Il Fortran è un linguaggio compilato (raramente interpretato), imperativo, con tipizzazione statica delle variabili, progettato principalmente per il calcolo scientifico e numerico.

Il suo nome deriva da Formula Translation (o Translator), cioè traduzione/traduttore di formule (matematiche) in algoritmi computazionali.

Grazie sia agli innumerevoli programmi applicativi sviluppati nel corso degli anni, sia alle sterminate librerie di funzioni (richiamabili anche da programmi scritti con altri linguaggi di programmazione), il Fortran è tuttora vivo e vegeto.

Di esso esistono varianti per il calcolo parallelo (usate nel calcolo scientifico: simulazione di fluidi, interazioni fra particelle, previsioni meteorologiche, ecc.); inoltre, anche se progettato originariamente come linguaggio procedurale, alcune sue versioni più recenti consentono di usare anche costrutti propri della programmazione orientata agli oggetti.

Indice

[modifica] Esempi di programmi

[modifica] Hello, world!

Il seguente esempio stampa il testo "Hello world".

      PROGRAM HELLO
        PRINT *, 'Hello, world'
      END

[modifica] Uno dei primi programmi in Fortran

Il programma seguente, scritto da Backus, è riportato nel manuale per il programmatore del FORTRAN I citato sopra. Il programma legge N numeri e ne calcola il massimo.

         DIMENSION A(999) 
         FREQUENCY 30 (2,1,10), 5(100) 
         READ 1, N, (A(I), I = 1,N) 
       1 FORMAT (I3/(12F6.2)) 
         BIGA = A(1) 
       5 DO 20 I = 2,N 
      30 IF (BIGA-A((I)) 10,20,20 
      10 BIGA = A(I) 
      20 CONTINUE 
         PRINT 2, N, BIGA 
       2 FORMAT (22H1THE LARGEST OF THESE NUMBERS IS F7.2) 
         STOP 77777 

[modifica] La storia del 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 trattò di un compilatore ottimizzante (o ottimizzatore), poiché i progettisti ritenevano che nessuno avrebbe usato un linguaggio la cui efficienza non si avvicinasse a quella dei linguaggi assemblatori.

Il linguaggio fu 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 veloce. L'inclusione del tipo numero complesso rese poi il Fortan il linguaggio d'elezione nella comunità scientifica. Al giorno d’oggi vengono ancora progettati nuovi compilatori Fortran, con prestazioni sempre più alte. Non si deve dimenticare poi che molti progressi nella teoria e nel progetto dei compilatori sono proprio derivati dalla necessità di ottenere compilatori Fortran in grado di generare un "buon" codice.

Diversi sono le versioni Fortran apparse: il FORTRAN I nel 1957, il FORTRAN II nel 1958, il FORTRAN III nel 1958 (usato da una ventina di clienti dell'IBM, ma mai rilasciato come prodotto commerciale per la sua mancanza di portabilità), il FORTRAN IV nel 1961, il FORTRAN 66 nel 1966, il FORTRAN 77 nel 1977, il Fortran 90 nel 1990, il Fortran 95 nel 1995 e il Fortran 2003 nel 2003.

Il FORTRAN II introdusse la possibilità di compilazioni separate, il FORTRAN III la possibilità di usare espressioni booleane (o logiche) e quella di inserire "in linea" codice in linguaggio assemblatore (cioè di mescolare istruzioni Fortran e istruzioni in linguaggio assemblatore). Fu questo a renderlo non portabile, poiché ciascun assemblatore ovviamente è specifico di un dato calcolatore, non essendo altro, in ultima analisi, che una forma simbolica del suo linguaggio macchina. Le espressioni booleane furono introdotte anche nel FORTAN IV, insieme alla nuova istruzione condizionale IF in grado di eseguire un test sulla veridicità di un'espressione booleana, che si aggiungeva alla precedente istruzione condizionale IF presente nel FORTRAN II (che a sua volta l'aveva ereditata dal FORTRAN I, come si può vedere nel programma d'esempio, riportato sopra, che calcola il massimo di N numeri). Questa valutava invece un'espressione numerica e prevedeva tre diversi salti a seconda che il suo valore fosse negativo, nullo o positivo.

I primi programmi in FORTRAN venivano perforati per lo più su schede a 80 colonne, con regole molto stringenti. Una riga di codice non poteva superare i 72 caratteri, che venivano perforati nelle colonne da 1 a 72. In particolare se la colonna 1 conteneva una C i caratteri successivi costituivano un commento; le colonne da 1 a 5 potevano contenere 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; la colonna 6 era normalmente vuota e, se conteneva un carattere, indicava che l'istruzione era il seguito dell'istruzione perforata nella scheda precedente. Le colonne da 73 a 80 venivano spesso usate per numerare le schede e permettere così di riordinarle nel caso fossero state accidentalmente mescolate.

Con l'avvento del Fortran 90, una revisione "principale" del linguaggio, queste regole stringenti sono state abbandonate in favore del 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 puntatore e i moduli (questi ultimi consentono di raggruppare sottoprogrammi e dati correlati).

Il Fortran 95, una revisione "minore" del linguaggio, ha introdotto essenzialmente la possibilità delle programmazione parallela.

Lo standard formale più recente del linguaggio è il Fortran 2003 (anche se il documento che lo definisce è stato pubblicato nel 2004). Si tratta di 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.

[modifica] Caratteristiche

I primi programmi in Fortran, come già detto, dovevano essere scritti con regole molto stringenti (imposte dall’uso delle schede perforate). Inoltre facevano un uso piuttosto pesante di etichette numeriche e dell’istruzione di salto GOTO. Queste “necessità” sono state eliminate dalle versioni più recenti del linguaggio. Sono stati inoltre introdotti concetti “moderni” di programmazione (ad esempio il costrutto IF-THEN-ELSE, a partire dal FORTRAN 77) , sempre tuttavia non perdendo di vista gli obiettivi della sinteticità del codice sorgente e dell’efficienza del codice eseguibile. In Fortran sono anche stati scritti molti linguaggi specializzati, fra cui il SAS, per la generazione di report statistici e il SIMSCRIPT, per la simulazione di sistemi a code.

I fabbricanti di calcolatori scientifici ad alte prestazioni (come ad esempio Burroughs, CDC, Cray, Honeywell, IBM, Texas Instruments, UNIVAC) hanno aggiunto al linguaggio estensioni allo scopo di sfruttare particolari caratteristiche delle proprie macchine (come esempio si possono ricordare il FORTRAN VI G, il FORTRAN IV H e il FORTRAN IV H Extended dell’IBM, o il FORTRAN V dell’UNIVAC).

Il destino delle estensioni è di essere abbandonate o di essere incorporate in versioni successive del linguaggio.

Per finire si può ricordare che si sta sviluppando un nuovo linguaggio, il Fortress, che dovrebbe, nelle intenzioni dei progettisti, sostituire il Fortran.

[modifica] Sintassi

Trattandosi del primo linguaggio di programmazione ad alto livello, il Fortran ha una sintassi che può apparire oscura ai programmatori che hanno familiarità solo con linguaggi molto più recenti, come ad esempio il C. Tuttavia le più recenti versioni del linguaggio tengono conto dei progressi compiuti nel campo dei linguaggi di programmazione e cercano di scoraggiare tale sintassi in favore di una più trasparente e robusta. La “vecchia” sintassi infatti rende molto difficile progettare un analizzatore lessicale, e può bastare anche un solo carattere sbagliato a generare errori rilevabili solo in esecuzione, anziché in compilazione. I costrutti introdotti nelle versioni più recenti, così come la possibilità di scrivere codice in formato libero (cioè non più vincolato al rigido formalismo originale imposto dalle schede perforate) hanno molto ridotto i problemi, anche se una buona programmazione rimane sempre il miglior modo di procedere.

Si dovrebbe anche considerare il fatto che le caratteristiche del Fortran sono state ritagliate essenzialmente sul calcolo scientifico e numerico, piuttosto che sullo sviluppo del software. Così nel Fortran 95, ad esempio, esistono comandi molto brevi che consentono di effettuare operazioni matematiche sugli array, che non solo rendono i programmi molto più leggibili, ma sono di ausilio al compilatore, nel caso quest’ultimo sia in grado di generare codice che esegue operazioni matematiche in parallelo. Per i motivi accennati il Fortran, anche se è poco usato per applicazioni estranee al calcolo scientifico e numerico, rimane tuttora il linguaggio d’elezione in tali campi, oltretutto perché anche persone digiune di programmazione possono imparare facilmente a scrivere codice efficiente.

Dato che il Fortan esiste ormai da mezzo secolo, i programmi scritti in questo linguaggio (specialmente in FORTRAN 77, il suo dialetto più importante) tuttora usati sono innumerevoli. Il Fortran rimane inoltre il linguaggio di prima scelta per i programmi destinati a girare sui supercomputer, come ad esempio quelli usati per le previsioni meteorologiche, basati sui modelli matematici del clima.

[modifica] Standard

I documenti elencati nel seguito si riferiscono alle più recenti recenti standardizzazioni del Fortran.

  • ANSI X3.198-1992 (R1997). Titolo: Programming Language "Fortran" Extended. Noto informalmente come Fortran 90. Pubblicato dall'ANSI.
  • ISO/IEC 1539-1:1997. Titolo: Information technology - Programming languages - Fortran - Part 1: Base language. Noto informalmente come Fortran 95. Esistono altre due parti di questo standard. La parte 1 è stata formalmente adottata dall'ANSI.
  • ISO/IEC 1539-1:2004. Titolo: Information technology - Programming languages - Fortran - Part 1: Base language. Noto informalmente come Fortran 2003.

[modifica] Collegamenti esterni

Linguaggio Fortran su DMoz (Segnala su DMoz un link pertinente all'argomento Linguaggio Fortran)
Principali linguaggi di programmazione (tutti)

Ada | ALGOL | APL | Awk | BASIC | C | C++ | C# | COBOL | Delphi | Eiffel | Fortran | Haskell | IDL | Java | JavaScript | J# | Lisp | LOGO | ML | Objective C | O'Caml | Pascal | Perl | PHP | PL/I | PLaSM | Prolog | Python | Ruby | SAS | Scheme | sh | Simula | Smalltalk | SQL | Visual Basic

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu