Fortran - Fortran
![]() | |
Paradigm | Multi-paradigm : strukturerad , imperativ ( procedurell , objektorienterad ), generisk , array |
---|---|
Designad av | John Backus |
Utvecklare | John Backus och IBM |
Första gången dök upp | 1957 |
Stabil frisättning | Fortran 2018 (ISO / IEC 1539-1: 2018) / 28 november 2018
|
Skrivdisciplin | stark , statisk , manifest |
Filnamnstillägg |
.f , .for ,.f90
|
Hemsida | |
Stora implementeringar | |
Påverkad av | |
Snabbkodning | |
Påverkad | |
ALGOL 58 , BASIC , C , Chapel , CMS-2 , DOPE , Fortress , PL/I , PACT I , MUMPS , IDL , Ratfor |

Fortran utvecklades ursprungligen av IBM på 1950 -talet för vetenskapliga och tekniska tillämpningar, och kom senare att dominera vetenskaplig databehandling. Den har använts i över sex decennier i beräkningsintensiva områden som numerisk väderprognos , begränsad elementanalys , beräkningsvätskedynamik , geofysik , beräkningsfysik , kristallografi och beräkningskemi . Det är ett populärt språk för högpresterande datorer och används för program som jämför och rankar världens snabbaste superdatorer .
Fortran har haft många versioner, som alla har lagt till tillägg samtidigt som de till stor del bibehåller kompatibilitet med föregående versioner. Efterföljande versioner har lagt till stöd för strukturerad programmering och bearbetning av teckenbaserad data (FORTRAN 77), arrayprogrammering , modulär programmering och generisk programmering (Fortran 90), högpresterande Fortran (Fortran 95), objektorienterad programmering (Fortran 2003), samtidig programmering (Fortran 2008) och inbyggda parallella datormöjligheter (Coarray Fortran 2008/2018).
Fortrans design var grunden för många andra programmeringsspråk. Bland de mer kända är BASIC , som är baserat på FORTRAN II med ett antal syntaxrensningar , särskilt bättre logiska strukturer och andra förändringar för att fungera lättare i en interaktiv miljö.
I augusti 2021 rankades Fortran på 13: e plats i TIOBE -indexet , ett mått på programmeringsspråkens popularitet och klättrade 29 positioner från sin ranking på 42: a i augusti 2020.
Namnet FORTRAN härrör från Formula Translating System , Formula Translator, Formula Translation eller Formulaic Translation. Namnen på tidigare versioner av språket genom FORTRAN 77 stavades konventionellt med stora versaler (FORTRAN 77 var den sista versionen där Fortran-teckenuppsättningen endast innehöll stora bokstäver). Det officiella språket standarder för Fortran har hänvisat till språket som "Fortran" med inledande lock (snarare än "FORTRAN" i all-versaler) sedan Fortran 90.
I slutet av 1953 lade John W. Backus fram ett förslag till sina överordnade på IBM om att utveckla ett mer praktiskt alternativ till monteringsspråk för att programmera sin IBM 704 -dator . Backus historiska FORTRAN -team bestod av programmerarna Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt , Robert Nelson, Irving Ziller, Harold Stern, Lois Haibt och David Sayre . Dess begrepp inkluderade enklare införande av ekvationer i en dator, en idé som utvecklats av J. Halcombe Laning och demonstrerades i Laning och Zierler -systemet 1952.
Ett utkast till specifikation för IBM Mathematical Formula Translating System slutfördes i november 1954. Den första handboken för FORTRAN visades i oktober 1956, med den första FORTRAN -kompilatorn som levererades i april 1957. Detta var den första optimeringskompilatorn , eftersom kunderna var ovilliga att använda en programmeringsspråk på hög nivå om inte dess kompilator kan generera kod med prestanda som närmar sig det för handkodat monteringsspråk.
Medan samhället var skeptisk till att denna nya metod skulle kunna överträffa hand kodning, minskade det antalet programmering uttalanden som krävs för att driva en maskin med en faktor 20, och fick snabbt acceptans. John Backus sa under en intervju 1979 med Think , IBMs anställdstidning, "Mycket av mitt arbete har kommit från att vara lat. Jag tyckte inte om att skriva program, och så, när jag arbetade med IBM 701 , skrev jag program för datorer missilbanor började jag arbeta med ett programmeringssystem för att göra det lättare att skriva program. "
Språket antogs allmänt av forskare för att skriva numeriskt intensiva program, vilket uppmuntrade kompilatorförfattare att producera kompilatorer som kunde generera snabbare och mer effektiv kod. Införandet av en komplex taldatatyp på språket gjorde Fortran särskilt lämpad för tekniska applikationer som elteknik.
År 1960 fanns versioner av FORTRAN tillgängliga för IBM 709 , 650 , 1620 och 7090 datorer. Betydligt nog ökade FORTRANs ökande popularitet konkurrerande datortillverkare att tillhandahålla FORTRAN -kompilatorer till sina maskiner, så att 1963 fanns det över 40 FORTRAN -kompilatorer. Av dessa skäl anses FORTRAN vara det första allmänt använda plattformsoberoende programmeringsspråket.
Utvecklingen av Fortran parallellt med den tidiga utvecklingen av kompilatorteknik , och många framsteg inom teorin och utformningen av kompilatorer motiverades specifikt av behovet av att generera effektiv kod för Fortran -program.
FORTRAN
Den första versionen av FORTRAN för IBM 704 innehöll 32 uttalanden , inklusive:
-
DIMENSION
ochEQUIVALENCE
uttalanden - Uppgiftsuttalanden
- Trevägs aritmetiskt
IF
uttalande, som skickade kontrollen till en av tre platser i programmet beroende på om resultatet av det aritmetiska uttalandet var negativt, noll eller positivt -
IF
rapporterna för kontroll undantag (ACCUMULATOR OVERFLOW
,QUOTIENT OVERFLOW
, ochDIVIDE CHECK
); ochIF
uttalanden för att manipulera känselomkopplare och avkänningsljus -
GO TO
, BeräknasGO TO
,ASSIGN
och överlåtenGO TO
-
DO
slingor - Formaterad I / O:
FORMAT
,READ
,READ INPUT TAPE
,WRITE
,WRITE OUTPUT TAPE
,PRINT
, ochPUNCH
- Oformaterad I / O:
READ TAPE
,READ DRUM
,WRITE TAPE
, ochWRITE DRUM
- Andra I / O:
END FILE
,REWIND
ochBACKSPACE
-
PAUSE
,STOP
OchCONTINUE
-
FREQUENCY
uttalande (för att ge optimeringstips till kompilatorn).
Det aritmetiska IF
påståendet påminde om (men är inte lätt att implementera med) en trevägs jämförelse instruktion (CAS-Jämför ackumulator med lagring) tillgänglig på 704. Uttalandet gav det enda sättet att jämföra tal-genom att testa deras skillnad, med en ledsagare risk för överflöde. Denna brist övervinnades senare av "logiska" anläggningar som introducerades i FORTRAN IV.
Det FREQUENCY
uttalandet användes ursprungligen (och eventuellt) för att ge gren sannolikheter för de tre gren fall av aritmetiska IF uttalande. Den första FORTRAN -kompilatorn använde denna viktning för att vid kompileringstid utföra en Monte Carlo -simulering av den genererade koden, vars resultat användes för att optimera placeringen av grundläggande block i minnet - en mycket sofistikerad optimering för sin tid. Monte Carlo -tekniken är dokumenterad i Backus et al.: S papper om denna ursprungliga implementering, FORTRAN Automatic Coding System :
.Den grundläggande programenheten är det grundläggande blocket ; ett grundläggande block är en programsträcka som har en ingångspunkt och en utgångspunkt. Syftet med avsnitt 4 är att för avsnitt 5 förbereda en tabell över föregångare (PRED -tabell) som räknar upp grundblocken och listorna för varje grundblock som var och en av de grundläggande blocken som kan vara dess omedelbara föregångare i flöde, tillsammans med den absoluta frekvensen av varje sådan grundläggande blocklänk. Denna tabell erhålls genom att köra programmet en gång på Monte-Carlo-sätt, där resultatet av villkorliga överföringar som härrör från uttalanden av IF-typ och beräknade GO TO-värden bestäms av en slumptalsgenerator som är lämpligt viktad i enlighet med vad som helst FREQUENCY-uttalanden har tillhandahållits .
Den första FORTRAN -kompilatorn rapporterade diagnostisk information genom att stoppa programmet när ett fel hittades och mata ut en felkod på konsolen. Den koden kan letas upp av programmeraren i en tabell med felmeddelanden i bruksanvisningen och ge dem en kort beskrivning av problemet. Senare införlivades en felhanteringsunderrutin för att hantera användarfel som division med noll, utvecklad av NASA, som informerade användarna om vilken kodrad som innehöll felet.
Fast layout och stansade kort

