Hullkort med Fortrankode, fra København universitet i begynnelsen av 1970-tallet  Foto: Hans Andersen 
**Fortran**, tidligere kalt **FORTRAN** (**FOR**mula **TRAN**slation), blir ofte ansett som det første programmeringsspråket, siden det i prinsippet (og senere også i praksis) var portabelt. Fortran var uavhengig av datamaskinens maskinspråk, og kunne benyttes av ulike datamaskinarkitekturer.

Historie
--------

På 1950-tallet var utviklingen av kompilatorer en svært vanskelig oppgave. En gruppe ledet av John Backus brukte 18 år på å utvikle Fortran.

Høsten 1953 foreslo Backus overfor sin ledelse i IBM å utvikle et praktisk alternativ til assemblerspråk for å programmere den nye stormaskinen IBM 704. Første utkast til spesifikasjon *The IBM Mathematical Formula Translating System* (*IBMs matematisk formeloversettelsessystem)* forelå sommeren 1954. Den første kompilatoren ble lansert april 1957. Behovet for instrukser for å operere en datamaskin ble redusert med faktor 20, og språket ble raskt akseptert.

Erfaringene med utviklingen av Fortran bidro til en kontekstfri grammatikk som ble banebrytende for senere høynivåspråk i form av Backus–Naur-formen. En lignende grammatikk ble foreslått i 1956. Mangelen på formaliserte definisjoner av syntaks, skapte problemer da tidligere utviklere av Fortran forlot IBM. Da Backus utviklet Algol-58, adopterte han syntaks-regler for Fortran og senere programmeringsspråk, som var basert på Pāṇinis sanskrit-grammatikk.

Fortran ble svært populært og ble snart brukt til en rekke formål. Fortrankompilatorer ble utviklet for mange ulike typer datamaskiner. Siden Fortrankompilatorene som ble utviklet ikke var fullstendig kompatible med hverandre kunne man ikke lenger flytte et program fra en maskin til en annen uten å omarbeide det først. Dette førte til en rekke Fortran-dialekter. Med tiden opprettet den amerikanske organisasjonen for standarder (ANSI) en komité for å standardisere Fortran for å sikre portabiliteten til et Fortranprogram, altså slik at man skulle kunne bruke en hvilken som helst datamaskin og kompilator uten å måtte omarbeide koden først. Denne komiteen skulle etter planen ha utarbeidet en ferdig standard i 1966 men ble først ferdig noen år senere. Standarden ble allikevel kjent som FORTRAN 66. FORTRAN 66 blir også kalt FORTRAN IV. Merk at de første versjonene av Fortran ble skrevet med store bokstaver, dette gjelder ikke lenger. Senere revisjoner og standarder er FORTRAN 77, Fortran 90, Fortran 95 (kun en liten revisjon av Fortran 90), Fortran 2003 og Fortran 2008.

Fortran var og er fortsatt veldig populært i det vitenskapelige miljøet og blant ingeniører innen meteorologi, styrkeberegning, styresystemer i tungindustri, kraftverk, og romfart, men i mindre grad i administrative system. Fortran var det dominerende programmeringsspråket i flere tiår etter at det ble utviklet og er fortsatt et av de vanligste programmeringsspråkene i bruk. I den senere tid har Fortran fått støtte for objektorientering og «hand-shaking» med C/C++.

Fortran i dag
-------------

Selv om Fortran 90 og senere versjoner har tilført mange egenskaper som en kan vente seg av et moderne programmeringsspråk, blir fortsatt Fortran regnet for å være et gammeldags språk. En grunn til dette kan være at det meste av koden som er i bruk i dag er kodet i FORTRAN 77, før språket ble modernisert. Historisk sett hadde man heller ikke så kraftige maskiner som nå, slik at det var viktigere at programmene var raske enn at de var lette å forstå for en menneskelig leser av koden. Svært lite ny proprietær programvare blir laget i Fortran, men i forskningsmiljøet er fortsatt Fortran en favoritt på grunn av det store fokuset på hastighet.

Kodeeksempler i Fortran
-----------------------

### Hello, World!

Et enkelt og vanlig eksempel på kodesnutter i programmeringsspråk er å skrive ut beskjeden «Hello, World!» til skjermen. Denne kodesnutten kan bli kjørt på enhver Fortran 90/95-kompilator.

```
 write(\*,\*)"Hello, World!"
 end

```

### Volumet av en sylinder

Dette programmet regner ut volumet til en sylinder og kan bli kompilert og kjørt med enhver Fortran 90/95-kompilator. Teksten som følger utropstegn (!) er kommentarer og vil ikke bli tatt hensyn til av programmet.

