Fortran

ohjelmointikieli

FORTRAN (engl. FORmula TRANslator) oli ensimmäinen todellinen korkean tason ohjelmointikieli. Iästään huolimatta sitä käytetään edelleen runsaasti erityisesti raskasta tieteellistä laskentaa vaativissa tehtävissä. Rakenteeltaan se on tyypillinen proseduraalinen ohjelmointikieli.

Fortran
Paradigma proseduraalinen
Tyypitys vahva, staattinen
Muistinhallinta dynaaminen
Julkaistu 1957[1][2]
Kehittäjä John W. Backus
Vakaa versio ISO/IEC 1539-1:2018[3]
Murteet F77, F90, F95, HPF
Verkkosivu fortran-lang.org
Uutisryhmä comp.lang.fortran

Historia

muokkaa
 
Reikäkortille toteutettua Fortran-koodia 1960-70-luvulta.

Kielen kehitti John Backus ja ensimmäinen versio ilmestyi 1957.[2] Backus johti kymmenen hengen ryhmää korkeamman tason kielen kehityksessä.[2] Fortranin kehitys alkoi työryhmän kanssa vuonna 1954 ja sen ennakoitiin valmistuvan vuodessa, mutta ilmenevät uudet ongelmat venyttivät valmistumista vuoteen 1957.[4]

Fortran on vanhimpia ohjelmointikieliä, jota käytetään ja kehitetään edelleen. Kielen uusin standardi on Fortran 2018 (ISO/IEC JTC 1/SC 22/WG 5 2018).[5]

Ensimmäisenä kaikista ohjelmointikielistä Fortranille luotiin standardi vuonna 1966. Nykyään FORTRANista on käytössä useita versioita, joista tärkeimmät ovat Fortran 77, Fortran 90, Fortran 95, Fortran 2000, Fortran 2003 ja Fortran 2008. Niin sanottu FORTRAN IV eli Fortran 66 on jo jäänyt pois yleisestä käytöstä. Lisäksi on olemassa erityisesti rinnakkaislaskentaan tarkoitettu High Performance Fortran (HPF). Fortranin aiemmat standardit eivät tue oliopohjaista ohjelmointia, mutta Fortran 2003 -standardissa tuki olioiden kaltaisiin rakenteisiin on olemassa. On jokseenkin vakiintunut tapa kirjoittaa Fortran 77:ää ja sitä edeltäviä versioita tarkoitettaessa kielen nimeksi FORTRAN ja uudempia versioita tarkoitettaessa Fortran.

Fortranit sopivat erityisesti raskaaseen numeeriseen laskentaan ja kieleen liittyy useita juuri numeeriseen laskentaan liittyviä ominaisuuksia kuten taulukoiden ja matriisien käsittelyä. Suuri joukko erilaisia funktioita on Fortran-ohjelmissa käytettävissä ilman erillisten kirjastojen lataamista. Fortran on standardinsa ansiosta koodin siirrettävyyden kannalta eräs parhaita ohjelmointikieliä ja suoraviivaisen ja loogisen rakenteensa vuoksi kieli on helppo oppia nopeasti.

FORTRANin ja ohjelmointikielten kääntäjien kehitys ovat olleet kiinteässä vuorovaikutuksessa toisiinsa. Jo ensimmäisessä FORTRAN-kääntäjässä kiinnitettiin erityistä huomiota tuotetun konekielen nopeuteen, koska sen suunnittelijat arvelivat, ettei kukaan käyttäisi ohjelmointikieltä, joka ei olisi tehokkuudeltaan verrattavissa assemblyyn. Nykyiset F90/95-kääntäjät ovat yleensä yhtä nopeita tai nopeampia kuin F77-kääntäjät. Fortran-kääntäjät ovat alaspäin yhteensopivia, joten F90-kääntäjällä on mahdollista kääntää myös F77-ohjelmia. F90/95-koodiin on myös mahdollista sisällyttää F77-kielisiä osia sellaisenaan, joskin F90-standardi määritti muutamat F77:n piirteet vanhentuneiksi, eivätkä ne toimi enää F95-ohjelmissa.