Innan diskfiler, textredigerare och terminaler utvecklades, skrevs program oftast in på ett knapptryckningstangentbord på 80- kolumnstansade kort , en rad till ett kort. Den resulterande kortlek kommer att matas in i en kortläsare som ska sammanställas. Hålslagna kortkoder inkluderade inga små bokstäver eller många specialtecken, och specialversioner av IBM 026- knapptryckning erbjöds som skulle skriva ut de specialdesignade tecknen som användes i FORTRAN korrekt.
Fortran-program, som reflekterar praxis för inmatning av stansade kort, skrevs ursprungligen i ett format med fast kolumn, med de första 72 kolumnerna inlästa i tolv 36-bitars ord.
En bokstav "C" i kolumn 1 gjorde att hela kortet behandlades som en kommentar och ignorerades av kompilatorn. Annars delades kortets kolumner upp i fyra fält:
- 1 till 5 var etikettfältet: en sekvens av siffror här togs som en etikett för användning i DO- eller kontrolluttalanden som GO TO och IF, eller för att identifiera ett FORMAT -uttalande som det hänvisas till i ett WRITE- eller READ -uttalande. Ledande nollor ignoreras och 0 är inte ett giltigt etikettnummer.
- 6 var ett fortsättningsfält: ett annat tecken än ett tomt eller noll här gjorde att kortet togs som en fortsättning på satsen på det tidigare kortet. Fortsättningskorten var vanligtvis numrerade 1, 2, etc. och startkortet kan därför ha noll i sin fortsättningskolumn - vilket inte är en fortsättning på föregående kort.
- 7 till 72 fungerade som uttalandefält.
- 73 till 80 ignorerades (IBM 704: s kortläsare använde bara 72 kolumner).
Kolumnerna 73 till 80 kan därför användas för identifieringsinformation, såsom stansning av ett sekvensnummer eller text, som kan användas för att ordna om kort om en kortbunt tappas; även om detta i praktiken var reserverat för stabila produktionsprogram. En IBM 519 kan användas för att kopiera ett programdäck och lägga till sekvensnummer. Vissa tidiga kompilatorer, t.ex. IBM 650: s, hade ytterligare begränsningar på grund av begränsningar för deras kortläsare. Knapptryckningar kan programmeras till flik till kolumn 7 och hoppa över efter kolumn 72. Senare kompilatorer släppte de flesta restriktioner i fast format och kravet eliminerades i Fortran 90-standarden.
och var en giltig sats, ekvivalent med eftersom nollan i kolumn 6 behandlas som om det vore ett mellanslag (!), Medan det istället var tilldelningen av 1.101 till en variabel som kallas . Observera den lilla visuella skillnaden mellan ett komma och en punkt.Hollerith -strängar , som ursprungligen endast var tillåtna i FORMAT- och DATA -satser, fick ett prefix med ett teckenantal och bokstaven H (t.ex. 26HTHIS IS ALPHANUMERIC DATA.
), så att ämnen kunde behållas i teckensträngen. Missräkningar var ett problem.
FORTRAN II
IBMs FORTRAN II dök upp 1958. Huvudförbättringen var att stödja procedurprogrammering genom att tillåta användarskrivna underrutiner och funktioner som returnerade värden med parametrar som skickades som referens . COMMON -uttalandet gav ett sätt för underrutiner att komma åt vanliga (eller globala ) variabler. Sex nya uttalanden infördes:
-
SUBROUTINE
,FUNCTION
OchEND
-
CALL
ochRETURN
COMMON
Under de närmaste åren skulle FORTRAN II också lägga till stöd för DOUBLE PRECISION
och COMPLEX
datatyper.
Tidiga FORTRAN -kompilatorer stödde ingen rekursion i subrutiner. Tidiga datorarkitekturer stödde inget begrepp om en stack, och när de direkt stödde subrutinsamtal lagrades returplatsen ofta på en fast plats intill subrutinkoden (t.ex. IBM 1130 ) eller ett specifikt maskinregister ( IBM 360 et seq ), som endast tillåter rekursion om en stapel underhålls av programvara och returadressen lagras på stapeln innan samtalet görs och återställs efter att samtalet återkommer. Även om det inte anges i FORTRAN 77, stödde många F77-kompilatorer rekursion som ett alternativ, och Burroughs-huvudramar , utformade med inbyggd rekursion, gjorde det som standard. Det blev en standard i Fortran 90 via det nya sökordet RECURSIVE.
Enkelt FORTRAN II -program
Detta program, för Herons formel , läser data på en bandrulle som innehåller tre 5-siffriga heltal A, B och C som ingång. Det finns inga "typ" -deklarationer tillgängliga: variabler vars namn börjar med I, J, K, L, M eller N är "fasta punkter" (dvs heltal), annars flytande. Eftersom heltal ska bearbetas i detta exempel börjar namnen på variablerna med bokstaven "I". Namnet på en variabel måste börja med en bokstav och kan fortsätta med både bokstäver och siffror, upp till en gräns på sex tecken i FORTRAN II. Om A, B och C inte kan representera sidorna av en triangel i plangeometri, slutar programmets körning med en felkod på "STOP 1". Annars kommer en utgående linje att skrivas ut som visar inmatningsvärdena för A, B och C, följt av triangelns beräknade område som ett flytande tal som upptar tio mellanslag längs utgångslinjen och visar 2 siffror efter decimalpunkten , .2 i F10.2 i FORMAT -uttalandet med etikett 601.
C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION
C INPUT - TAPE READER UNIT 5, INTEGER INPUT
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING
READ INPUT TAPE 5, 501, IA, IB, IC
501 FORMAT (3I5)
C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO
C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE
C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
IF (IA) 777, 777, 701
701 IF (IB) 777, 777, 702
702 IF (IC) 777, 777, 703
703 IF (IA+IB-IC) 777, 777, 704
704 IF (IA+IC-IB) 777, 777, 705
705 IF (IB+IC-IA) 777, 777, 799
777 STOP 1
C USING HERON'S FORMULA WE CALCULATE THE
C AREA OF THE TRIANGLE
799 S = FLOATF (IA + IB + IC) / 2.0
AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) *
+ (S - FLOATF(IC)))
WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA
601 FORMAT (4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2,
+ 13H SQUARE UNITS)
STOP
END
FORTRAN III

