Programmering

Vær nysgjerrig og lær: moderne Fortran i et nøtteskall

Fremskritt innen vitenskap og ingeniørarbeid stoler fortsatt på Fortran mer enn noe annet språk med mange viktige tiltak. Overrasket? Du burde ikke være det, selv om mange mennesker som kaller seg programmerere, aldri har lært Fortran. Jeg lærer deg Fortran om fem minutter eller mindre. Det vil ikke skade, og du vet hva som muligens er det viktigste og mest innflytelsesrike programmeringsspråket noensinne.

Dataforskere kan oppføre seg som Fortran ikke eksisterer, men populærkultur (Simpsons, Sesong 26, episode 10) gjorde det bedre med den kloke observasjonen: “Fortran, den største av programmeringsspråkene!” Faktisk kommer mer enn halvparten av beregningen som gjøres av de kraftigste datamaskinene i verden fra Fortran. I noen store systemer kan Fortran-koden være ansvarlig for 80-100% av beregningen.

Det er også utrolig enkelt å lære, som du vil se med denne korte introduksjonen til Fortran-programmering. Jeg antar at du allerede vet hvordan du skal programmere i noe annet enn Fortran (hvis du er helt ny innen programmering, anbefaler jeg sterkt å lære Fortran med "A Fortran Coloring Book").

 La oss komme i gang

 programmet hei

trykk *, "Hei, verden!"

avslutte programmet hei

Skriv inn (bruk .f95- eller .f90-utvidelsen for filen din), kompilér, kjør denne, og den skriver ut "Hello, World!". "*" I utskriftsuttalelsen betyr egentlig format automatisk.

Mitt andre eksempel gjør noe matematikk og avsluttes med ‘if / then / else’ uttalelser:

program mymath

implisitt ingen

ekte :: svar, x, y, sum, prod, cubedx, cubedy

skriv ut *, 'Skriv inn to tall (x og y)'

les *, x

klar

sum = x + y

prod = x * y

cubedx = x ** 3;

kubikk = y ** 3;

skriv ut *, 'Summen x + y er', sum

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

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

skriv ut *, 'sinus av x og y', sin (x), sin (y)

hvis (x> y) da

print *, 'Jeg la merke til at x er større enn y'

ellers

skriv ut *, 'Det ser ut til at y ikke er mindre enn x'

slutt om

avslutte programmet mymath

Du vil kanskje legge merke til at jeg gled inn "implisitt ingen." Det er normalt i moderne Fortran - det forteller kompilatoren å kreve at variabler eksplisitt erklæres slik at ukjente variabler blir markert som feil. Uten den antar Fortran variabler som begynner med ‘i’ til og med ‘n’ (de to første bokstavene av heltall) er heltall, og andre er flytende tall (‘ekte’). Det reduserte hvor mange kort vi måtte slå for flere tiår siden, men er generelt mislikt i disse moderne tider.

Å kjøre dette programmet (og skrive inn 3.14 og 1.57) gir følgende:

Skriv inn to tall (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 av x og y 1.59254798E-03 0.999999702

Jeg la merke til at x er større enn y

Fortran er designet for matematikk (FORmula TRANslation), merk at “sin (…)” er innebygd uten behov for å inkludere noen overskrift eller pakke. Fortran støtter selvfølgelig flytende og heltall, men støtter også komplekse tall. Ingen tilsetningsstoffer er nødvendige.

Mitt tredje eksempel inkluderer løkker (kalt "gjør" i Fortran):

programsløyfe

implisitt ingen

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

w = 0

gjør jeg = 10, 50, 5

gjør j = i, 20, 5

trykk *, i, j

w = w + 1

holde (w, 1) = i

beholder (w, 2) = j

slutt gjør

slutt gjør

gjør jeg = 1, w

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

slutt gjør

avslutte programsløyfen

Utskriftslinjen i eksempelprogrammet mitt kjøres bare hvis j do-loop kjører. J-løkken går ikke i det hele tatt når jeg overstiger 20. Dette eksemplet introduserer også matriser med bruk av en matrise som heter "keep". Fortran begynner array-nummerering ved "1" i stedet for null, som er på samme måte som amerikanere nummererer bygningsetasjer (etasje nr. 2 refererer til første etasje som antas å være '1'). Andre steder i verden bruker nullbasert nummerering for sine bygninger ("første etasje" er det amerikanerne kaller "andre etasje") som C og C ++ gjør for arrays. Resultatet fra det "programsløyfe" -eksemplet er vist nedenfor:

           10          10

          10          15

          10          20

          15          15

          15          20

          20          20

holde: 10 10

holde: 10 15

holde: 10 20

holde: 15 15

holde: 15 20

holde: 20 20

I mitt siste eksempel vil jeg definere en subrutine (funksjon) kalt ‘ave’ for å ta gjennomsnittet av tre tall som jeg statisk definerer. Du vil legge merke til at jeg ble lat og bare skrev 'slutt' etter programmet og funksjonen. Det er greit, men hvis du bruker navn, som jeg gjorde tidligere, vil kompilatoren være med på å sjekke at slutten samsvarer med det du ønsket at den skulle matche.

Program callret

implisitt ingen

ekte a, b, c

real av, avsq1, avsq2

ekte ave

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

av = ave (a, b, c)

utskrift *, 'Gjennomsnittet av', a, b, c, 'er:', AV

slutt

reell funksjon ave (x, y, z)

ekte x, y, z, sum

sum = x + y + z

ave = sum / 3.0

komme tilbake

slutt

Dette skriver ut:

Gjennomsnittet av 5.00000000 2.00000000 3.00000000 er: 3.33333325

Ja, Fortran kan formatere utdata. Hvis vi erstatter "utskriften" ovenfor som følger:

utskrift 8, 'Gjennomsnittet av', a, b, c, 'er', AV

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

Resultatet blir:

Gjennomsnittet på 5,00, 2,00, 3,00 er 3,33333

Fortran-formatering kan også gjøres på en enkelt linje og har samme vakre utdata:

skriv ut "(a, 2 (f4.2, ','), f4.2, a, f7.5)", 'Gjennomsnittet av', a, b, c, 'er', AV

Hvis du er blitt ført til å tro at Fortran er rar, ble du villedet. Jeg skrev alle disse eksemplene i det Fortran-programmererne kaller 'fri form'. Det ble offisielt en del av Fortran med "Fortran 90" -standarden (derav mine instruksjoner om å bruke .f90 eller .f95 som filtypen. Disse forteller kompilatoren, uten spesielle alternativbrytere, at vi bruker gratis skjema). Husk at i 1956 ønsket brukerne noe rettet mot kortslag. Jeg kunne fortsette i flere timer om hvordan Fortran imøtekommer det med kolonneorienterte formater og fortsettelsestegn osv. Men som jeg har vist, trenger du virkelig ikke lære det å skrive eller lese Fortran-kode.

Så hvorfor blir Fortran unngått av informatikere? Flott spørsmål. Fortran er det eldste språket (ca. 1956). Det startet i en tid med bånd, hullkort og erstatning av menneskelige datamaskiner. Det går forut for blokkstrukturert programmering, parsingsteori og grafikk. Underveis utforsket informatikere fremskritt innen databehandling mens de introduserte tusenvis av programmeringsspråk, hvorav de fleste ikke klarte å fange opp. Ikke desto mindre er innen alle områder av menneskelig innsats "ute med det gamle, inn med det nye" fasjonabelt. Informatikk er ikke annerledes.

Men når tallknusing er viktig, er ingenting bedre eller enklere enn Fortran. Jeg foreslår at vi alle skal kunne mange verktøy, og bruke det beste verktøyet for jobben. Bare fordi min pålitelige hammer har vært i verktøykassen min lenge, betyr det ikke at jeg ikke trenger den for riktig jobb. Fortran er ikke annerledes.

Fortran er ikke bare det originale programmeringsspråket på høyt nivå, det er levende, viktig og mye brukt. Hvem startet ryktene for å antyde noe annet?

 Ressurser

  • Intel Fortran - mye brukt til x86 (Intel / AMD), høy ytelse
    • Du kan kvalifisere deg for en gratis kompilator (og andre verktøy)
    • Prøvekopier tilgjengelig med mulighet til å kjøpe senere
    • Beta fra 2018 løper til juli 2018: prøv denne nyeste og største fullt funksjonelle betaen, inkludert Fortran og relaterte verktøy, til da gratis: Intel Parallel Studio XE 2018 Beta - Bli med nå
  • GNU Fortran - bredere støtte (mange prosessorer, mange systemer), lavere ytelse
    • åpen kildekode og gratis
    • på MacBook Air ... Jeg måtte bare si "bryg installer gcc" og jeg får gfortran gratis

Klikk her for å laste ned en gratis 30-dagers prøveversjon av Intel Parallel Studio XE

$config[zx-auto] not found$config[zx-overlay] not found