Budite znatiželjni i naučite: moderni Fortran u malom

Napredak u znanosti i inženjerstvu i dalje se mnogim važnim mjerama oslanja na Fortran više nego na bilo koji drugi jezik. Iznenađeni? Ne biste trebali biti, iako mnogi ljudi koji se nazivaju programerima zapravo nikada nisu naučili Fortran. Naučit ću vas Fortran za pet minuta ili manje. Neće škoditi, a vi ćete znati koji je možda najvažniji i najutjecajniji programski jezik ikad.

Računalni se znanstvenici mogu ponašati kao da Fortran ne postoji, ali popularna kultura ( The Simpsons , sezona 26, epizoda 10) prošla je bolje s mudrim zapažanjem: „Fortran, najveći od programskih jezika!“ Zapravo, više od polovice izračunavanja koje rade najsnažnija računala na svijetu dolazi iz Fortrana. U nekim velikim sustavima Fortran kod može biti odgovoran za 80-100% izračuna.

Također je nevjerojatno lako naučiti, kao što ćete vidjeti s ovim kratkim uvodom u Fortran programiranje. Pretpostavljam da već znate programirati na nešto drugo osim u Fortranu (ako ste potpuno novi u programiranju, toplo preporučujem učenje Fortrana s “A Fortran Coloring Book”).

 Započnimo

 program zdravo

    print *, "Zdravo, Svijete!"

kraj programa zdravo

Upišite (za datoteku koristite ekstenziju .f95 ili .f90), prevedite, pokrenite i ispisat će „Hello, World!“. Znak "*" u ispisu u osnovi znači automatski format .

Moj drugi primjer radi malo matematike i završava s izjavama 'if / then / else':

program mymath

  implicitno nijedno

  real :: odgovor, x, y, zbroj, prod, cubedx, cubedy

  print *, 'Upišite dva broja (x i y)'

  pročitajte *, x                                          

  pročitajte *, y                                          

  zbroj = x + y  

  prod = x * y                                       

  kubedx = x ** 3;

  kockast = y ** 3;

  ispis *, 'Zbroj x + y je', zbroj

  print *, 'Proizvod x * y je', prod

  ispis *, 'Kockani x i y', cubedx, kockasti

  ispis *, 'sinus x i y', sin (x), sin (y)

  ako (x> y) tada

    print *, 'Primijetio sam da je x veći od y'

  drugo

    print *, 'Čini se da y nije manji od x'

  završi ako

kraj programa mymath  

Možda ćete primijetiti da sam ubacio "implicitno ništa". To je normalno u modernom Fortranu - govori prevoditelju da zahtijeva eksplicitno deklariranje varijabli, tako da se nepoznate varijable označavaju kao pogreške. Bez toga Fortran pretpostavlja da su varijable koje počinju s 'i' do 'n' (prva dva slova cijelih brojeva) cjelobrojne, a druge brojevi s pomičnom zarezom ('stvarni'). To je smanjilo koliko smo karata morali izbušiti prije nekoliko desetljeća, ali u današnje vrijeme to se općenito mrzi.

 Pokretanje ovog programa (i upisivanje u 3.14 i 1.57) daje sljedeće:

Upišite dva broja (x i y)

3.14

1,57

 Zbroj x + y je 4.71000004   

 Umnožak x * y je 4,92980051   

 Kockani x i y 30.9591484 3.86989355   

 sinus x i y 1.59254798E-03 0.999999702

 Primijetio sam da je x veći od y   

Fortran je dizajniran za matematiku (FORmula TRANSlation), imajte na umu da je ugrađen "sin (...)" bez potrebe za uključivanjem zaglavlja ili paketa. Naravno, Fortran podržava brojeve s pomičnim zarezom i cijele brojeve, ali podržava i složene brojeve. Nisu potrebni aditivi.

Moj treći primjer uključuje petlje (u Fortranu nazvane "do"):

 programska petlja

  implicitno nijedno    

  cijeli broj :: i, j, keep (100,2), w

  w = 0

  je li = 10, 50, 5

    učiniti j = i, 20, 5

       ispis *, i, j

       w = w + 1

       keep (w, 1) = i

       zadržati (w, 2) = j

    kraj učiniti

  kraj učiniti

  je li = 1, w

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

  kraj učiniti

završna petlja programa

