# Fortran

Fortran (o FORTRAN) és el primer llenguatge de programació d'alt nivell, desenvolupat a la dècada dels 50 i que encara s'usa actualment. El nom ve de FORmula TRANslation ('traducció de fórmules' en anglès). Les primeres versions usaven el nom FORTRAN, però l'estàndard actual es refereix al llenguatge com a Fortran
El primer compilador de FORTRAN per a l'IBM 704 el va desenvolupar de 1954 a 1957 un equip d'IBM dirigit per John W. Backus. L'objectiu principal era desenvolupar un llenguatge d'alt nivell, que permetés escriure programes independents de la màquina, però que tingués una velocitat d'execució semblant a la del llenguatge d'assemblador. El llenguatge va ser un èxit rotund i la comunitat científica el va adoptar de seguida. Com que el llenguatge s'ha fet servir sempre per a programes numèricament intensius, els compiladors de Fortran solen produir executables molt eficients. Tot i això, a finals dels anys 80, el llenguatge (Fortran 77) havia quedat força endarrerit respecte a altres com C. Les noves revisions (Fortran 90 i 95) l'han modernitzat eliminant-ne algunes de les característiques més obsoletes i afegint suport per a programació orientada a objectes, paral·lelisme, recursivitat, variables punter, assignació d'emmagatzematge dinàmica, i instruccions per cas, entre d'altres. Actualment, Fortran s'utilitza gairebé només per a càlcul científic i anàlisi numèrica.

## Història

Als anys cinquanta ja hi havia llenguatges de programació que eren utilitzats per a grans processos de dades. Al 1953, John W. Backus va idear una proposta basada en crear un llenguatge de programació més “simple” i més “accessible”.
El llenguatge d'alt nivell (llenguatge que incorpora un llenguatge completament humà i intel·ligible) proposat per Backus buscava poder fer programacions més fàcils, directes i intel·ligibles per a l'ordinador d'IBM, l'IBM 704.
Es van unir a l'equip de Jhon W. Backus els programadors Sheldon F. Best, Richard Goldberg, Lois Haibit, Harlan Herrick, Robert Nelson, Roy Nutt, David Sayre, Peter Sheridan i Irving Ziller.
Finalment, al 1954, l'equip va presentar la primera especificació de Fortran (IBM Mathematical FORmula TRANslating System) i al 1956 van presentar la primera alternativa de llenguatge de programació per a l'ordinador IBM 704.
No obstant, el Fortran va ser exclusiu per a ordinadors IBM fins al 1961, moment en què va passar a ser públic per poder-lo utilitzar altres fabricants i ampliar la base més enllà d'IBM. A partir d'aquí, s'han creat noves versions del llenguatge per adaptar-les a les noves tecnologies. Les dues últimes, a data de novembre 2020, van ser publicades el 2008 i 2018.

## Funcionament

El llenguatge Fortran és un llenguatge basat en càlculs numèrics dissenyats al seu inici per a ser utilitzats en ordinadors IBM i dirigit a científics i enginyers.
Es diu que és un llenguatge d'alt nivell ja què es caracteritza per la seva potència de càlcul matemàtic, però a la vegada està limitat en la seva aplicació: edició d'informes, gestió d'arxius o tractament de cadenes de caràcters.
Va ser dissenyat per a l'ús amb targeta perforada de 80 columnes, de manera que l'ordre de les instruccions havia de ser seqüencial (la programació dels algoritmes era lineal). Degut a l'evolució de les tecnologies informàtiques, el Fortran també va haver d'evolucionar introduint noves funcions i estructures de control. També va afegir seccions per poder fer operacions matemàtiques amb matrius i millores útils per al compilador (permet traduir programes sencers per a diferents màquines).

## Avantatges i inconvenient de la seva sintaxi

