Var nyfiken och lär dig: Modern Fortran i ett nötskal

Framstegen inom vetenskap och teknik litar fortfarande på Fortran mer än något annat språk med många viktiga åtgärder. Överraskad? Du borde inte vara det, även om många som kallar sig programmerare aldrig har lärt sig Fortran. Jag lär dig Fortran på fem minuter eller mindre. Det kommer inte att skada, och du vet vad som är det viktigaste och mest inflytelserika programmeringsspråket någonsin.

Datavetare kan uppträda som Fortran inte existerar, men populärkulturen ( The Simpsons , säsong 26, avsnitt 10) gjorde det bättre med den kloka observationen: ”Fortran, den största av programmeringsspråken!” Faktum är att mer än hälften av beräkningen gjort av de mest kraftfulla datorerna i världen kommer från Fortran. I vissa stora system kan Fortran-kod vara ansvarig för 80-100% av beräkningen.

Det är också otroligt enkelt att lära sig, som du kommer att se med denna korta introduktion till Fortran-programmering. Jag antar att du redan vet hur man programmerar i något annat än Fortran (om du är helt ny inom programmering rekommenderar jag starkt att du lär dig Fortran med "A Fortran Coloring Book").

 Låt oss börja

 program hej

    tryck *, "Hello, World!"

avsluta programmet hej

Skriv in (använd filändelsen .f95 eller .f90 för din fil), kompilera, kör den här och den skriver ut "Hello, World!". ”*” I utskriftsuttalandet betyder i princip format automatiskt .

Mitt andra exempel gör lite matematik och slutar med 'if / then / else' uttalanden:

programmera mymath

  implicit ingen

  real :: answer, x, y, sum, prod, cubedx, cubedy

  skriv *, 'Skriv in två siffror (x och y)'

  läs *, x                                          

  läs *, y                                          

  summa = x + y  

  prod = x * y                                       

  cubedx = x ** 3;

  kubik = y ** 3;

  skriv ut *, 'Summan x + y är', summa

  tryck *, 'Produkten x * y är', prod

  tryck *, 'Cubed x and y', cubedx, cubedy

  skriva ut *, 'sinus av x och y', sin (x), sin (y)

  om (x> y) då

    tryck *, 'Jag märkte att x är större än y'

  annan

    skriv ut *, 'Det verkar som att y inte är mindre än x'

  avsluta om

avsluta programmet mymath  

Du kanske märker att jag gled in "implicit none." Det är normalt i modern Fortran - det säger att kompilatorn måste kräva att variabler uttryckligen deklareras så att okända variabler flaggas som fel. Utan det antar Fortran att variabler som börjar med 'i' till 'n' (de två första bokstäverna i heltal) är heltal och andra är flytande siffror ('riktiga'). Det minskade hur många kort vi var tvungna att slå för årtionden sedan, men är generellt missade i denna moderna tid.

 Att köra detta program (och skriva in 3.14 och 1.57) ger följande:

Skriv in två siffror (x och y)

3.14

1,57

 Summan x + y är 4,71000004   

 Produkten x * y är 4.92980051   

 Cubed x och y 30.9591484 3.86989355   

 sinus av x och y 1.59254798E-03 0.999999702

 Jag märkte att x är större än y   

Fortran är designad för matematik (FORmula TRANslation), notera att ”sin (…)” är inbyggd utan att behöva inkludera någon rubrik eller paket. Naturligtvis stöder Fortran flytande och heltal, men stöder också komplexa nummer. Inga tillsatser behövs.

Mitt tredje exempel handlar om slingor (kallas "gör" i Fortran):

 programslinga

  implicit ingen    

  heltal :: i, j, behåll (100,2), w

  w = 0

  gör jag = 10, 50, 5

    gör j = i, 20, 5

       tryck *, i, j

       w = w + 1

       behåll (w, 1) = i

       behåll (w, 2) = j

    slut gör

  slut gör

  gör jag = 1, w

    skriv ut *, 'keep:', keep (i, 1), keep (i, 2)

  slut gör

avsluta programslingan