Redak za ispis u mom primjeru programa izvršava se samo ako j do-loop radi. Petlja j se uopće ne izvodi kada premašim 20. Ovaj primjer također uvodi nizove pomoću niza pod nazivom 'keep'. Fortran započinje s brojevima s nizom '1' umjesto nule, što je na isti način na koji Amerikanci broje katove zgrada (kat # 2 odnosi se na prizemlje za koje se pretpostavlja da je '1'). Druga mjesta na svijetu za svoje zgrade koriste numeriranje na temelju nule ("prvi kat" Amerikanci nazivaju "drugim katom") kao što to čine C i C ++ za nizove. Izlaz iz tog primjera 'programske petlje' prikazan je u nastavku:

           10 10

          10 15

          10 20

          15 15

          15 20

          20 20

 zadrži: 10 10

 zadrži: 10 15

 zadrži: 10 20

 zadrži: 15 15

 zadrži: 15 20

 zadrži: 20 20

 U svom posljednjem primjeru definirat ću potprogram (funkciju) zvanu 'ave' kako bih uzeo prosjek od tri broja koja sam statički definirao. Primijetit ćete da sam se ulijenio i nakon programa i funkcije napisao "kraj". To je u redu, ali ako upotrebljavate imena, kao što sam ja radio ranije, kompajler će vam pomoći provjeriti odgovara li kraj onome za što ste željeli da se podudara.

Program callret

  implicitno nijedno

  stvarni a, b, c

  pravi av, avsq1, avsq2

  pravi ave

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

  av = ave (a, b, c)

  print *, 'Prosjek', a, b, c, 'je:', AV

kraj

stvarna funkcija ave (x, y, z)

  stvarni x, y, z, zbroj

  zbroj = x + y + z

  ave = zbroj / 3,0

  povratak

kraj

 Ovo ispisuje:

 Prosjek od 500000000 2.00000000 3.00000000 je: 3.33333325 

 Da, Fortran može formatirati izlaz. Ako gornji "print" zamijenimo na sljedeći način:

  ispis 8, 'Prosjek', a, b, c, 'je', AV

Format 8 (a, 2 (f4.2, ','), f4.2, a, f7.5)

Izlaz će postati:

Prosjek 5,00, 2,00, 3,00 je 3,33333

Formatiranje Fortrana također se može izvesti u jednom retku i imati jednake lijepe rezultate:

ispis "(a, 2 (f4.2, ','), f4.2, a, f7.5)", 'Prosjek', a, b, c, 'je', AV

Ako su vas naveli da vjerujete da je Fortran čudan, zavarali ste. Sve ove primjere napisao sam u onome što programeri Fortrana nazivaju 'slobodnim oblikom'. To je službeno postalo dijelom Fortrana sa standardom 'Fortran 90' (stoga moje upute za upotrebu .f90 ili .f95 kao nastavka datoteke; one poručuju prevoditelju, bez posebnih prekidača opcija, da koristimo besplatni oblik). Imajte na umu, 1956. godine korisnici su željeli nešto prilagođeno za udaranje kartama. Mogao bih satima nastaviti kako to Fortran prilagođava formatima orijentiranim na stupce i znakovima za nastavak itd. Ali, kao što sam pokazao, to stvarno ne morate naučiti da biste napisali ili pročitali Fortran kod.

Pa zašto se Fortrana izbjegavaju informatičari? Super pitanje. Fortran je najstariji jezik (oko 1956). Počelo je u eri kaseta, bušenih karata i zamjene ljudskih računala. Prethodi blok strukturiranom programiranju, teoriji raščlanjivanja i grafikama. Usput su računalni znanstvenici istraživali napredak u računarstvu, uvodeći tisuće programskih jezika, od kojih se većina nije uspjela uhvatiti. Unatoč tome, u svakom je polju ljudskog pothvata moderno "vani sa starim, s novim". Računarstvo se ne razlikuje. 

Ali kad je razbijanje brojeva važno, ništa nije bolje ni lakše od Fortrana. Predlažem da svi znamo puno alata i da koristimo najbolji alat za posao. Samo zato što je moj pouzdani čekić već dugo u mojoj kutiji alata ne znači da mi nije potreban za pravi posao. Fortran nije ništa drugačiji.

Fortran nije samo izvorni programski jezik visoke razine, on je živ, važan i široko korišten. Tko je pokrenuo glasine da sugerira suprotno?

 Resursi

  • Intel Fortran - intenzivno se koristi za x86 (Intel / AMD), visokih performansi
    • Možete se kvalificirati za besplatni prevoditelj (i druge alate)
    • Dostupne su probne kopije s mogućnošću kasnije kupnje
    •  Beta 2018. traje do srpnja 2018.: isprobajte ovu najnoviju i najveću potpuno funkcionalnu beta verziju, uključujući Fortran i srodne alate, do tada besplatno: Intel Parallel Studio XE 2018 Beta - Pridružite se sada
  • GNU Fortran - šira podrška (mnogi procesori, mnogi sustavi), niže performanse
    • otvorenog koda i besplatno
    • na svom MacBook Airu ... Morao sam samo reći „brew install gcc“ i gfortran dobivam besplatno

Kliknite ovdje da biste preuzeli besplatno 30-dnevno probno razdoblje za Intel Parallel Studio XE