IBM utvecklade också en FORTRAN III 1958 som tillät inline -monteringskod bland andra funktioner; denna version släpptes dock aldrig som en produkt. Precis som 704 FORTRAN och FORTRAN II inkluderade FORTRAN III maskinberoende funktioner som gjorde koden skriven i den oportabel från maskin till maskin. Tidiga versioner av FORTRAN från andra leverantörer hade samma nackdel.
IBM 1401 FORTRAN
FORTRAN levererades till IBM 1401- datorn av en innovativ 63-fasskompilator som körde helt i sitt kärnminne på endast 8000 (sex-bitars) tecken. Kompilatorn kan köras från band eller från en kortlek på 2200 kort; det använde inget ytterligare band eller disklagring. Det behöll programmet i minnet och laddade överlägg som gradvis förvandlade det på plats till körbar form, som beskrivs av Haines. Denna artikel trycktes om, redigerades i båda utgåvorna av Anatomy of a Compiler och i IBM: s manual "Fortran Specifications and Operating Procedures, IBM 1401". Den körbara formen var inte helt maskinspråk ; snarare tolkades flytande punkts aritmetik, sub-scripting, input/output och funktionsreferenser, före UCSD Pascal P-kod med två decennier.
IBM levererade senare en FORTRAN IV -kompilator för 1400 -serien av datorer.
FORTRAN IV
1966.
År 1965 skulle FORTRAN IV vara i överensstämmelse med standarden som utvecklades av American Standards Association X3.4.3 FORTRAN Working Group.
Mellan 1966 och 1968 erbjöd IBM flera FORTRAN IV -kompilatorer för sitt System/360 , var och en namngiven med bokstäver som angav den minsta mängd minne som kompilatorn behövde köras. Bokstäverna (F, G, H) matchade koderna som används med System/360 -modellnummer för att ange minnesstorlek, varje bokstavsökning är en faktor på två större:
- 1966: FORTRAN IV F för DOS/360 (64K byte)
- 1966: FORTRAN IV G för OS/360 (128K byte)
- 1968: FORTRAN IV H för OS/360 (256K byte)
Vid denna tidpunkt hade FORTRAN IV börjat bli ett viktigt utbildningsverktyg och implementeringar som University of Waterloos WATFOR och WATFIV skapades för att förenkla de komplexa sammanställnings- och länkprocesserna för tidigare kompilatorer.
FORTRAN 66
Den kanske viktigaste utvecklingen i FORTRAN: s tidiga historia var beslutet från American Standards Association (nu American National Standards Institute (ANSI)) att bilda en kommitté sponsrad av BEMA, Business Equipment Manufacturers Association, för att utveckla en American Standard Fortran . De resulterande två standarderna, som godkändes i mars 1966, definierade två språk, FORTRAN (baserat på FORTRAN IV, som hade fungerat som en de facto-standard) och Basic FORTRAN (baserat på FORTRAN II, men fråntagna dess maskinberoende funktioner). FORTRAN definierad av den första standarden, officiellt betecknad X3.9-1966, blev känd som FORTRAN 66 (även om många fortsatte att benämna den FORTRAN IV, språket som standarden till stor del var baserad på). FORTRAN 66 blev effektivt den första branschstandardversionen av FORTRAN. FORTRAN 66 ingår:
- Huvudprogrammet
SUBROUTINE
,FUNCTION
ochBLOCK DATA
programenheter -
INTEGER
,REAL
,DOUBLE PRECISION
,COMPLEX
, OchLOGICAL
datatyper -
COMMON
,DIMENSION
, OchEQUIVALENCE
uttalanden -
DATA
uttalande för att ange initialvärden -
Egenskaper och
EXTERNAL
(t.ex. bibliotek) funktioner - Uppdragsbesked
-
GO TO
, beräknatGO TO
, tilldelatGO TO
ochASSIGN
uttalanden - Logiska
IF
och aritmetiska (trevägs)IF
påståenden -
DO
loop -uttalande -
READ
,WRITE
,BACKSPACE
,REWIND
, OchENDFILE
uttryck för sekventiell I / O -
FORMAT
uttalande och tilldelat format -
CALL
,RETURN
,PAUSE
, OchSTOP
uttalanden -
Hollerith konstanter i
DATA
ochFORMAT
uttalanden, och som argument till förfaranden - Identifierare med upp till sex tecken i längd
- Kommentarerader
-
END
linje
FORTRAN 77