Kielelle on kehitetty lukuisia kääntäjiä, joista osa on kaupallisia ja osa on saatavilla avoimena lähdekoodina. Joidenkin tuki on jo päättynyt.[6]

FORTRAN 77

muokkaa

Huomattava osa edelleen käytössä olevista tieteellisen laskennan ohjelmista on toteutettu F77:lla.

Esimerkkiohjelma FORTRAN-77 -kielellä

muokkaa
 C LUVUNARVAUSPELI
       LUKU=42
       LKM=0
 10    PRINT*, 'ANNA LUKU 1...100'
       READ*, IARVAUS
       LKM=LKM 1
       IF(IARVAUS.LT.LUKU) THEN
          PRINT*, 'LIIAN PIENI ARVAUS'
          GOTO 10
       ELSE IF(IARVAUS.GT.LUKU) THEN
          PRINT *, 'LIIAN SUURI ARVAUS'
          GOTO 10
       END IF
       PRINT*, 'OIKEIN'
       PRINT*, 'TARVITSIT ',LKM,' ARVAUSTA'
       STOP
       END

Eo. esimerkissä FORTRAN-77 -koodille tyypillisesti:

  • Käytetään isoja kirjaimia.
  • Erillistä tyyppimäärittelyä kokonais- ja reaalilukujen välillä ei tarvita, vaan muuttujan alkukirjain määrää tyypin.
  • Varsinaiset lauseet alkavat 7. sarakkeesta.
  • Rivien pituus rajoitettu n. 80 merkkiin (periytyy reikäkorttiajalta).
  • Käytetään ensimmäisiin sarakkeisiin asetettuja rivinumeroita hyppykohtien osoittamiseen.
  • Kommentti- eli huomautusrivit ilmaistaan ensimmäiseen sarakkeeseen sijoitetulla C-kirjaimella.

F77 ei myöskään tue pinoa (engl. stack) vaan funktioilla on omat muistialueensa argumenteille ja datalle.[7] Tämä tarkoittaa että F77 ei tue rekursiota, vaan erikseen kieltää aliohjelmaa viittaamasta itseensä suorasti tai epäsuorasti.[8] Täten Fortran 77 -ohjelma voidaan kääntää staattisesti ja muisti varata käännösaikana.[9]

Fortran 90/95

muokkaa

Fortran 90- ja 95-standardit poikkeavat toisistaan vain vähän ja suurimmat erot liittyvät F95:n parempaan tukeen rinnakkaislaskennalle. F90/95 eroaa ulkonaisesti jonkin verran F77:sta ja siinä pyritään välttämään eräitä F77:n ohjelman toimivuuden kannalta vaarallisia piirteitä. Samalla F90/95 sisältää monia ominaisuuksia, jotka puuttuvat kokonaan F77:sta. F95:n pohjalta on kehitetty myös datarinnakkainen versio High Performance Fortran (HPF).

Esimerkkiohjelma Fortran 90 -kielellä

muokkaa
 !Luvunarvauspeli
 PROGRAM luvunarvauspeli
  IMPLICIT NONE
  INTEGER :: luku, lkm, iarvaus
  LOGICAL :: virh
  luku = 42; lkm = 0; virh = .true.
  DO WHILE(virh)
    CALL arvaus
    CALL vertailu
  END DO
  WRITE(*,*) 'Oikein'
  WRITE(*,*) 'Tarvitsit ', lkm, ' arvausta'
  CONTAINS
  SUBROUTINE arvaus
      WRITE(*,*) 'Anna luku 1...100'
      READ(*,*) iarvaus
      lkm = lkm   1
  END SUBROUTINE arvaus
  SUBROUTINE vertailu
      IF(iarvaus < luku)THEN
        WRITE(*,*) 'Liian pieni arvaus'
      ELSE
      IF(iarvaus > luku)THEN
        WRITE(*,*) 'Liian suuri arvaus'
      ELSE
        virh = .false.
      END IF
    END IF
  END SUBROUTINE vertailu
 END PROGRAM luvunarvauspeli

