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, etc. 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).

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),
program hola
 write(*,*)'Hola món!'
end program hola

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.

 program mitjana

 ! Llegeix uns quants nombres i en calcula la seva mitjana.
 ! Tal i com està escrit, si no hi ha punts d'entrada, la mitjana que retorna és zero.
 ! Tot i que potser aquest no és el comportament desitjat, ajuda a mantenir l'exemple senzill.

 implicit none

 real, dimension(:), allocatable :: points
 integer :: number_of_points
 real :: average_points=0., positive_average=0., negative_average=0.

 write (*,*) "Entreu el nombre de punts dels que desitgeu calcular-ne la mitjana:"
 read (*,*) number_of_points

 allocate (points(number_of_points))

 write (*,*) "Entreu els punts dels que en voleu calcular la mitjana:"
 read (*,*) points

 ! Calculant la mitjana sumant els punts i dividint-los pel nombre total de punts 
 if (number_of_points > 0) average_points = sum(points) / number_of_points

 ! Ara calcularem la mitjana dels valors positius i negatius per separat
 if (count(points > 0.) > 0) then
 positive_average = sum(points, points > 0.) / count(points > 0.)
 end if

 if (count(points < 0.) > 0) then
 negative_average = sum(points, points < 0.) / count(points < 0.)
 end if

 deallocate (points)

 ! Mostra el resultat al terminal
 write (*,'(a,g12.4)') 'Mitjana = ', average_points
 write (*,'(a,g12.4)') 'Mitjana dels valors positius = ', positive_average
 write (*,'(a,g12.4)') 'Mitjana dels valors negatius = ', negative_average

 end program mitjana

Referències

Bibliografia complementària

Enllaços externs 

 USER NOTES ON FORTRAN PROGRAMMING (UNFP)
 Unit 7.1 FORTRAN 77  (part d'un llibre de text)
 Unit 7.2 FORTRAN 90  (part d'un llibre de text)
 Univ. de Cambridge -- Introducció al Fortran modern, per lliçons amb presentacions PDF 

Llenguatges de programació
Llenguatges de programació orientats a objectes