Programmering

Vær nysgerrig og lær: Moderne Fortran i en nøddeskal

Fremskridt inden for videnskab og teknik er stadig afhængig af Fortran mere end noget andet sprog ved mange vigtige foranstaltninger. Overrasket? Det burde du ikke være, selvom mange mennesker, der kalder sig programmører, aldrig har lært Fortran. Jeg lærer dig Fortran om fem minutter eller mindre. Det vil ikke skade, og du ved, hvad der muligvis er det vigtigste og mest indflydelsesrige programmeringssprog nogensinde.

Computerforskere kan opføre sig som Fortran ikke eksisterer, men populærkultur (The Simpsons, Sæson 26, afsnit 10) klarede sig bedre med den kloge observation: “Fortran, den største af programmeringssprogene!” Faktisk kommer mere end halvdelen af ​​beregningen udført af de mest magtfulde computere i verden fra Fortran. I nogle store systemer kan Fortran-kode være ansvarlig for 80-100% af beregningen.

Det er også utroligt let at lære, som du vil se med denne korte introduktion til Fortran programmering. Jeg antager, at du allerede ved, hvordan man programmerer i noget andet end Fortran (hvis du er helt ny inden for programmering, kan jeg varmt anbefale at lære Fortran med "A Fortran Coloring Book").

 Lad os komme igang

 program hej

print *, "Hej verden!"

afslut program hej

Indtast (brug .f95- eller .f90-udvidelsen til din fil), kompilér, kør denne, og den udskriver “Hej, Verden!”. "*" I udskriftserklæringen betyder i det væsentlige format automatisk.

Mit andet eksempel laver matematik og slutter med 'if / then / else' udsagn:

programmer mymath

implicit ingen

ægte :: svar, x, y, sum, prod, cubedx, cubedy

udskriv *, 'Indtast to tal (x og y)'

læs *, x

læs *, y

sum = x + y

prod = x * y

cubedx = x ** 3;

cubedy = y ** 3;

print *, 'Summen x + y er', sum

print *, 'Produktet x * y er', prod

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

print *, 'sinus af x og y', sin (x), sin (y)

hvis (x> y) så

print *, 'Jeg bemærkede, at x er større end y'

andet

print *, 'Det ser ud til, at y ikke er mindre end x'

Afslut Hvis

afslut program mymath

Du bemærker muligvis, at jeg gled ind i "implicit none." Det er normalt i moderne Fortran - det fortæller kompilatoren at kræve, at variabler eksplicit erklæres, så ukendte variabler markeres som fejl. Uden det antager Fortran variabler, der starter med 'i' til 'n' (de første to bogstaver af heltal) er heltal, og andre er flydende tal ('rigtige'). Det reducerede, hvor mange kort vi måtte slå for årtier siden, men er generelt forkert i disse moderne tider.

At køre dette program (og skrive 3.14 og 1.57) giver følgende:

Indtast to tal (x og y)

3.14

1.57

Summen x + y er 4.71000004

Produktet x * y er 4.92980051

Cubed x og y 30.9591484 3.86989355

sinus af x og y 1.59254798E-03 0.999999702

Jeg bemærkede, at x er større end y

Fortran er designet til matematik (FORmula TRANslation), bemærk at “sin (…)” er indbygget uden behov for at inkludere overskrift eller pakke. Selvfølgelig understøtter Fortran flydende og heltal, men understøtter også komplekse tal. Ingen additiver nødvendige.

Mit tredje eksempel involverer sløjfer (kaldet "gør" i Fortran):

programsløjfe

implicit ingen

heltal :: i, j, keep (100,2), w

w = 0

gør jeg = 10, 50, 5

gør j = i, 20, 5

print *, i, j

w = w + 1

hold (w, 1) = i

hold (w, 2) = j

slutningen gør

slutningen gør

gør jeg = 1, w

print *, 'keep:', keep (i, 1), keep (i, 2)

slutningen gør

afslut programsløjfe

Printlinjen i mit eksempelprogram udføres kun, hvis j do-loop kører. J-sløjfen kører slet ikke, når jeg overstiger 20. Dette eksempel introducerer også arrays med brug af en matrix med navnet 'keep'. Fortran starter array-nummerering ved '1' i stedet for nul, hvilket er på samme måde som amerikanere nummererer etager. (etage nr. 2 henviser til stueetagen, der antages at være '1'). Andre steder i verden bruger nulbaseret nummerering til deres bygninger ("første sal" er, hvad amerikanere kalder "anden sal") som C og C ++ gør for arrays. Outputtet fra det 'program loop' eksempel er vist nedenfor:

           10          10

          10          15

          10          20

          15          15

          15          20

          20          20