Tässä esimerkissä Fortran 90 -koodille tyypillisesti:

  • Ohjelma alkaa ja päättyy PROGRAM- ja END PROGRAM -lauseisiin. Kommenttimerkkinä toimii huutomerkki (!).
  • Komento IMPLICIT NONE poistaa käytöstä F77:n käyttämän muuttujan alkukirjaimeen perustuvan automaattisen tyyppimäärittelyn, joten muuttujat on määriteltävä ennen käyttöä.
  • Ohjelmointikielen käskyt on tässä kirjoitettu isolla. Kieli ei kuitenkaan tee eroa isoille ja pienille kirjaimille, joten tämä on makuasia. F77:n sarakesidonnaisuutta ei enää ole. Varattuja sanoja ei ole, joten periaatteessa on mahdollista määritellä vaikkapa muuttuja nimeltä 'real'. Tällöin funktio REAL() ei kuitenkaan ole enää käytettävissä.
  • Eri tehtävät on jaettu omille aliohjelmilleen (SUBROUTINE), mikä tekee koodista helposti uusiin tarkoituksiin muutettavaa. Aliohjelmat ja funktiot tulevat pääohjelmaa seuraavan CONTAINS-lauseen jälkeen. Myös ulkoisten aliohjelmien ja moduuleihin sijoitettujen aliohjelmien käyttö on mahdollista.
  • F77-esimerkin vaikeasti optimoitava GOTO-rakenne on muutettu tehokkaammaksi DO WHILE -silmukaksi. GOTO-rakenne olisi kuitenkin periaatteessa sallittu myös tässä.

Toteutukset

muokkaa
  • AMD Optimizing C/C Compiler (AOCC)
  • PDP-11 FORTRAN IV
  • PDP-11 FORTRAN-IV-Plus
  • Fortran 77
  • Fortran H (vastaa Fortran IV)
  • Oracle Fortran
  • PGFORTRAN
  • PathScale Compiler Suite
  • Absoft Pro Fortran
  • G95
  • VS/9 Fortran IV
  • GNU Fortran
  • Intel Fortran Compiler Classic (ifort)
  • Intel Fortran Compiler (beta) (ifx)
  • Open64
  • Classic Flang
  • LLVM Flang
  • FTN95
  • NAG Fortran Compiler
  • Tandem Fortran
  • VS Fortran
  • XL Fortran
  • sxf90 / sxmpif90
  • MCP
  • Open Watcom
  • Symbolics Fortran
  • Cray

Lähteet

muokkaa
  1. Efremov, Rodion: Fortran – spesifikaatio cs.helsinki.fi. 31.03.2011. Viitattu 7.7.2016.
  2. a b c FORTRAN Encyclopaedia Britannica. Viitattu 8.6.2019. (englanniksi)
  3. Information technology — Programming languages — Fortran — Part 1: Base language ISO. Viitattu 6.2.2020. (englanniksi)
  4. John Backus IBM. Viitattu 3.9.2019. (englanniksi)
  5. Toward Modern Fortran Tooling and a Thriving Developer Community (PDF) arxiv.org. elokuu 2020. Viitattu 11.9.2023. (englanniksi)
  6. Fortran Compilers fortran-lang.org. Viitattu 11.9.2023. (englanniksi)
  7. Understanding the Stack cs.umd.edu. Arkistoitu 17.12.2017. Viitattu 29.9.2017. (englanniksi)
  8. ANSI X3J3/90.4, 15.2 Referencing a Function [1]
  9. <[email protected]>

Aiheesta muualla

muokkaa
 
Käännös suomeksi
Tämä artikkeli tai sen osa on käännetty tai siihen on haettu tietoja muunkielisen Wikipedian artikkelista.
Alkuperäinen artikkeli: en:List_of_compilers#Fortran_compilers