Fortran-ohjelmointikieli: historia, ominaisuudet ja tieteellinen laskenta
Tutustu Fortranin historiaan, keskeisiin ominaisuuksiin ja sen rooliin tieteellisessä laskennassa — perinteestä nykyaikaan, suorituskykyä ja rinnakkaislaskentaa.
Fortran on ohjelmointikieli, joka luotiin ensimmäisen kerran 1950-luvulla ja jota käytetään edelleen laajasti tieteellisessä laskennassa. Se on alkujaan proseduraalinen kieli, mutta sitä on laajennettu tukemaan myös modulaarista ja olio-ohjelmointia. Fortranin vahvuuksia ovat tehokas numeerinen laskenta, laaja valikoima matemaattisia intrinsisiä funktioita ja kokoelmatoiminnot (array operations), jotka tekevät siitä suositun valinnan simulointien, numeeristen mallien ja tieteellisten kirjastojen toteuttamiseen. Fortrania käytetään erityisesti ilmastomalleissa, hydrodynamiikassa, rakenteiden mekaniikassa, laskennallisessa kemiassa ja muissa laskentaintensiivisissä sovelluksissa.
Historia ja varhaiskehitys
Ensimmäisen FORTRAN-kääntäjän loi vuosina 1954-57 IBM:n John W. Backusin johtama ryhmä. Tämä kääntäjä oli historian ensimmäisiä kääntäjiä korkean tason kielelle. Ryhmän suurena huolena oli suorituskyky: he pelkäsivät, että ohjelmoijat pitäisivät assembler-kieltä ainoana käytännöllisenä vaihtoehtona, ellei kääntäjä tuottaisi lähes yhtä nopeaa konekoodia. Tästä syystä FORTRAN-kääntäjä suunniteltiin optimoivaksi ja suorituskykyä silmälläpitäväksi.
Koska numerotieteitä tekevät tutkijat ja insinöörit omaksuivat kielen nopeasti, Fortranin kehitys suuntautui erityisesti sellaisiin muotoihin ja ominaisuuksiin, jotka mahdollistivat tehokkaan koodin tuottamisen. Tämä johti runsaaseen tutkimukseen ja kehitykseen kääntäjien teorian ja optimointitekniikoiden parissa: Fortranin ympäristöstä syntyi paljon teoriaa ja käytäntöjä korkean suorituskyvyn kääntäjien ja optimointien rakentamiseen.
Standardit ja versiot
Fortranista on ilmestynyt useita versioita: tunnettuja vaiheita ovat mm. FORTRAN IV (samaan aikaan FORTRAN 66 -nimellä tunnettu), FORTRAN 77 ja Fortran 90, jotka toivat kieleen jatkuvasti uusia konsepteja ja parempaa luettavuutta. Kielen viimeisin laajempi standardointivaihe 1990-luvulla johti Fortran 95 -standardin julkaisuun vuonna 1997, mutta kehitys ei pysähtynyt siihen: myöhemmät standardit (Fortran 2003, Fortran 2008 ja Fortran 2018) lisäsivät mm. olio-ohjelmoinnin piirteitä, C-kieliyhteensopivuuden ja rinnakkaisrakenteita (coarrays).
Kielen keskeiset ominaisuudet
- Taulukkolaskenta ja koko-avaruusoperaatiot: Fortran tukee vektori- ja matriisilaskentaa luonnostaan: koko-taulukkotoiminnot, viipaleet (slicing) ja rinnakkaiset operaatioelementit mahdollistavat ilmaisuvoimaisen ja usein tehokkaan numeerisen koodin.
- Modulit ja tyyppijärjestelmä: Moderni Fortran sisältää module-rakenteet, derived type-tyypit, tyyppien laajentamisen ja polymorfismin, mikä mahdollistaa paremman abstraktion ja tietoturvallisuuden kuin vanhemmat COMMON-rakenteet.
- Muoto- ja vapaa lähdekoodiformaatti: Alkuperäinen Fortran vaati tarkkaa sarakemuotoilua (fixed-format), mutta Fortran 90 toi vapaan formaatin (free-format) ja selkeämmän syntaksin.
- Intrinsiset funktiot ja kirjastot: Laaja määrä matemaattisia ja numeerisia intrinsisiä funktioita sekä helppo yhteensopivuus suorituskykyisten kirjastojen (esim. BLAS, LAPACK) kanssa.
- Tyyppimäärittely ja tarkkuus: Kielet tukevat kind-mekanismeja ja standardimoduuleja (esim. ISO_FORTRAN_ENV), jotka auttavat hallitsemaan liukulukujen tarkkuutta ja alustariippumattomuutta.
- Olio-ominaisuudet: Fortran 2003 toi olio-ohjelmoinnin peruselementit (tyyppien kapselointi, periytyminen ja dynaaminen sidonta).
- C-yhteensopivuus: Fortran 2003 esitteli ISO_C_BINDING-moduulin, joka mahdollistaa suoran rajapinnan C-koodiin ja helpottaa kirjastojen uudelleenkäyttöä.
- I/O ja nimeämiskäytännöt: Fortran tarjoaa monipuoliset formaatit sekä nimilistät (namelist) ja binääri-/muotoilematon I/O:n tieteellisiin tiedostorakenteisiin.
Rinnakkaisuus ja suorituskyky
Fortran on suunniteltu numeeriseen tehokkuuteen, ja modernit kääntäjät pystyvät tuottamaan erittäin optimoitua koodia. Yleisesti käytettyjä suorituskykyyn vaikuttavia tekniikoita ovat:
- Optimointi kääntäjätasolla: käännosaikaiset optimoinnit, vektorointi ja loop-optimoinnit.
- Rinnakkaistaminen: OpenMP- ja MPI-tuki ovat yleisiä käytäntöjä, ja modernit Fortran-standardit tukevat myös coarray-ominaisuutta sekä
do concurrent-rakennetta rinnakkaislaskentaan. - Matematiikkakirjastot: BLAS- ja LAPACK-kirjastot, Intel Math Kernel Library (MKL) ja muut optimoidut kirjastot parantavat suorituskykyä suureissa laskentatehtävissä.
Yhteisö, kääntäjät ja työkalut
Nykyään on saatavilla useita kaupallisia ja avoimen lähdekoodin Fortran-kääntäjiä: yleisesti käytettyjä ovat mm. GNU Fortran (gfortran), Intel Fortran (ifort), NAG Fortran ja muut teollisuuden sekä tutkimuksen käyttämät kääntäjät. Useat kehitysympäristöt ja build-työkalut tukevat Fortrania, ja suuret laskentakoodit hyödyntävät versionhallintaa, testijärjestelmiä ja CI-putkia samoin kuin muutkin modernit ohjelmistoprojektit.
Käyttökohteet ja esimerkkialat
Fortranin vahvuudet tulevat esiin erityisesti seuraavissa sovellusalueissa:
- Ilmastomallit ja meteorologia
- Laskennallinen fluididynamiikka (CFD)
- Rakenteiden mekaniikka ja FEM-sovellukset
- Numeerinen lineaarialgebra ja matemaattiset kirjastot
- Biomatematiikka ja laskennallinen kemia
Hyvät käytännöt ja migraatio nykyaikaan
Vanhoissa Fortran-projekteissa esiintyy usein käytäntöjä, joita kannattaa välttää uusissa töissä. Suosittuja neuvoja ovat:
- Käytä implicit none virheiden välttämiseksi.
- Vältä COMMON-lohkoja ja goto-rakenteita; hyödynnä moduuleja ja selkeitä rajapintoja.
- Ilmoita tarkkuudet kind-määrittelyillä ja käytä standardin ISO-moduuleja alustariippuvuuksien hallintaan.
- Hyödynnä olemassa olevia optimoituja kirjastoja (BLAS, LAPACK, FFT) suorituskyvyn parantamiseksi.
- Testaa, profiloi ja käytä moderneja kääntäjiä; pienet syntaksimuutokset voivat helpottaa rinnakkaistamista ja optimointia.
Lopuksi
Aluksi kieli perustui lähdekoodin tarkkaan muotoiluun ja lausekkeiden numeroiden ja "siirry" -lausekkeiden (Fortranissa goto) runsaaseen käyttöön. Jokaisessa versiossa on kuitenkin otettu käyttöön entistä nykyaikaisempia ohjelmointikäsitteitä: lähdekoodin kommentit ja tekstin tulostaminen, IF-THEN-ELSE (FORTRAN 77:ssä), rekursio (Fortran 90:ssä) sekä myöhemmissä standardeissa olio-ominaisuudet, C-yhteensopivuus ja rinnakkaiskonstruktiot. Samalla pyritään säilyttämään Fortranin laiha profiili ja korkea suorituskyky, minkä vuoksi kieli on edelleen monien numeristen sovellusten valinta.
Nimen merkitys ja kirjoitusasu
Nimi "Fortran" on lyhenne sanoista "Formula Translation". Kieli tunnettiin aiemmin nimellä FORTRAN (ja sen vanhemmat variantit tunnetaan edelleen). Fortran 90:stä lähtien suuraakkosista on luovuttu. Julkaistuissa virallisissa standardeissa käytetään nimitystä "Fortran".
Standardit
Jäljempänä olevat kaksi standardia koskevat nykyisiä Fortran-toteutuksia.
- ANSI X3.198-1992 (R1997). Nimi: Laajennettu: Ohjelmointikieli "Fortran". Tunnetaan epävirallisesti nimellä Fortran 90. Tämän standardin julkaisi ANSI, eikä siitä koskaan tullut kansainvälistä standardia (ISO).
- ISO/IEC 1539-1:1997. Nimike: Osa 1: Peruskieli. Tunnetaan epävirallisesti nimellä Fortran 95. Tähän standardiin kuuluu vielä 2 muuta osaa. ANSI on virallisesti hyväksynyt osan 1.
Etsiä