Utskriftsraden i mitt exempelprogram körs bara om j do-loop körs. J-slingan körs inte alls när jag överstiger 20. Detta exempel introducerar också matriser med användning av en matris med namnet 'keep'. Fortran börjar matrisnummerering vid '1' istället för noll, vilket är samma sätt som amerikaner numrerar byggnadsgolv (våning nr 2 avser bottenvåningen som antas vara '1'). Andra platser i världen använder nollbaserad numrering för sina byggnader ("första våningen" är vad amerikaner kallar "andra våningen") som C och C ++ gör för arrays. Resultatet från det "programslingan" exemplet visas nedan:

           10 10

          10 15

          10 20

          15 15

          15 20

          20 20

 behåll: 10 10

 behåll: 10 15

 behåll: 10 20

 behåll: 15 15

 behåll: 15 20

 behåll: 20 20

 I mitt sista exempel definierar jag en underrutin (funktion) som heter 'ave' för att ta genomsnittet av tre nummer som jag statiskt definierar. Du kommer att märka att jag blev lat och bara skrev "avsluta" efter programmet och funktionen. Det är okej, men om du använder namn, som jag gjorde tidigare, hjälper kompilatorn att kontrollera att slutet matchar det du ville att det skulle matcha.

Program callret

  implicit ingen

  riktig a, b, c

  real av, avsq1, avsq2

  riktig ave

  data a, b, c / 5.0,2.0,3.0 /

  av = ave (a, b, c)

  print *, 'Genomsnittet av', a, b, c, 'är:', AV

slutet

real function ave (x, y, z)

  riktig x, y, z, summa

  summa = x + y + z

  ave = summa / 3,0

  lämna tillbaka

slutet

 Detta skriver ut:

 Medelvärdet av 5,00000000 2.00000000 3,0000000000 är: 3,333333325 

 Ja, Fortran kan formatera utdata. Om vi ​​byter ut "utskriften" enligt följande:

  tryck 8, 'Genomsnittet av', a, b, c, 'är', AV

8-format (a, 2 (f4.2, ','), f4.2, a, f7.5)

Resultatet blir:

Genomsnittet 5,00, 2,00, 3,00 är 3,33333

Fortran-formatering kan också göras på en enda rad och har samma vackra utdata:

skriv ut "(a, 2 (f4.2, ','), f4.2, a, f7.5)", 'Genomsnittet av', a, b, c, 'är', AV

Om du har förts att tro att Fortran är konstig, blev du vilseledd. Jag skrev alla dessa exempel i vad Fortran-programmerare kallar "fri form." Det blev officiellt en del av Fortran med "Fortran 90" -standarden (därmed mina instruktioner om att använda .f90 eller .f95 som filtillägg; dessa säger till kompilatorn, utan specialomkopplare, att vi använder gratisform) Tänk på att användare 1956 ville ha något som är anpassat för kortstans. Jag kunde fortsätta i timmar om hur Fortran rymmer det med kolumnorienterade format och fortsättningstecken etc. Men som jag har visat behöver du verkligen inte lära dig att skriva eller läsa Fortran-kod.

Så varför undviks Fortran av datavetare? Stor fråga. Fortran är det äldsta språket (ca 1956). Det började i en era av band, stansade kort och ersättning av mänskliga datorer. Det föregår blockerad strukturerad programmering, tolkningsteori och grafik. Längs vägen utforskade datavetare framstegen inom databehandling medan de introducerade tusentals programmeringsspråk, varav de flesta inte lyckades fånga. Inte desto mindre är inom alla områden av mänsklig strävan "ut med det gamla, in med det nya" modernt. Datavetenskap är inte annorlunda. 

Men när det är viktigt med siffror är ingenting bättre eller enklare än Fortran. Jag föreslår att vi alla ska känna till många verktyg och använda det bästa verktyget för jobbet. Bara för att min pålitliga hammare har varit i min verktygslåda länge betyder inte att jag inte behöver den för rätt jobb. Fortran är inte annorlunda.

Fortran är inte bara det ursprungliga programmeringsspråket på hög nivå, det lever, viktigt och används ofta. Vem startade rykten för att föreslå något annat?

 Resurser

  • Intel Fortran - används starkt för x86 (Intel / AMD), hög prestanda
    • Du kan kvalificera dig för en gratis kompilator (och andra verktyg)
    • Testkopior finns tillgängliga med möjlighet att köpa senare
    •  Beta 2018 kör fram till juli 2018: prova den senaste och bästa fullt fungerande beta, inklusive Fortran och relaterade verktyg, tills dess gratis: Intel Parallel Studio XE 2018 Beta - Gå med nu
  • GNU Fortran - bredare stöd (många processorer, många system), lägre prestanda
    • öppen källkod och gratis
    • på min MacBook Air ... Jag var bara tvungen att säga "brew install gcc" och jag får gfortran gratis

Klicka här för att ladda ner din kostnadsfria 30-dagars testversion av Intel Parallel Studio XE