```
 program sylinder
 ! Regn ut volumet til en sylinder.
 implicit none ! Krever at samtlige variable blir deklarert (gitt en type)
 ! I eldre versjoner av fortran ble variable deklarert implistt,
 ! avhengig av den første bokstaven i variabelnavnet
 integer :: ierr ! Denne variabelen er et heltall
 real :: radius,height,volume ! mens denne variabelen er et flyttall
 real,parameter :: pi = 3.14159 ! Denne variabelen er en konstant og kan ikke bli endret iløpet av programmet
 do
 ! Spør brukeren om radius og høyde og leser dem inn
 write (\*,\*) "Tast inn radius og høyde, 'q' for å avslutte."
 read (\*,\*,iostat=ierr) radius,height
 
 ! Dersom radius og høyde ikke kunne leses inn fra input avsluttes programmet
 if (ierr /= 0) stop "ending program"
 
 ! Regn ut volumet. \*\* betyr opphøyd i
 volume = pi\*height\*radius\*\*2
 
 ! Vis innvariablene (radius, height) og resultatet (volume) på skjermen
 write (\*,"(1x,'radius=',f6.2,5x,'height=',f6.2,5x,'volume=',f6.2)") radius,height,volume
 end do
 end program sylinder

```

Referanser
----------

1. ↑  John W. Backus, R. J. Beeper, Sheldon F. Best, Richard Goldberg, Lois M. Haibt, Harlan L. Herrick, Robert A. Nelson, David Sayre, Peter B. Sheridan, H. Stern, Irving Ziller, R. A. Hughes og Roy Nutt: *The Fortran automatic coding system*, Western Joint Computer Conference, 1957, sidene 188–198
2. ↑  N. Chomsky: *Three models for the description of the language*, IRE, Transanctions on Information theory, IT-2:3, 1956, sidene 113–124
3. ↑  P. Z. Ingerman: *Panini-Backus form suggested*, Communications of the Association for Computing Machinery 10:3, 1967, side 137
4. ↑  Richard. L. Wexelblat: *History of Programming Languages*, Academic Press, New York, juni 1981, side 162, ISBN 0127450408, ISBN 978-0127450407

| * v
* d
* r
Programmeringsspråk |
| --- |
| Tidslinje |
| A# **·** ActionScript **·** Ada **·** Alef **·** ALGOL **·** ALGOL 58 **·** ALGOL 60 **·** ALGOL 68 **·** ALTRAN **·** APL **·** AppleScript **·** Argus **·** Assembler **·** Autokode **·** awk **·** B **·** BASIC **·** BCPL **·** BETA **·** BitC **·** BLISS **·** Bourne Shell **·** C **·** C++ **·** C-- **·** CHILL **·** C# **·** C shell **·** Caml **·** Ch **·** Cilk **·** Cilk++ **·** Cilk Plus **·** Clarion **·** Clipper **·** CLISP **·** Clojure **·** CLU **·** COBOL **·** COMAL **·** Common Lisp **·** Concurrent C **·** Concurrent Euclid **·** Concurrent Pascal **·** C shell **·** D **·** Delphi **·** Dylan **·** ECMAScript **·** Eiffel **·** Emacs Lisp **·** Erlang **·** Euclid **·** F\* **·** F# **·** Forth **·** Fortran **·** GNU Common Lisp **·** GNU Pascal **·** Go **·** Haskell **·** HyperTalk **·** Incr Tcl **·** INTERCAL **·** Interlisp **·** Java **·** JavaScript **·** JRuby **·** LaTeX **·** Legoscript **·** LilyPond **·** Limbo **·** Lisp **·** LPC **·** Lua **·** Lynx **·** Mary **·** MATLAB **·** Mesa **·** ML **·** MML **·** Modula **·** Modula-2 **·** MUMPS **·** Objective-C **·** Objective-C++ **·** OCaml **·** OpenVera **·** O'Haskell **·** Pascal **·** Perl **·** PHP **·** Pike **·** PL/I **·** Plankalkül **·** PLEX **·** Prolog **·** Protel **·** Pure Data **·** Python **·** R **·** Ratfor **·** REXX **·** RTL/2 **·** Ruby **·** Rust **·** SAS **·** Scala **·** Scheme **·** Scratch **·** Simula **·** SML **·** Smalltalk **·** SNOBOL **·** Tcsh **·** Tcl **·** TECO **·** TOM **·** Turbo Basic **·** Turbo Pascal **·** Verilog **·** Visual Prolog **·** Turing **·** TypeScript **·** Vala **·** VHDL **·** Visual Basic **·** Flere.. |
| 
* Kategori **Kategori**

 |

|  |  |
| --- | --- |
| Oppslagsverk/autoritetsdata | Store norske leksikon **·** Store Danske Encyklopædi **·** Encyclopædia Britannica **·** Encyclopædia Universalis **·** Encyclopædia Universalis **·** GND **·** LCCN **·** BNF **·** BNF (data) **·** NKC **·** BNE **·** BBC Things
 |