opbevar: 10 10

hold: 10 15

hold: 10 20

hold: 15 15

hold: 15 20

hold: 20 20

I mit sidste eksempel vil jeg definere en subrutine (funktion) kaldet 'ave' for at tage gennemsnittet af tre tal, som jeg statisk definerer. Du vil bemærke, at jeg blev doven og bare skrev 'slut' efter programmet og funktionen. Det er okay, men hvis du bruger navne, som jeg gjorde tidligere, hjælper compileren med at kontrollere, at slutningen matcher det, du ønskede, at den skulle matche.

Program callret

implicit ingen

ægte a, b, c

ægte av, avsq1, avsq2

rigtig ave

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

av = ave (a, b, c)

print *, 'Gennemsnittet af', a, b, c, 'er:', AV

ende

reel funktion ave (x, y, z)

ægte x, y, z, sum

sum = x + y + z

ave = sum / 3.0

Vend tilbage

ende

Dette udskriver:

Gennemsnittet af 5.00000000 2.00000000 3.00000000 er: 3.33333325

Ja, Fortran kan formatere output. Hvis vi udskifter "udskriften" ovenfor som følger:

udskriv 8, 'Gennemsnittet af', a, b, c, 'er', AV

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

Outputtet bliver:

Gennemsnittet på 5,00, 2,00, 3,00 er 3,333333

Fortran-formatering kan også udføres på en enkelt linje og har den samme smukke output:

print "(a, 2 (f4.2, ','), f4.2, a, f7.5)", 'Gennemsnittet af', a, b, c, 'er', AV

Hvis du er blevet ført til at tro, at Fortran er underlig, blev du vildledt. Jeg skrev alle disse eksempler i det, som Fortran-programmører kalder 'fri form'. Det blev officielt en del af Fortran med 'Fortran 90' standarden (deraf mine instruktioner om at bruge .f90 eller .f95 som filtypenavne; disse fortæller kompileren uden speciel option skifter, at vi bruger fri form). Husk, i 1956 ville brugerne have noget rettet mod kortstans. Jeg kunne fortsætte i timevis om, hvordan Fortran imødekommer det med kolonneorienterede formater og fortsættelsestegn osv. Men som jeg har vist, behøver du virkelig ikke lære det at skrive eller læse Fortran-kode.

Så hvorfor undgås Fortran af dataloger? Fantastisk spørgsmål. Fortran er det ældste sprog (ca. 1956). Det startede i en æra med bånd, hulkort og udskiftning af menneskelige computere. Det går forud for blokeret struktureret programmering, parsingsteori og grafik. Undervejs udforskede computerforskere fremskridt inden for computing, mens de introducerede tusindvis af programmeringssprog, hvoraf de fleste ikke fik fat i. Ikke desto mindre er inden for alle områder af menneskelig indsats "ude med det gamle, ind med det nye" moderigtigt. Datalogi er ikke anderledes.

Men når taleknusing er vigtig, er intet bedre eller lettere end Fortran. Jeg foreslår, at vi alle skal kende mange værktøjer og bruge det bedste værktøj til jobbet. Bare fordi min troværdige hammer har været i min værktøjskasse i lang tid, betyder det ikke, at jeg ikke har brug for den til det rigtige job. Fortran er ikke anderledes.

Fortran er ikke kun det originale programmeringssprog på højt niveau, det er levende, vigtigt og meget udbredt. Hvem startede rygterne om at antyde andet?

 Ressourcer

  • Intel Fortran - stærkt brugt til x86 (Intel / AMD), høj ydeevne
    • Du kan kvalificere dig til en gratis kompilator (og andre værktøjer)
    • Prøvekopier fås med mulighed for at købe senere
    • 2018 beta kører indtil juli 2018: prøv denne nyeste og største fuldt funktionelle beta, inklusive Fortran og relaterede værktøjer, indtil da gratis: Intel Parallel Studio XE 2018 Beta - Deltag nu
  • GNU Fortran - bredere support (mange processorer, mange systemer), lavere ydelse
    • open source og gratis
    • på min MacBook Air ... Jeg måtte kun sige "bryg install gcc", og jeg får gfortran gratis

Klik her for at downloade din gratis 30-dages prøveversion af Intel Parallel Studio XE