Fortran

De Viquipèdia
Salta a la navegació Salta a la cerca
Infotaula de llenguatge de programacióFortran
Fortran acs cover.jpeg
Tipusllenguatge de programació, llenguatge de programació estructurada, llenguatge de programació imperatiu, llenguatge de programació procedural, llenguatge de programació orientat a objectes, generic programming language (en) Tradueix i array programming language (en) Tradueix Modifica el valor a Wikidata
Data de creació1957[1]
DissenyJohn W. Backus Modifica el valor a Wikidata
DesenvolupadorJohn Backus i IBM[1]
Paradigma de programacióprogramació estructurada, programació orientada a objectes, programació procedimental, programació genèrica, llenguatge imperatiu i array programming (en) Tradueix Modifica el valor a Wikidata
Darrera versió estableFortran 2008 (ISO/IEC 1539-1:2010)
Tipus de dadesestàtic, manifest i nominal
Majors implementacionsmúltiples, per exemple Absoft, Cray, GFortran, G95, IBM, Intel, Lahey/Fujitsu, Numerical Algorithms Group, Open Watcom, PathScale, PGI, Silverfrost, Oracle, XL Fortran,
Influenciat perSpeedcoding
Ha influenciatALGOL 58, BASIC, C, PL/I, PACT I, MUMPS, Ratfor
Sistema operatiumultiplataforma
Extensió dels fitxers.f, .for, .f90, .f95
Etiqueta d'Stack ExchangeEtiqueta Modifica el valor a Wikidata
Pàgina webWeb oficial Modifica el valor a Wikidata

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[2]

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.[1] 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.[3]

Història[modifica]

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.[4]

Com funciona?[modifica]

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.[5]

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).[6]

Versions de Fortran[modifica]

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[modifica]

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[modifica]

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[modifica]

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

Fortran 2008[modifica]

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.[8][9] Tal com el Fortran 95, aquesta és una modificació menor, que incorpora aclariments i correccions a Fortran 2003.

Fortran 2018[modifica]

La darrera revisió del llenguatge (Fortran 2018) es coneixia anteriorment com Fortran 2015.[10]

Fortran 2018 incorpora dues especificacions tècniques publicades prèviament:

  • ISO / IEC TS 29113: 2012 Més interoperabilitat amb C [11]
  • ISO / IEC TS 18508: 2015 Funcions paral·leles addicionals a Fortran [12]

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.[13][14][15][16]

Programa d'exemple (Fortran 90 o 95)[modifica]

Hola món[modifica]

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[modifica]

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[modifica]

  1. 1,0 1,1 1,2 John Backus. «The history of FORTRAN I, II and III» (en anglès).
  2. «Fortran». L'Enciclopèdia.cat. Barcelona: Grup Enciclopèdia Catalana.
  3. Eugene Loh «The Ideal HPC Programming Language» (en anglès). Queue. Association of Computing Machines, 8, 6, 18-06-2010.
  4. Llaca, Manuel. «Fortran, el primer lenguaje de programación de alto nivel y el inicio de los compiladores» (en spanish). [Consulta: 23 novembre 2019].
  5. 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].
  6. López, José María. «La historia de Fortran y los lenguajes de programación actuales» (en castellà), 03-08-2019. [Consulta: 25 novembre 2019].
  7. Fortran Working Group (WG5).Sumari de noves característiques de fortran 2003 pdf
  8. N1836, Summary of Voting/Table of Replies on ISO/IEC FDIS 1539-1, Information technology - Programming languages - Fortran - Part 1: Base language ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1836.pdfPDF ( 101 KiB)
  9. «Fortran 2008 - Last Working Draft». Gnu.Org. [Consulta: 10 maig 2014].
  10. «[https: //software.intel.com/en-us/blogs/2017 / 11/20 / doctor-fortran-in-eighteen-is-the-new-quinze El doctor Fortran a "Divuit és el nou quinze"]». Software.intel.com. [Consulta: 20 novembre 2017]. < / ref> És una revisió important i es va publicar el 28 de novembre de 2018. <ref name = "F2018"> «[https: //wg5-fortran.org/f2018.html Fortran 2018]». ISO. [Consulta: 30 novembre 2018].
  11. «[https: //wg5-fortran.org/N1901-N1950/N1942.pdf Més interoperabilitat amb C]». ISO. [Consulta: 20 novembre 2017].
  12. «[http: //isotc.iso.org/livelink/livelink? Func = ll & objId = 17288706 & objAction = Open Funcions paral·leles addicionals a Fortran]». ISO. [Consulta: 20 novembre 2017].
  13. «[http: //isotc.iso.org/livelink/livelink? func = ll & objId = 19044944 & objAction = Open The New Funcions de Fortran 2015]». ISO. [Consulta: 23 juny 2017].
  14. «[https: //software.intel.com/en-us/blogs/2015/09 / 04 / doctor-fortran-in-one-door-closes Doctor Fortran a "One Door Closes"]». Software.intel.com. [Consulta: 21 setembre 2015].
  15. «[http: //software.intel.com/en-us/blogs/2013/08/08/doctor-fortran-goes-dutch-fortran-2015 El doctor Fortran va holandès : Fortran 2015]». Software.intel.com. [Consulta: 19 novembre 2014].
  16. Fortran 201 8 Document d’interpretació, 9 d’octubre de 2018

Enllaços externs[modifica]

A Wikimedia Commons hi ha contingut multimèdia relatiu a: Fortran