Com va ser una primera temptativa de creació d'un llenguatge de programació d'alt nivell, té una sintaxi considerada arcaica per molts programadors que aprenen llenguatges més moderns. És difícil escriure un bucle "for", i errors en l'escriptura d'un sol caràcter poden portar a errors durant el temps d'execució en comptes d'errors de compilació, en el cas que no s'usin les construccions més freqüents. Algunes de les primeres versions no posseïen facilitats que són considerades molt útils, tal com l'assignació dinàmica de memòria.
S'ha de tenir en compte que la sintaxi de Fortran va ser orientada per a l'ús en treballs numèrics i científics. Moltes de les seves deficiències han estat abordades en revisions recents del llenguatge. Per exemple, Fortran 95 posseeix comandos molt més breus per a efectuar operacions matemàtiques amb matrius i disposa de tipus. Això no sols millora molt la lectura del programa sinó que a més aporta informació útil al compilador.
Per aquestes raons Fortran pràcticament no s'usa fora dels camps científics i de l'anàlisi numèrica, però roman com el llenguatge preferit per a desenvolupar aplicacions de computació numèrica d'alt rendiment.

## Versions

El llenguatge Fortran ha anat evolucionant amb els anys, i se n'han publicat successius estàndards oficials:
* FORTRAN IV (o FORTRAN 66)
* FORTRAN 77
* Fortran 90: ANSI X3.198-1992 (R1997). Títol: Programming Language "Fortran" Extended.
* Fortran 95: ISO/IEC 1539-1:1997. Títol: Information technology - Programming languages - Fortran - Part 1: Base language
* Fortran 2003 ISO/IEC 1539-1:2004 Títol: Information technology - Programming languages - Fortran - Part 1: Base language
* Fortran 2008 ISO/IEC 1539-1:2010
* Fortran 2018, inicialment anomenat Fortran 2015. És l'última versió existent a 11.2020.

### Fortran 90

Fortran 90 suposa un gran canvi en la història de Fortran. Afegeix moltes característiques que reflecteixen els canvis en la programació des del 1978.
* El codi es pot escriure en format lliure, i la facilitat d'escriure en minúscules
* Els identificadors poden tenir fins a 31 caràcters
* Es poden fer comentaris en una línia
* Es poden fer operacions de matrius
* Subprogrames recursius
* Mòduls, permet reunir subprogrames i dades, permet limitar l'accés a algunes parts del codi
* Millora de la gestió dels arguments dels subprogrames, i permet comprovar les interfícies en temps de compilació
* Sobrecàrrega d'operadors
* Estructures de dades
* Millora en declarar les variables. Es permet donar més informació de la variable
* Gestió de la memòria dinàmica. Es permet reservar/alliberar memòria en temps d'execució
* Es pot declarar una variable com a punter
* Bucles estructurats. Acabats amb "end do", i amb les ordres "exit" i "cycle" per poder canviar la lògica del bucle
* "Select Case"
* Control de l'usuari de la precisió
* Noves funcions intrínseques

### Fortran 95

El Fortran 95 és una petita revisió de Fortran 90. No pretén fer cap canvi radical, sinó corregir alguns problemes del Fortran 90 i afegir unes quantes extensions basades en el High Performance Fortran:
* "Forall" i "Where" que ajuden a la vectorització
* L'usuari pot definir els subprogrames com a "pure" i "elemental"
* Inicialització de punters i estructures
Una de les grans addicions a l'estàndard és l'ISO Technical Report: TR-15581: Enhanced Data Type Facilities, normalment conegut com a Allocatable TR. Aquest millora les capacitats de la reserva de memòria. Es poden definir matrius "alocatables" a dintre de les estructures de dades, reservar la memòria en subprogrames i reservar la memòria com a retorn d'una funció.
Una altra addició és el suport de l'aritmètica de coma flotant, definit en l'estàndard ISO Technical Report: TR-15580: Floating-point exception handling

### Fortran 2003

És una revisió amb moltes característiques noves. Existeix un sumari d'aquestes en la plana web oficial del Fortran Working Group (WG5)

### Fortran 2008

Aquest és l'últim estàndard, ISO/IEC 1539-1:2010, conegut de manera informal com Fortran 2008, va ser aprovat el setembre de 2010. Tal com el Fortran 95, aquesta és una modificació menor, que incorpora aclariments i correccions a Fortran 2003.

### Fortran 2018

