Fortran
Van Wikipedia
Fortran is een programmeertaal die speciaal ontwikkeld is voor wetenschappelijke doeleinden. Het woord Fortran is een samentrekking van FORmula TRANslation. Fortran is om verschillende redenen van belang. Ten eerste was het de eerste hogere programmeertaal, die alleen daardoor al zijn stempel op alle andere programmeertalen gedrukt heeft. Ten tweede was het de eerste taal die door het ANSI gestandaardiseerd werd en is de ontwikkeling af te lezen uit een aantal opvolgende standaards (Fortran 66, Fortran 77, Fortran 90, Fortran 95 en Fortran 2003), waarbij de compatibiliteit met voorgaande versies zo veel mogelijk behouden bleef. Ten slotte is het decennia lang de meest toegepaste taal voor natuurwetenschappelijke en econometrische problemen gebleven . De blijvende populariteit van Fortran wordt dan ook treffend beschreven in de anonieme uitspraak: Ik heb geen idee hoe de programmeertaal van de toekomst er uit zal zien, maar één ding is zeker: hij zal Fortran heten.
Inhoud |
[bewerk] Vroege geschiedenis
De eerste versie is ontwikkeld door een aantal medewerkers van IBM onder leiding van John Backus. Het eerste rapport over Fortran dateert van 1954, de eerste werkende compiler, voor de IBM-704, kwam begin 1957 gereed. Al in 1958 kwam de opvolger daarvan, Fortran II, beschikbaar. In de jaren daarop verschenen vele versies van Fortran, ook van andere leveranciers dan IBM. Dit leidde tot bemoeienis van het ANSI, die in 1966 de standaard Fortran 66 publiceerde. Fortran 66 kende twee versies, namelijk Basic Fortran, dat ongeveer overeenkwam met Fortran II, en full Fortran, dat het meest leek op de op dat moment nieuwste versie, Fortran IV. Omdat latere versies van Fortran niet vernieuwend meer waren maar de ontwikkelingen bij andere programmeertaal op enige afstand volgden wordt hier een beschrijving van Basic Fortran 66 gegeven. Hoewel die taal alleen in een ver verleden gebruikt werd staat de beschrijving in de tegenwoordige tijd.
[bewerk] Kenmerken van Fortran 66
De schrijfwijze is gebaseerd op de veronderstelling dat programma's op ponskaarten worden aangeboden aan de computer. Van de 80 kolommen van de ponskaart kunnen de laatste acht worden gebruikt voor een volgnummer, wat nuttig is als de operateur een stapel ponskaarten uit de handen laat vallen. In kolom 1 geeft een 'C' aan dat de kaart slechts commentaar bevat en ieder ander teken dan een spatie in kolom 6 geeft aan dat de kaart als een vervolg op de vorige kaart beschouwd moet worden: de gewone toestand is dus dat één kaart één opdracht bevat, die in kolom 7 t/m 72 staat. Kolommen 2 tot en met 5 worden gebruikt voor getallen die als label dienen; deze getallen mogen in willekeurige volgorde staan. Zoals gebruikelijk bij ponskaartinvoer gebruikt Fortran alleen hoofdletters.
Spaties zijn in Fortran niet significant: woorden mogen naar believen aan elkaar of los worden geschreven. Ook kent Fortran geen gereserveerde woorden: namen van statements mogen ook worden gebruikt als namen van variabelen. Deze regels zijn niet erg zinvol omdat ze het schrijven van een compiler moeilijker maken en voor de gebruiker weinig voordeel opleveren.
Enkelvoudige variabelen hoeven niet gedeclareerd te worden. Gehele variabelen hebben een naam die begint een van de letters I t/m N, Reële variabelen hebben een naam die met een andere letter begint. Array’s moeten gedeclareerd worden met de DIMENSION opdracht. Zij hebben hoogstens twee dimensies en de ondergrens is altijd 1. Variabelen die in de COMMON opdracht gedeclareerd worden zijn globaal; zij kunnen zowel in het hoofdprogramma als in subroutines en functies gebruikt worden. Alle andere variabelen zijn lokaal; lokale variabelen in subroutines en functies hebben hun oude waarde bij een nieuwe aanroep, net als de own variabele in Algol-60.
De toewijzingsopdracht (assignment statement) heeft de vorm
Variabele = Formule
Bijzonderheden zijn dat machtsverheffen wordt aangegeven met ** en dat een formule of alleen gehele of alleen reële waarden mag bevatten. Het resultaat van een deling (/) hangt dan ook af van het type van deler en deeltal: het resultaat van 3/2 is 1, het resultaat van 3.0/2.0 is 1.5. Komen gehele en reële waarden in één formule voor dan moet de functie FLOAT of IFIX gebruikt worden voor de noodzakelijke conversie. Bij de toewijzing wordt weer wel een automatische conversie uitgevoerd: bij conversie naar een gehele waarde wordt het resultaat afgekapt en niet afgerond.
Er zijn slechts drie controlestructuren namelijk de DO opdracht, de IF-opdracht en de GOTO-opdracht;
De DO-opdracht heeft de vorm:
DO label, variabele = beginwaarde, eindwaarde, stapgrootte
De variabele moet enkelvoudig en geheel zijn en een stapgrootte van 1 kan worden weggelaten. Een DO-opdracht heeft tot gevolg dat de opdrachten tot en met de opdracht met het opgegeven label herhaald worden totdat de eindwaarde bereikt is. Omdat niet alle opdrachten als eindopdracht van een DO-lus kunnen dienen kan de label voor de loze opdracht CONTINUE worden gezet. Basic heeft deze constructie eleganter geformuleerd met FOR-NEXT
De IF-opdracht heeft een zeer curieuze vorm, namelijk
IF(formule) label1, label2, label3
Dit betekent dat het programma naar label1 springt als het resultaat van de formule negatief is, naar label2 als het nul is en naar label3 als het positief is. Ook in dit geval is de formulering in Basic eleganter:
Fortran: IF(I-3)100,110,110 100
Basic IF I>=3 THEN 110
De gewone GOTO-opdracht heeft de vorm
GOTO label
De berekende GOTO-opdracht heeft de vorm:
GOTO(label1,label2,…labeln), variabele
Hier bepaalt de waarde van de gehele variabele bij welke label het programma wordt voortgezet. Deze opdracht is dus te vergelijken met de ON GOTO in Basic of het gebruik van de Switch in Algol-60.
Programma’s, subroutines en functie eindigen met END. Het hoofdprogramma stopt bij het bereiken van END, subroutines en functies keren terug naar het hoofdprogramma bij RETURN. Een functie wordt in een formule aangeroepen, een subroutine wordt met CALL aangeroepen.
De wijze waarop gegevens worden afgedrukt wordt bepaald in een FORMAT-opdracht, waarna in de opdracht READ, WRITE of PRINT wordt verwezen. Deze kan ook worden gebruikt om niet-numerieke gegevens af te drukken, die overigens niet kunnen worden verwerkt. Hiervoor wordt gebruikgemaakt van zogenaamde Hollerithconstanten, waarbij het aantal karakters zorgvuldig moet worden geteld.
[bewerk] Hello world
Hello World programma in basic Fortran 66:
PRINT 10 10 12HHELLO WORLD END
[bewerk] Voor- en nadelen
Een belangrijk voordeel is dat standaard Fortrancode altijd heel goed overdraagbaar is geweest tussen machines omdat er geen machinespecifieke commando's in de taal waren gedefinieerd. Er waren wel dialecten gemaakt door specifieke computerleveranciers die niet-overdraagbare uitbreidingen hadden. Ook zijn Fortrancompilers vaak erg stabiel en leveren ze erg snelle code; door het ontbreken van pointers kan een Fortrancompiler meer optimalisaties uitvoeren dan bijvoorbeeld een C-compiler. In de jaren 1960 werd Fortran vooral toegepast op computers van IBM en CDC, terwijl Algol-60 de taal was voor tragere en minder betrouwbare Europese computers. Typerend voor die tijd is de uitspraak van de natuurkundige Walter Hoogland: Fortran is beter dan Algol, want de bandponser van het MC is altijd kapot.
Fortran heeft oorspronkelijk weinig faciliteiten gehad om op laag niveau met het besturingssysteem te converseren, en het kende lange tijd ook geen pointers. Dit maakte het moeilijk om Fortran te gebruiken voor systeemtaken, maar het gebruik van hogere programmeertalen voor dit doel kwam pas op in de jaren 1970.
[bewerk] Latere ontwikkelingen
[bewerk] Fortran 77
Fortran 77 was op beide punten sterk verbeterd: er waren veel meer controlestructuren en er werden karaktergegevens geïntroduceerd.
[bewerk] Fortran 90
Fortran 90 heeft pointers geïntroduceerd. Dit gebeurde op een moment waarop al regelmatig gewezen werd op de problemen bij het gebruik van pointers in Pascal en C
[bewerk] Fortran 95
[bewerk] Fortran 2003
[bewerk] Bronnen
- Davis,G.B., An Introduction to Electronic Computers, McGraw-Hill, New York, 1965.
- Sammet, J.R., Programming Languages: History and Fundamentals, Prentice-Hall, Englewood Cliffs N.J., 1969.
- Zander,C., Art and Beauty of Computer Science & Mathematics
{{{afb_links}}} | Overzicht van programmeertalen | {{{afb_rechts}}} | {{{afb_groot}}} |
---|---|---|---|
Industrieel: Ada - AWK - Assembler - C - C++ - C# - COBOL - F# - Fortran - J# - Java - JavaScript - Lisp - Object Pascal - Pascal - Perl - PHP - Python - Visual Basic Academisch: Eiffel - Haskell - Logo - ML - Prolog - Scheme - Smalltalk Historisch: ALGOL - APL - BASIC - Clipper - MUMPS - PL/I - PowerBuilder - Simula |