Efter lanseringen av FORTRAN 66 -standarden introducerade kompilatorleverantörer flera tillägg till Standard Fortran , vilket fick ANSI -kommittén X3J3 1969 att börja arbeta med att revidera 1966 års standard, under sponsring av CBEMA , Computer Business Equipment Manufacturers Association (tidigare BEMA). Slutliga utkast till denna reviderade standard cirkulerades 1977, vilket ledde till formellt godkännande av den nya FORTRAN-standarden i april 1978. Den nya standarden, kallad FORTRAN 77 och officiellt betecknad X3.9-1978, lade till ett antal viktiga funktioner för att hantera många av de brister i FORTRAN 66:
- Block
IF
ochEND IF
uttalanden, med tillvalELSE
ochELSE IF
klausuler, för att ge förbättrat språkstöd för strukturerad programmering -
DO
loop -tillägg, inklusive parameteruttryck, negativa steg och noll tripptal -
OPEN
,CLOSE
ochINQUIRE
uttalanden för förbättrad I/O -kapacitet - Direktåtkomstfil I/O
-
IMPLICIT
uttalande, att åsidosätta implicita konventioner om att odeklarerade variabler är INTEGER om deras namn börjar med I, J, K, L, M eller N (och RIKTIGT annars) -
CHARACTER
datatyp, ersätter Hollerith-strängar med kraftigt utökade faciliteter för teckeninmatning och -utmatning och bearbetning av teckenbaserad data -
PARAMETER
uttalande för att ange konstanter -
SAVE
uttalande för ihållande lokala variabler - Generiska namn för inneboende funktioner (t.ex.
SQRT
accepterar också argument av andra slag, t.ex.COMPLEX
ellerREAL*16
). - En uppsättning inneboende (
LGE, LGT, LLE, LLT
) för lexikal jämförelse av strängar, baserat på ASCII -samlingssekvensen . (Dessa ASCII -funktioner krävdes av det amerikanska försvarsdepartementet i deras villkorade godkännandeomröstning.)
I denna översyn av standarden har ett antal funktioner tagits bort eller ändrats på ett sätt som kan ogiltigförklara tidigare program som överensstämmer med standard. (Borttagning var det enda tillåtna alternativet till X3J3 vid den tiden, eftersom begreppet " avskrivning " ännu inte var tillgängligt för ANSI-standarder.) Medan de flesta av de 24 posterna i konfliktlistan (se bilaga A2 till X3.9-1978) adresserade kryphål eller patologiska fall som tillåts av den tidigare standarden men sällan används, avlägsnades medvetet ett litet antal specifika funktioner, till exempel:
-
Hollerith -konstanter och Hollerith -data , t.ex.GREET=12HHELLOTHERE!
- Läser in i en H -redigerings (Hollerith -fält) deskriptor i en FORMAT -specifikation
- Överindexering av arraygränser med abonnemang DIMENSIONA(10,5)Y=A(11,1)
- Överföring av kontroll från och tillbaka till intervallet för en DO -slinga (även känd som "Extended Range")
Varianter: Minnesota FORTRAN
Control Data Corporation -datorer hade en annan version av FORTRAN 77, kallad Minnesota FORTRAN (MNF), designad speciellt för studentanvändning, med variationer i utgångskonstruktioner, speciell användning av GEMENSAMMA och DATA -uttalanden, optimeringskodnivåer för sammanställning, detaljerade fellistor, omfattande varning meddelanden och felsökningsfunktioner. MNF utvecklades av människor (Liddiard & Mundstock) vid University of Minnesota . MNF fanns i princip gratis.
Övergång till ANSI Standard Fortran
Utvecklingen av en reviderad standard för att lyckas FORTRAN 77 skulle upprepade gånger försenas eftersom standardiseringsprocessen kämpade för att hänga med i snabba förändringar i dator- och programmeringsmetoder. Under tiden, som "Standard FORTRAN" i nästan femton år, skulle FORTRAN 77 bli den historiskt viktigaste dialekten.
En viktig praktisk utvidgning till FORTRAN 77 var lanseringen av MIL-STD-1753 1978. Denna specifikation, utvecklad av det amerikanska försvarsdepartementet , standardiserade ett antal funktioner som implementerats av de flesta FORTRAN 77-kompilatorer men som inte ingår i standarden ANSI FORTRAN 77 . Dessa funktioner skulle så småningom införlivas i Fortran 90 -standarden.
-
DO WHILE
,EXIT
,CYCLE
, OchEND DO
uttalanden -
INCLUDE
påstående -
IMPLICIT NONE
variant avIMPLICIT
påståendet
Den IEEE 1003,9 POSIX Standard, släpptes 1991, under förutsättning att på ett enkelt sätt för Fortran 77 programmerare att utfärda POSIX systemanrop. Över 100 samtal definierades i dokumentet-vilket möjliggör åtkomst till POSIX-kompatibel processstyrning, signalhantering, filsystemkontroll, enhetskontroll, procedurpekning och strömning av I/O på ett bärbart sätt.
Fortran 90
Den mycket försenade efterträdaren till FORTRAN 77, informellt känd som Fortran 90 (och dessförinnan, Fortran 8X ), släpptes slutligen som ISO/IEC-standard 1539: 1991 1991 och en ANSI-standard 1992. Förutom att ändra den officiella stavning från FORTRAN till Fortran, denna stora översyn lade till många nya funktioner för att återspegla de betydande förändringar i programmeringspraxis som hade utvecklats sedan 1978 -standarden:
- Källinmatning i fri form , även med små Fortran-nyckelord
- Identifierare på upp till 31 tecken (i den tidigare standarden var det bara sex tecken).
- Inline kommentarer
- Möjlighet att arbeta på arrays (eller array -sektioner) som en helhet, vilket förenklar matematiska och tekniska beräkningar.
- hela, partiella och maskerade array -tilldelningsuttalanden och arrayuttryck, t.ex. X(1:N)=R(1:N)*COS(A(1:N))
-
WHERE
uttalande för selektiv array -tilldelning - array-värderade konstanter och uttryck,
- användardefinierade arrayvärderade funktioner och arraykonstruktörer.
- hela, partiella och maskerade array -tilldelningsuttalanden och arrayuttryck, t.ex.
-
RECURSIVE
förfaranden - Moduler , för att gruppera relaterade procedurer och data tillsammans och göra dem tillgängliga för andra programenheter, inklusive möjligheten att begränsa tillgängligheten till endast specifika delar av modulen.
- En kraftigt förbättrad argumentöverföringsmekanism som gör att gränssnitt kan kontrolleras vid kompileringstidpunkten
- Användarskrivna gränssnitt för generiska procedurer
- Överbelastning av operatören
- Härledda (strukturerade) datatyper
- Ny datatypdeklarationssyntax, för att specificera datatypen och andra attribut för variabler
-
Dynamisk minnesallokering med hjälp av
ALLOCATABLE
attributet ochALLOCATE
ochDEALLOCATE
-uttalandena -
POINTER
attribut, pekartilldelning ochNULLIFY
uttalande för att underlätta skapande och manipulation av dynamiska datastrukturer - Strukturerad looping konstruktioner, med en
END DO
redogörelse för loop terminering ochEXIT
ochCYCLE
uttalanden för att avsluta normalaDO
sling iterationer på ett ordnat sätt -
SELECT
. . .CASE
konstruera för flervägsval - Bärbar specifikation av numerisk precision under användarens kontroll
- Nya och förbättrade inneboende förfaranden.
Föråldring och raderingar
Till skillnad från den tidigare revideringen tog Fortran 90 inga funktioner bort. Alla standardkonforma FORTRAN 77-program är också standardöverensstämmande under Fortran 90, och endera standarden bör vara användbar för att definiera dess beteende.
En liten uppsättning funktioner identifierades som "föråldrade" och förväntades tas bort i en framtida standard. Alla funktioner i dessa tidiga versioner utförs av nya Fortran 95 -funktioner. Vissa behålls för att förenkla portning av gamla program men kan så småningom raderas.
Föråldrad funktion | Exempel | Status/öde i Fortran 95 |
---|---|---|
Aritmetiskt IF-uttalande |
|
Utfasad |
Icke-heltal DO-parametrar eller kontrollvariabler |
|
raderade |
Delad avslutning eller avslutning av DO-loop med ett annat uttalande än END DO eller FORTSÄTT |
|
Utfasad |
Grenar till END IF utifrån ett kvarter |
|
raderade |
Alternativ retur |
|
Utfasad |
PAUSE uttalande |
|
raderade |
ASSIGN -uttalande och tilldelat GO TO -uttalande |
|
raderade |
Tilldelade satsnummer och FORMAT -specifikationer |
|
raderade |
H redigera beskrivningar |
|
raderade |
Beräknat GO TO -uttalande |
|
(föråldrad) |
Uttalande funktioner |
|
(föråldrad) |
DATA -uttalanden bland körbara uttalanden |
|
(föråldrad) |
CHARACTER* form av CHARACTER -deklaration |
|
(föråldrad) |
Antagna teckenlängdsfunktioner |
|
(föråldrad) |
Fast formkällkod | Kolumn 1 innehåller C eller * eller! för kommentarer. Kolumnerna 1 till 5 för satsnummer Alla tecken i kolumn 6 för fortsättning. Kolumner 73 och senare ignoreras |
(föråldrad) |
"Hej världen!" exempel
program helloworld
print *, "Hello, World!"
end program helloworld
Fortran 95
Fortran 95 , officiellt publicerat som ISO/IEC 1539-1: 1997, var en mindre översyn, mestadels för att lösa några utestående problem från Fortran 90-standarden. Fortran 95 lade dock också till ett antal tillägg, särskilt från High Performance Fortran -specifikationen:
-
FORALL
och kapsladeWHERE
konstruktioner för att underlätta vektorisering - Användardefinierad
PURE
ochELEMENTAL
procedurer - Standardinitialisering av härledda typkomponenter, inklusive pekarinitialisering
- Utökade möjligheten att använda initialiseringsuttryck för dataobjekt
- Initiering av tips till
NULL()
- Tydligt definierat att
ALLOCATABLE
matriser automatiskt fördelas när de går utanför tillämpningsområdet.
Ett antal inneboende funktioner utökades (till exempel dim
lades ett argument till det maxloc
inneboende).
Flera funktioner som noterades i Fortran 90 som "föråldrade" togs bort från Fortran 95:
-
DO
uttalanden som använderREAL
ochDOUBLE PRECISION
indexvariabler - Grenar till ett
END IF
uttalande utanför sitt block -
PAUSE
påstående -
ASSIGN
och tilldelatGO TO
uttalande och tilldelade formatspecificerare -
H
Hollerith redigera beskrivning.
Ett viktigt komplement till Fortran 95 var den tekniska ISO-rapporten TR-15581: Enhanced Data Type Facilities , informellt känd som Allocatable TR. Denna specifikation definierade förbättrad användning av ALLOCATABLE
matriser innan tillgängligheten av Fortran 2003-kompatibla Fortran-kompilatorer. Sådana användningsområden inkluderar ALLOCATABLE
matriser som härledda typkomponenter, i procedurdummy -argumentlistor och som funktionsreturvärden. ( ALLOCATABLE
matriser är att föredra framför POINTER
baserade matriser eftersom ALLOCATABLE
arranger garanteras av Fortran 95 att distribueras automatiskt när de går utanför räckvidden, vilket eliminerar möjligheten till minnesläckage . Dessutom är delar av tilldelningsbara matriser sammanhängande och alias är inte ett problem för optimering av matrisreferenser, så att kompilatorer kan generera snabbare kod än för pekare.)
Ett annat viktigt komplement till Fortran 95 var ISO: s tekniska rapport TR-15580: Floating-point exception handling , informally known as the IEEE TR. Denna specifikation definierade stöd för IEEE flytande punkts aritmetiska och flytande undantagshantering .
Villkorlig sammanställning och strängar med varierande längd
Förutom det obligatoriska "grundspråket" (definierat i ISO/IEC 1539-1: 1997) innehåller Fortran 95-språket också två valfria moduler:
- Varierande längd teckensträngar (ISO/IEC 1539-2: 2000)
- Villkorlig sammanställning (ISO/IEC 1539-3: 1998)
som tillsammans utgör den flerdelade internationella standarden (ISO/IEC 1539).
Enligt standardutvecklarna beskriver "de valfria delarna fristående funktioner som har efterfrågats av ett stort antal användare och/eller implementatorer, men som inte anses vara tillräckligt generella för att de ska krävas i alla standardkonforma Fortran -kompilatorer. " Men om en Fortran som överensstämmer med standard ger sådana alternativ, måste de "tillhandahållas i enlighet med beskrivningen av dessa anläggningar i lämplig del av standarden".
Fortran 2003
Fortran 2003, officiellt publicerat som ISO/IEC 1539-1: 2004, är en stor översyn som introducerar många nya funktioner. En omfattande sammanfattning av de nya funktionerna i Fortran 2003 finns tillgänglig på Fortran Working Group (ISO/IEC JTC1/SC22/WG5) officiella webbplats.
Från den artikeln inkluderar de största förbättringarna för denna översyn:
- Avledade typförbättringar: parametrerade härledda typer, förbättrad kontroll av tillgänglighet, förbättrade strukturkonstruktörer och slutbehandlare
- Objektorienterat programmeringsstöd : typförlängning och arv , polymorfism , dynamisk typallokering och typbundna procedurer, som ger fullständigt stöd för abstrakta datatyper
- Förbättringar av datamanipulation: tilldelningsbara komponenter (som innehåller TR 15581), uppskjutna typparametrar,
VOLATILE
attribut , uttrycklig typspecifikation i gruppkonstruktörer och tilldela uttalanden, pekarförbättringar, utökade initialiseringsuttryck och förbättrade inneboende procedurer - In-/utmatningsförbättringar: asynkron överföring, strömåtkomst, användarspecificerade överföringsåtgärder för härledda typer, användarspecificerad kontroll av avrundning under formatkonverteringar, namngivna konstanter för i förväg anslutna enheter,
FLUSH
uttalandet, regulering av sökord och åtkomst till felmeddelanden - Procedurpekare
- Stöd för IEEE floating-point arithmetic and floating-point exception handling (med TR 15580)
- Interoperabilitet med programmeringsspråket C
- Stöd för internationell användning: åtkomst till ISO 10646 4-byte-tecken och val av decimal eller komma i numerisk formaterad in/utmatning
- Förbättrad integration med värdoperativsystemet: åtkomst till kommandoradsargument , miljövariabler och processorfelmeddelanden
Ett viktigt komplement till Fortran 2003 var den tekniska ISO-rapporten TR-19767: Enhanced module facilities in Fortran. Denna rapport gav delmoduler, vilket gör Fortran-moduler mer lika Modula-2- moduler. De liknar Ada privata underenheter för barn. Detta gör att specifikationen och implementeringen av en modul kan uttryckas i separata programenheter, vilket förbättrar förpackningen av stora bibliotek, möjliggör bevarande av företagshemligheter samtidigt som de publicerar slutgiltiga gränssnitt och förhindrar sammanställningskaskader.
Fortran 2008
ISO/IEC 1539-1: 2010, informellt känt som Fortran 2008, godkändes i september 2010. Precis som med Fortran 95 är detta en mindre uppgradering som innehåller förtydliganden och korrigeringar till Fortran 2003, samt att införa några nya funktioner. De nya funktionerna inkluderar:
- Delmoduler-ytterligare struktureringsmöjligheter för moduler; ersätter ISO/IEC TR 19767: 2005
- Coarray Fortran - en parallell utförande modell
- Den DO CONCURRENT konstruktion-for loop iterationer utan inbördes beroenden
- Attributet CONTIGUOUS - för att ange begränsningar för lagringslayout
- Den BLOCK konstruktionen -kan innehålla deklarationer av objekt med konstruktion omfattning
- Rekursiva fördelningsbara komponenter - som ett alternativ till rekursiva pekare i härledda typer
Final Draft International Standard (FDIS) är tillgängligt som dokument N1830.
Ett komplement till Fortran 2008 är den internationella organisationen för standardisering (ISO) Technical Specification (TS) 29113 om ytterligare interoperabilitet mellan Fortran och C , som har överlämnats till ISO i maj 2012 för godkännande. Specifikationen lägger till stöd för åtkomst till array -deskriptorn från C och gör det möjligt att ignorera typen och rankningen av argument.
Fortran 2018
Den senaste översynen av språket (Fortran 2018) kallades tidigare Fortran 2015. Det är en betydande översyn och släpptes den 28 november 2018.
Fortran 2018 innehåller två tidigare publicerade tekniska specifikationer:
- ISO/IEC TS 29113: 2012 Ytterligare driftskompatibilitet med C
- ISO/IEC TS 18508: 2015 Ytterligare parallella funktioner i Fortran
Ytterligare ändringar och nya funktioner inkluderar stöd för ISO/IEC/IEEE 60559: 2011 (versionen av IEEE floating-point-standarden före den senaste mindre revisionen IEEE 754-2019), hexadecimala input/output, IMPLICIT NONE-förbättringar och andra ändringar.
En fullständig beskrivning av Fortran -språkfunktioner eftersom Fortran 95 behandlas i den relaterade artikeln, Fortran 95 -språkfunktioner .
Även om en tidskriftsartikel från 1968 från författarna till BASIC redan beskrev FORTRAN som "gammaldags", har program skrivits i Fortran i över sex decennier och det finns en stor mängd Fortran-programvara för daglig användning i hela vetenskapliga och tekniska samhällen. Jay Pasachoff skrev 1984 att "fysik- och astronomistudenter helt enkelt måste lära sig FORTRAN. Så mycket finns i FORTRAN att det verkar osannolikt att forskare kommer att byta till Pascal, Modula-2 eller vad som helst." År 1993 kallade Cecil E. Leith FORTRAN för "vetenskaplig dators modersmål" och tillade att dess ersättning med något annat språk "kan förbli ett förlorat hopp".
Det är det primära språket för några av de mest intensiva superdatoruppgifterna , till exempel inom astronomi , klimatmodellering , beräkningskemi, beräkningsekonomi , beräkningsvätskedynamik , beräkningsfysik , dataanalys, hydrologisk modellering , numerisk linjär algebra och numeriska bibliotek ( LAPACK , IMSL och NAG ), optimering , satellitsimulering, konstruktionsteknik och väderprognoser . Många av floating-point-riktmärkena för att mäta prestanda för nya datorprocessorer, till exempel floating-point-komponenterna i SPEC- riktmärkena (t.ex. CFP2006 , CFP2017 ) är skrivna i Fortran. Matematiska algoritmer är väl dokumenterade i numeriska recept .
lagts till i Fortran 2003 och förbättrats av ISO/IEC tekniska specifikation 29113, som införlivades i Fortran 2018 för att möjliggöra mer flexibel interoperation med andra programmeringsspråk.Programvara för NASA -sonder Voyager 1 och Voyager 2 skrevs ursprungligen i FORTRAN 5 och överfördes senare till FORTRAN 77. Från och med den 25 september 2013 är en del av programvaran fortfarande skriven i Fortran och en del har överförts till C.
Bärbarhet var ett problem i de första dagarna eftersom det inte fanns någon överenskommen standard - inte ens IBM: s referenshandbok - och datorföretag tävlade om att skilja sina erbjudanden från andra genom att tillhandahålla inkompatibla funktioner. Standarder har förbättrat bärbarhet. Standarden 1966 tillhandahålls en referenssyntax och semantik, men leverantörer fortsatte att tillhandahålla inkompatibla förlängningar. Även om noggranna programmerare insåg att användning av inkompatibla tillägg orsakade dyra portabilitetsproblem och därför använde program som The PFORT Verifier, var det inte förrän efter 1977 -standarden när National Bureau of Standards (nu NIST ) publicerade FIPS PUB 69 , att processorer som köptes av den amerikanska regeringen var tvungna att diagnostisera förlängningar av standarden. I stället för att erbjuda två processorer hade i princip varje kompilator så småningom åtminstone ett alternativ för att diagnostisera tillägg.
Inkompatibla tillägg var inte det enda portabilitetsproblemet. För numeriska beräkningar är det viktigt att ta hänsyn till aritmetikens egenskaper. Detta togs upp av Fox et al. i samband med 1966 års standard av PORT -biblioteket . Idéerna däri användes i stor utsträckning och införlivades så småningom i 1990 -standarden genom inneboende förfrågningsfunktioner. Det utbredda (nu nästan universella) antagandet av IEEE 754- standarden för binär flytande aritmetik har i huvudsak tagit bort detta problem.
Åtkomst till datormiljön (t.ex. programmets kommandorad, miljövariabler, textförklaring av felförhållanden) förblev ett problem tills det åtgärdades av 2003 -standarden.
Stora samlingar av biblioteksprogramvara som kan beskrivas som löst relaterade till tekniska och vetenskapliga beräkningar, till exempel grafikbibliotek, har skrivits i C, och därför var tillgång till dem ett portabilitetsproblem. Detta har åtgärdats genom att C -interoperabilitet införlivades i 2003 -standarden.
Det är nu möjligt (och relativt enkelt) att skriva ett helt portabelt program i Fortran, även utan att använda en förbehandlare.
Fram tills Fortran 66 -standarden utvecklades stödde varje kompilator sin egen variant av Fortran. Vissa var mer avvikande från mainstream än andra.
Den första Fortran -kompilatorn satte en hög standard för effektivitet för kompilerad kod. Detta mål gjorde det svårt att skapa en kompilator så det gjordes vanligtvis av datortillverkarna för att stödja hårdvaruförsäljning. Detta lämnade en viktig nisch: kompilatorer som var snabba och gav bra diagnostik för programmeraren (ofta en student). Exempel inkluderar Watfor, Watfiv, PUFFT och i mindre skala FORGO, Wits Fortran och Kingston Fortran 2.
Fortran 5
. Den hade en optimerande kompilator som var ganska bra för minidatorer i sin tid. Språket liknar närmast FORTRAN 66.
FORTRAN V
FORTRAN V distribuerades 1968 av Control Data Corporation för CDC 6600 -serien. Språket baserades på FORTRAN IV.
Univac erbjöd också en kompilator för 1100 -serien som kallas FORTRAN V. En spinoff av Univac Fortran V var Athena FORTRAN.
Fortran 6
Fortran 6 eller Visual Fortran 2001 licensierades till Compaq av Microsoft . De har licensierat Compaq Visual Fortran och har tillhandahållit miljögränssnittet Visual Studio 5 för Compaq v6 upp till v6.1.
Specifika varianter
Leverantörer av högpresterande vetenskapliga datorer ( t.ex. Burroughs , Control Data Corporation (CDC), Cray , Honeywell , IBM , Texas Instruments och UNIVAC ) lade till tillägg till Fortran för att dra nytta av speciella hårdvarufunktioner som instruktionscache , CPU- rörledningar , och vektorarrayer. Till exempel, en av IBM: s FORTRAN kompilatorer ( H Extended IUP ) hade en nivå av optimering som omordnas de maskinkod instruktionerna för att hålla flera interna aritmetiska enheter upptagna samtidigt. Ett annat exempel är CFD , en speciell variant av FORTRAN utformad speciellt för ILLIAC IV superdator, som körs på NASA : s Ames Research Center . IBM Research Labs utvecklade också ett utökat FORTRAN-baserat språk som kallas VECTRAN för bearbetning av vektorer och matriser.
Objektorienterad Fortran var en objektorienterad förlängning av Fortran, där dataobjekt kan grupperas i objekt, som kan instansieras och köras parallellt. Den var tillgänglig för Sun, Iris, iPSC och nCUBE, men stöds inte längre.
Sådana maskinspecifika förlängningar har antingen försvunnit med tiden eller har element införlivats i huvudstandarderna. Det största återstående tillägget är OpenMP , som är ett plattformsoberoende tillägg för programmering av delat minne. En ny tillägg, Coarray Fortran, är avsedd att stödja parallell programmering.
FÖR TRANSIT för IBM 650
FOR TRANSIT var namnet på en reducerad version av IBM 704 FORTRAN -språket, som implementerades för IBM 650, med hjälp av ett översättarprogram som utvecklades på Carnegie i slutet av 1950 -talet. Följande kommentar visas i IBM: s referenshandbok ( FOR TRANSIT Automatic Coding System C28-4038, Copyright 1957, 1959 av IBM):
FORTRAN -systemet var konstruerat för en mer komplex maskin än 650, och därför är några av de 32 påståenden som finns i FORTRAN -programmerarens referenshandbok inte acceptabla för FOR TRANSIT -systemet. Dessutom har vissa begränsningar för FORTRAN -språket lagts till. Ingen av dessa begränsningar gör emellertid ett källprogram skrivet för FOR TRANSIT inkompatibelt med FORTRAN -systemet för 704.
De tillåtna uttalandena var:
- Aritmetiska uppgiftsuttalanden, t.ex.
a = b
GO to n
GO TO (n1, n2, ..., nm), i
IF (a) n1, n2, n3
PAUSE
STOP
DO n i = m1, m2
CONTINUE
END
READ n, list
PUNCH n, list
DIMENSION V, V, V, ...
EQUIVALENCE (a,b,c), (d,c), ...
Upp till tio underrutiner kan användas i ett program.
FOR TRANSIT -uttalanden var endast begränsade till kolumnerna 7 till 56. Hålslagna kort användes för in- och utmatning på IBM 650. Tre passeringar krävdes för att översätta källkoden till "IT" -språket, sedan för att sammanställa IT -uttalandena till SOAP -monteringsspråk och slutligen för att producera objektprogrammet, som sedan kunde laddas in i maskinen för att köra programmet (med hjälp av stansade kort för datainmatning och utmatning av resultat på stansade kort).
Två versioner fanns för 650-talet med en 2000-tals minnestrumma: FOR TRANSIT I (S) och FOR TRANSIT II, den senare för maskiner utrustade med indexeringsregister och automatisk flytande decimal ( bi-quinarisk ) aritmetik. Bilaga A i de manuella inkluderade kopplingsscheman för IBM 533 kortläsaren / stanspanelkontroll .
Fortran-baserade språk
Före FORTRAN 77 användes vanligtvis ett antal förbehandlare för att tillhandahålla ett vänligare språk, med fördelen att den förbehandlade koden kunde kompileras på vilken maskin som helst med en standard FORTRAN -kompilator. Dessa förbehandlare stöder vanligtvis strukturerad programmering , variabelnamn som är längre än sex tecken, ytterligare datatyper, villkorlig sammanställning och till och med makrofunktioner . Populära förbehandlare inkluderade FLECS , iftran , MORTRAN , SFtran , S-Fortran , Ratfor och Ratfiv . Ratfor och Ratfiv, till exempel, implementerade ett C -liknande språk, som gav ut förbehandlad kod i standard FORTRAN 66. Trots framsteg i Fortran -språket används förbehandlare fortfarande för villkorlig sammanställning och makrosubstitution.
En av de tidigaste versionerna av FORTRAN, som introducerades på 60 -talet, användes populärt på högskolor och universitet. Utvecklad med stöd, och distribueras av University of Waterloo , WATFOR baserades till stor del på FORTRAN IV. En student som använder WATFOR kunde skicka in sitt batch -FORTRAN -jobb och, om det inte fanns några syntaxfel, skulle programmet gå direkt till körning. Denna förenkling gjorde det möjligt för eleverna att koncentrera sig på programmets syntax och semantik, eller körningslogikflöde, snarare än att hantera inlämning Job Control Language (JCL), kompilera/länka-redigera/exekvera successiva process (er) eller andra komplexiteter i stordatorn /minidatormiljö. En baksida med denna förenklade miljö var att WATFOR inte var ett bra val för programmerare som behövde utökade förmågor hos sina värdprocessor (er), t.ex. hade WATFOR vanligtvis mycket begränsad tillgång till I/O -enheter. WATFOR efterträddes av WATFIV och dess senare versioner.
program; s=0 i=1,n; s=s+1; stop i; s='s' Stop
(radprogrammering)
LRLTRAN utvecklades vid Lawrence Radiation Laboratory för att ge stöd för vektoraritmetik och dynamisk lagring, bland andra tillägg för att stödja systemprogrammering. Distributionen omfattade LTSS -operativsystemet .
Fortran-95-standarden innehåller en valfri del 3 som definierar en valfri villkorlig sammanställningskapacitet . Denna förmåga kallas ofta "CoCo".
Många Fortran -kompilatorer har integrerat delmängder av C -förbehandlaren i sina system.
SIMSCRIPT är en applikationsspecifik Fortran -förberedare för modellering och simulering av stora diskreta system.
Den programmeringsspråket F var avsedd att vara en ren delmängd av Fortran 95 som försökte att ta bort överflödig, ostrukturerade och föråldrade funktioner i Fortran, såsom EQUIVALENCE
uttalande. F behåller arrayfunktionerna som läggs till i Fortran 90 och tar bort kontrolluttalanden som gjordes föråldrade av strukturerade programmeringskonstruktioner som lagts till både FORTRAN 77 och Fortran 90. F beskrivs av dess skapare som "ett sammanställt, strukturerat, arrayprogrammeringsspråk som är särskilt väl lämpat till utbildning och vetenskaplig beräkning ".
Lahey och Fujitsu samarbetade för att skapa Fortran för Microsoft .NET Framework . Silverfrost FTN95 kan också skapa .NET -kod.
Följande program illustrerar dynamisk minnesallokering och arraybaserade operationer, två funktioner som introducerades med Fortran 90. Särskilt anmärkningsvärt är frånvaron av DO
loopar och IF
/ THEN
satser vid manipulering av arrayen; matematiska operationer tillämpas på matrisen som helhet. Också uppenbart är användningen av beskrivande variabelnamn och allmän kodformatering som överensstämmer med samtida programmeringsstil. Detta exempel beräknar ett genomsnitt över data som matas in interaktivt.
program average
! Read in some numbers and take the average
! As written, if there are no data points, an average of zero is returned
! While this may not be desired behavior, it keeps this example simple
implicit none
real, dimension(:), allocatable :: points
integer :: number_of_points=0
real :: average_points=0., &
positive_average=0., &
negative_average=0.
write (*,*) "Input number of points to average:"
read (*,*) number_of_points
allocate (points(number_of_points))
write (*,*) "Enter the points to average:"
read (*,*) points
! Take the average by summing points and dividing by number_of_points
if (number_of_points > 0) average_points = sum(points) / number_of_points
! Now form average over positive and negative points only
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)
! Print result to terminal
write (*,'(a,g12.4)') 'Average = ', average_points
write (*,'(a,g12.4)') 'Average of positive points = ', positive_average
write (*,'(a,g12.4)') 'Average of negative points = ', negative_average
end program average
Under samma FORTRAN -standardkommittémöte där namnet "FORTRAN 77" valdes, införlivades ett satiriskt tekniskt förslag i den officiella distributionen med titeln "Bokstaven O anses vara skadlig ". Detta förslag påstods ta itu med förvirringen som ibland uppstår mellan bokstaven "O" och siffran noll, genom att eliminera bokstaven från tillåtna variabelnamn. Den föreslagna metoden var dock att helt eliminera bokstaven från teckenuppsättningen (därigenom behålla 48 som antalet lexikala tecken, som kolon hade ökat till 49). Detta ansågs fördelaktigt genom att det skulle främja strukturerad programmering, genom att göra det omöjligt att använda det ökända GO TO
uttalandet som tidigare. (Besvärliga FORMAT
uttalanden skulle också elimineras.) Det noterades att detta "kan ogiltigförklara vissa befintliga program" men att de flesta av dessa "förmodligen var oförenliga i alla fall".
När X3J3 diskuterade huruvida det minsta reseantalet för en DO-slinga skulle vara noll eller ett i Fortran 77, föreslog Loren Meissner ett minsta antal resor på två-resonemang (tunga) att om det var mindre än två så skulle det finnas ingen anledning till en slinga!
När matriser med antagen längd skulle läggas till, rådde det en tvist om lämplig karaktär för att separera övre och nedre gränser. I en kommentar som undersökte dessa argument skrev Dr. Walt Brainerd en artikel med titeln "Astronomy vs. Gastroenterology" eftersom vissa förespråkare hade föreslagit att använda stjärnan eller asterisken ("*"), medan andra gynnade kolon (":").
Variabelnamn som börjar med bokstäverna I – N har en standardtyp av heltal, medan variabler som börjar med alla andra bokstäver är riktiga, även om programmerare kan åsidosätta standardvärdena med en uttrycklig deklaration. Detta ledde till skämtet: "I FORTRAN är GUD VERKLIG (om den inte förklaras INTEGER)."
- f2c
- FÖR MAC
- Lista över Fortran -kompilatorer
- Lista över Fortran numeriska bibliotek
- Lista över programmeringsspråk
- Matrisrepresentation
- Beställning i rad
- Spaghettikod
- Språkstandarder
-
Ansi x3.9-1966. USA Standard FORTRAN (PDF). American National Standards Institute. Arkiverad från originalet(PDF)den 15 maj 2011. Hämtad. Informellt känd som FORTRAN 66.5 maj2010
-
Ansi x3.9-1978. American National Standard - Programmeringsspråk FORTRAN . American National Standards Institute. Arkiverad från originalet den 29 oktober 2013 . Hämtad.Även känd som ISO 1539–1980, informellt känd som FORTRAN 77.11 december2007
- ANSI X3.198-1992 (R1997) / ISO / IEC 1539: 1991. American National Standard - Programmeringsspråk Fortran Extended . American National Standards Institute / ISO / IEC. Arkiverad från originalet den 1 maj 2002. Informellt känd som Fortran 90.
-
ISO/IEC 1539-1: 1997. Informationsteknik - Programmeringsspråk - Fortran - Del 1: Grundspråk (PDF). Arkiverad från originalet(PDF)den 18 augusti 2011. Hämtad.Informellt känt som Fortran 95. Det finns ytterligare två delar till denna standard. Del 1 har formellt antagits av ANSI.13 december2007
-
ISO/IEC 1539-1: 2004. Informationsteknik - Programmeringsspråk - Fortran - Del 1: Grundspråk (PDF). Informellt känd som Fortran 2003.
-
ISO/IEC 1539-1: 2010 (Final Draft International Standard). Informationsteknik - Programmeringsspråk - Fortran - Del 1: Grundspråk (PDF). Informellt känd som Fortran 2008.
- Relaterade standarder
- Kneis, Wilfried (oktober 1981). "Utkast till standard Industrial Real-Time FORTRAN" . ACM SIGPLAN -meddelanden . 16 (7): 45–60. doi : 10.1145/947864.947868 . ISSN 0362-1340 . S2CID 8662381 .
- ISO 8651-1: 1988 Informationsbehandlingssystem-Datorgrafik-Språkbindningar för grafiskt kärnsystem (GKS)-Del 1: FORTRAN . Genève, Schweiz: ISO . 1988.
- Annat referensmaterial
-
ECMA Standard på FORTRAN (PDF). European Computer Manufacturers Association. April 1965. Hämtad.17 november2014
-
FORTRAN 77 4.0 Referenshandbok (PDF). Sun Microsystems, Inc. 1995. Arkiverad från originalet(PDF)den 5 januari 2012. Hämtad.17 november2014
-
"FORTRAN -kodningsformulär" (PDF). IBM . Arkiverad från originalet(PDF)den 8 juni 2015. Hämtad.17 november2014
-
IBM System/360 och System/370 Fortran IV Language (PDF). Internationella affärsmaskiner . Maj 1974. Arkiverad från originalet(PDF)den 6 april 2011. Hämtad.17 november2014
-
Goerz, Michael (2014). "Modern Fortran Reference Card" (PDF). Hämtad.14 december2014
- Böcker
- Adams, Jeanne C .; Brainerd, Walter S .; Hendrickson, Richard A .; Maine, Richard E .; Martin, Jeanne T .; Smith, Brian T. (2009). Fortran 2003 Handbook (1: a upplagan). Springer . ISBN 978-1-84628-378-9.
- Ruetsch, Gregory; Fatica, Massimiliano (2013). CUDA Fortran för forskare och ingenjörer (1: a upplagan). Elsevier . sid. 338. ISBN 9780124169708.
- Akin, Ed: "Objektorienterad programmering via Fortran 90/95", Cambridge Univ Press, ISBN 978-0521524087 , (feb. 2003).
- Brainerd, Walter S., Goldberg, Charles H., Adams, Jeanne C .: "Programmer's guide to Fortran 90" (3rd Ed.), Springer, (1996).
- Brainerd, Walter S .: "Guide to Fortran 2008 Programming" (2nd Ed.), Springer, ISBN 978-1447167587 , (sep. 2015).
- Chapman, Stephen J. (2018). Fortran för forskare och ingenjörer (fjärde upplagan). New York : McGraw-Hill Education . s. xxiv + 1024. ISBN 978-0-07-338589-1.
- Chivers, Ian; Sleightholme, Jane (2018). Introduktion till programmering med Fortran (4: e upplagan). Springer. ISBN 978-3-319-75501-4.
- Clerman, Norman S., Spector, Walter: "Modern Fortran: Style and Usage", Cambridge University Press, ISBN 978-0521514538 , (februari 2012).
- Curcic, Milano: "Modern Fortran: Bygga effektiva parallella applikationer", Manning Publications, ISBN 978-1617295287 (november 2020).
- Ellis, TMR; Phillips, Ivor R .; Lahey, Thomas M. (1994). Fortran 90 Programmering (1: a upplagan). Addison Wesley. ISBN 978-0-201-54446-6.
- Etter, DM (1990). (3: e upplagan). Benjamin/Cummings Publishing Company, Inc. ISBN 978-0-8053-0051-2.
- Kerrigan, JF (1993). Migrerar till Fortran 90 (1: a upplagan). O'Reilly & Associates, Inc. ISBN 1-56592-049-X.
- Kupferschmid, Michael (2002). Klassisk Fortran: Programmering för teknik och vetenskapliga tillämpningar . Marcel Dekker (CRC Press). ISBN 978-0-8247-0802-3.
- Lorenzo, Mark Jones (2019). Abstrahera bort maskinen: Historien om FORTRAN -programmeringsspråket (FORmula TRANslation) . Oberoende publicerad. ISBN 978-1082395949.
-
Loukides, Mike (1990). Unix för FORTRAN -programmerare . Sebastopol, CA 95472: O'Reilly & Associates, Inc. ISBN 0-937175-51-X.CS1 maint: plats ( länk )
- McCracken, Daniel D. (1961). . New York: Wiley. LCCN 61016618 .
- Metcalf, Michael; Reid, John; Cohen, Malcolm: "Modern Fortran Explained: Incorporating Fortran 2018" (5th Ed.), Oxford Univ. Press, ISBN 978-0198811886 , (nov. 2018).
- Nyhoff, Larry; Sanford Leestma (1995). FORTRAN 77 för ingenjörer och forskare med en introduktion till Fortran 90 (4: e upplagan). Prentice Hall . ISBN 978-0-13-363003-9.
-
Page, Clive G. (1988). Professionell programmerarhandbok för Fortran77 (7 juni 2005 red.). London: Pitman. ISBN 978-0-273-02856-7. Hämtad.4 maj2010
- Press, William H. (1996). Numeriska recept i Fortran 90: The Art of Parallel Scientific Computing . Cambridge, Storbritannien: Cambridge University Press. ISBN 978-0-521-57439-6.
-
Sleighthome, Jane; Chivers, Ian David (1990). Interactive Fortran 77: A Hands-On Approach . Datorer och deras applikationer (andra upplagan). Chichester: E. Horwood. ISBN 978-0-13-466764-5. Arkiverad från originalet den 12 mars 2014 . Hämtad.12 mars2014
- Artiklar
- Allen, FE (september 1981). "A History of Language Processor Technology in IBM". IBM Journal of Research and Development . 25 (5): 535–548. doi : 10.1147/rd.255.0535 . S2CID 14149353 .
-
JW Backus ; RJ Beeber; S. Bästa; R. Goldberg; LM Haibt ; HL Herrick; RA Nelson; D. Sayre ; PB Sheridan; H. Stern; L. Ziller; RA Hughes; R. Nutt (februari 1957). FORTRAN automatiska kodningssystem (PDF). Western Joint Computer Conference. s. 188–198. doi : 10.1145/1455567.1455599 .
- Chivers, Ian D .; Sleightholme, Jane (2013). "Kompilatorstöd för Fortran 2003 & 2008 -standarder" . ACM SIGPLAN Fortran Forum . 28 (1): 26–28. doi : 10.1145/1520752.1520755 . ISSN 1061-7264 . S2CID 26200779 . Arkiverad från originalet den 16 maj 2008.
- Metcalf, Michael (2011). "Fortran sju åldrar" . Journal of Computer Science & Technology . 11 (1): 1–8.
-
Pigott, Diarmuid (2006). "FORTRAN-Backus et al kompilator på hög nivå (datorspråk)" . Encyclopedia of Computer Language . Murdoch University . Arkiverad från originalet den 8 oktober 2009 . Hämtad.5 maj2010
-
Roberts, Mark L .; Griffiths, Peter D. (1985). "Designhänsyn för IBM Personal Computer Professional FORTRAN, en optimerande kompilator" (PDF). IBM Systems Journal . 24 (1): 49–60. doi : 10.1147/sj.241.0049 .
- ISO/IEC JTC1/SC22/WG5 - det officiella hemmet för Fortran -standarder
- Fortran Standards Documents —GFortran standarder
- fortran-lang.org (2020).
- FORTRAN och Fortran II: historia - Computer History Museum
- Valmer Norrod, et al .: En självstudiekurs i FORTRAN-programmering — Volym I — lärobok , Computer Science Corporation El Segundo, Kalifornien (april 1970). NASA (N70-25287).
- Valmer Norrod, Sheldom Blecher och Martha Horton: En självstudiekurs i FORTRAN-programmering — Volume II — arbetsbok , NASA CR-1478 (april 1970), NASA (N70-25288).