La darrera revisió del llenguatge (Fortran 2018) es coneixia anteriorment com Fortran 2015.
Fortran 2018 incorpora dues especificacions tècniques publicades prèviament:
* ISO / IEC TS 29113: 2012 Més interoperabilitat amb C
* ISO / IEC TS 18508: 2015 Funcions paral·leles addicionals a Fortran
Altres canvis i noves funcions inclouen compatibilitat amb ISO / IEC / IEEE 60559: 2011 (la versió de l ’ IEEE floating point standard abans de l’última revisió menor IEEE 754-2019), entrada / sortida hexadecimal, IMPLICIT NONE millores i altres canvis.

## Programa d'exemple (Fortran 90 o 95)
### Hola món

Aquest programa escriu "Hola món" al dispositiu de sortida predeterminat (habitualment, la consola),

### Assignació de memòria

El següent programa mostra l'ús de l'assignació dinàmica de memòria i operacions basades en vectors, dues funcionalitats noves afegides en la versió Fortran 90. En particular, cal remarcar l'absència de llaços DO i dels connectors IF/THEN a l'hora de manipular els vectors matemàticament com un tot.

## Portabilitat

La portabilitat era un problema en els primers temps perquè no hi havia un estàndard acordat -ni tan sols el manual de referència d'IBM- i les empreses informàtiques competien per diferenciar les seves ofertes de les dels altres oferint característiques incompatibles. Els estàndards han millorat la portabilitat. L'estàndard de 1966 proporcionava una sintaxi i una semàntica de referència, però els venedors continuaven proporcionant extensions incompatibles. Encara que els programadors acurats s'adonaven que l'ús d'extensions incompatibles causava costosos problemes de portabilitat, i per això utilitzaven programes com The PFORT Verifier, no va ser fins al cap de la norma de 1977, quan l'Oficina Nacional d'Estàndards (ara NIST) va publicar FIPS PUB 69, que els processadors comprats pel Govern dels Estats Units havien de diagnosticar les extensions de la norma. En lloc d'oferir dos processadors, essencialment cada compilador finalment tenia almenys una opció per a diagnosticar extensions.
Les extensions incompatibles no eren l'únic problema de portabilitat. Per als càlculs numèrics, és important tenir en compte les característiques de l'aritmètica. Això va ser abordat per Fox et al. en el context de l'estàndard de 1966 per la biblioteca PORT. Les idees s'hi van utilitzar àmpliament, i finalment es van incorporar en l'estàndard de 1990 per mitjà de funcions intrínseques de consulta. L'adopció generalitzada (ara gairebé universal) de l'estàndard IEEE 754 per a l'aritmètica binària de punt flotant ha eliminat essencialment aquest problema.
L'accés a l'entorn informàtic (per exemple, la línia de comandos del programa, les variables d'entorn, l'explicació textual de les condicions d'error) va continuar sent un problema fins que va ser abordat per la norma de 2003.
Grans col·leccions de programari de biblioteca que podrien descriure's com vagament relacionades amb l'enginyeria i els càlculs científics, com les biblioteques de gràfics, s'han escrit en C i, per tant, l'accés a elles presentava un problema de portabilitat. Això s'ha solucionat amb la incorporació de la interoperabilitat de C en la norma de 2003.
Ara és possible (i relativament fàcil) escriure un programa totalment portable en Fortran, fins i tot sense recórrer a un preprocessador.

## Referències

* ↑ «Fortran». Gran Enciclopèdia Catalana. Barcelona: Grup Enciclopèdia Catalana.
* ↑ John Backus. «The history of FORTRAN I, II and III» (en anglès).
* ↑ W. H. Press, S. A. Teukolsky, W. T. Vetterling, B. P. Flannery. Numerical Recipes in Fortran 90. Cambridge University Press, 1999, p. 953-9. ISBN 0-521-57439-0.
* ↑ Eugene Loh «The Ideal HPC Programming Language» (en anglès). Queue. Association of Computing Machines, 8, 6, 18-06-2010.
* ↑ McJones, Paul. «History of FORTRAN and FORTRAN II». Software Preservation Group, 18-06-2021. [Consulta: 12 octubre 2021].
* ↑ Backus, J. «The history of Fortran I, II, and III». IEEE Annals of the History of Computing, 20, 4, Oct.-Dec./1998, pàg. 68–78. DOI: 10.1109/85.728232.
* ↑ «The FORTRAN Automatic Coding System for the IBM 704 EDPM : Programmer's Reference Manual» (pdf). Applied Science Division and Programming Research Department, International Business Machines Corporation.
* ↑ McCracken, Daniel D. A guide to Fortran IV programming. Second edition. Nova York: John Wiley & Sons, 1972. ISBN 0-471-58281-6.
* ↑ Llaca, Manuel. «Fortran, el primer lenguaje de programación de alto nivel y el inicio de los compiladores» (en castellà). [Consulta: 23 novembre 2019].
* ↑ IV, FORTRANLenguaje de programación de alto nivelCreadorJohn W. BackusFecha de Creación1956VersionesFortran; Fortran 77; Fortran 90. «Fortran - EcuRed» (en castellà). [Consulta: 25 novembre 2019].
* ↑ López, José María. «La historia de Fortran y los lenguajes de programación actuales» (en espanyol europeu), 03-08-2019. [Consulta: 25 novembre 2019].
* ↑ «American National Standard – Programming Language Fortran Extended». Arxivat de l'original el 01/05/2002.
* ↑ «Fortranplus | Fortran information» (en anglès). [Consulta: 12 octubre 2021].
* ↑ Fortran Working Group (WG5) Arxivat 2011-04-23 a Wayback Machine..Sumari de noves característiques de fortran 2003 pdf
* ↑ N1836, Summary of Voting/Table of Replies on ISO/IEC FDIS 1539-1, Information technology - Programming languages - Fortran - Part 1: Base language PDF
* ↑ «Fortran 2008 - Last Working Draft». Gnu.Org. [Consulta: 10 maig 2014].
* ↑ «Technical Library» (en anglès). [Consulta: 12 octubre 2021].
* ↑ «Més interoperabilitat amb C». ISO. [Consulta: 20 novembre 2017].
* ↑ «Funcions paral·leles addicionals a Fortran». ISO. [Consulta: 20 novembre 2017].
* ↑ «The New Funcions de Fortran 2015». ISO. [Consulta: 23 juny 2017].
* ↑ «/ 04 / doctor-fortran-in-one-door-closes Doctor Fortran a "One Door Closes"». Software.intel.com. [Consulta: 21 setembre 2015].
* ↑ «El doctor Fortran va holandès : Fortran 2015». Software.intel.com. [Consulta: 19 novembre 2014].
* ↑ «Information technology — Programming languages Fortran — Part 1: Base language» (pdf). [Consulta: 12 octubre 2021].

## Bibliografia complementària

* Chapman, Stephen J. Fortran for Scientists and Engineers (en anglès). 4a. Nova York: McGraw-Hill, 2018. ISBN 978-0-07-338589-1.
* Markus, Arjen. Modern Fortran in Practice (en anglès). Cambridge: Cambridge University Press, 2012. ISBN 978-1-107-01790-0.
* Chivers, Ian; Sleightholme, Jane. Introduction to Programming with Fortran (en anglès). 4a ed.. Springer, 2018. ISBN 978-3-319-75501-4.
* Lorenzo, Mark Jones. Abstracting Away the Machine: The History of the FORTRAN Programming Language (FORmula TRANslation). Independently published, 2019. ISBN 978-1082395949.
* Metcalf, Michael «The Seven Ages of Fortran» (en anglès). Journal of Computer Science & Technology, 11, 1, 2011, pàg. 1–8.

## Enllaços externs

* USER NOTES ON FORTRAN PROGRAMMING (UNFP)
* Unit 7.1 FORTRAN 77 Arxivat 2004-06-23 a Wayback Machine. (part d'un llibre de text)
* Unit 7.2 FORTRAN 90 Arxivat 2004-06-26 a Wayback Machine. (part d'un llibre de text)
* Univ. de Cambridge -- Introducció al Fortran modern, per lliçons amb presentacions PDF Arxivat 2011-05-04 a Wayback Machine. (anglès)