Man kan i ett och samma program blanda programenheter skrivna i fix form och fri form, men varje enhet måste vara i endast en form, och vid kompileringen får normalt ej båda formerna finnas i samma källkodsfil. Dock tillåter vissa system ett direktiv mellan programenheterna i samma fil som talar om för kompilatorn vilken form som gäller.
I en del gamla Fortran-dialekter användes TYPE för utskrift på skrivmaskinsterminalen och PRINT för utskrift på radskrivaren. Begreppet TYPE har nu fått en helt ny betydelse, nämligen för att deklarera användardefinierade datatyper.
Under många Fortran 77 implementationer skrev man således
PROGRAM TEST REAL X WRITE(*,10) 10 FORMAT(' GE X = ',$) READ(*,*) X WRITE(*,*) X ENDI Fortran 90 använder man i stället icke-avancerande in/utmatning, "non-advancing I/O", man skriver därför skrivsatsen på följande sätt under Fortran 90
WRITE(*,'(A)',ADVANCE='NO') ' GE X = 'Dessa båda program ger samma resultat, man blir uppmanad att ge värdet på variabeln X på samma rad som texten
GE X =Icke avancerande in/utmatning kan ej användas på liststyrd in/utmatning eller på NAMELIST.
B = A(1:N,1:N)
REAL A, B, C PARAMETER (A = 3.141592654) DIMENSION B(3) DATA B / 1.0, 2.0, 3.0 / DIMENSION C(100) DATA C /100*0.0/dvs en variabel kunde förekomma på flera rader. Under Fortran 90 kan man naturligtvis skriva som tidigare, men man bör i stället skriva
REAL, PARAMETER :: A = 3.141592654 REAL, DIMENSION(1:3) :: B = (/ 1.0, 2.0, 3.0 /) REAL, DIMENSION(1:100) :: C DATA C /100*0.0/
När man gick från Fortran 66 till Fortran 77 tog man bort den utvidgade DO-slingan (möjligheten att, om man inte ändrar några av DO-slingans styrparametrar, hoppa ut ur slingan och sedan hoppa in igen, dvs något av motsatsen till strukturerad programmering) och Hollerith-konstanter (utom i FORMAT). Detta innebär att det finns program som uppfyller Fortran 66 men ej uppfyller Fortran 77. De flesta leverantörer har dock valt att låta dessa två begrepp ligga som utvidgningar i sin version av Fortran. För Fortran 90 gäller att inget tagits bort från Fortran 77. En viktig praktisk fråga blir dock huruvida leverantörerna kommer att fortsätta att behålla de båda saker som egentligen skulle ha försvunnit då Fortran 77 kom. Detta är tillåtet.
Innan antagen dimension (asterisken * som sista dimension) infördes i samband med Fortran 77 "fuskade" man i stället med att ge en etta (1) för den sista dimensioneringen. Denna metod fungerar inte alls under de flesta Fortran 90 system! Tre mycket små skillnader mellan Fortran 77 och Fortran 90 har noterats av Cray, och gäller allmänt.
I Fortran 90 användes begreppet utdöende (eng. obsolescent), vilket innebär att vissa ålderdomliga konstruktioner kan komma att tas bort när Fortran ändras nästa gång. Dessa konstruktioner är
En grupp High Performance Fortran Forum har utarbetat ett förslag för att hantera parallell databehandling i Fortran, i första hand i form av ett tillägg till Fortran 90. Syftet med detta projekt HPF är att erbjuda ett flyttbart (portabelt) språk som ger ett effektivt utnyttjande av olika parallella system. Projektet framlade ett slutligt förslag den 3 maj 1993, och syftar mot en de facto standard. Se vidare Appendix 9.
Något förenklat kan man säga att Fortran 90 effektivt klarar vektorprocessorer, medan HPF även klarar parallella processorer.
Bland de nya saker som överväges för nästa version av Fortran kan nämnas förbättrad parallell databehandling, avbrottshantering, parameteriserade datatyper samt datatyper med ärvda egenskaper. Avsikten är att komma med en revision under 1996, med några försiktigt utvalda nya egenskaper. Dessförinnan kommer ett par rättelser/förtydliganden (eventuellt även ett tillägg för avbrottshantering) från ISO i form av "Technical Corrigendum" till Fortran 90. En tidig version av dessa rättelser/förtydliganden finns i Fortran Forum, Vol 11, nummer 1, mars 1993, som SPECIAL ISSUE: Fortran 90; Errata, Amendments, and Interpretations, progress to date, 48 sidor.
Den nuvarande statusen för nästa version av Fortran finns beskrivet i filen Fortran 95.
Egenskap | Fortran 66 | Fortran 77 | Fortran 90 | Fortran 95 | ||
---|---|---|---|---|---|---|
Fix form | Fix form | Fix | Fri | (Fix) | Fri | |
Hela Fortran 66 | = | -2 | -2 | -2 | -5 | -5 |
Hela Fortran 77 | - | = | = | = | -5 | -5 |
Hela Fortran 90 | - | - | = | = | -5 | -5 |
Hela Fortran 95 | - | - | -14 | -14 | = | = |
Fortsättning markerad i kolumn 6 på nästa rad | + | + | + | - | + | - |
Fortsättning markerad med & sist på gamla raden | - | - | - | + | - | + |
Blank rad som kommentar | - | + | + | + | + | + |
Signifikanta blanka | - | - | - | + | - | + |
Generiska funktioner | - | + | + | + | + | + |
Användardefinierade generiska funktioner | - | - | + | + | + | + |
REAL*8 | - | - | - | - | - | - |
Kommentarsymbol | C | C * | C * ! | ! | C * ! | ! |
Filtyp i Unix | .f | .f | .f | .f90 | .f | .f90 |
Filtyp i DOS | .FOR | .FOR | .FOR | .F90 | .FOR | .F90 |
Ovan innebär till exempel -2 i position Hela Fortran 66 / Fortran 90 att två egenskaper försvunnit vid övergången från Fortran 66 till Fortran 90. Detta gäller både vid fix form och fri form hos källkoden.
I de fyra första raderna anger ett likhetstecken = att det gäller oförändrat, ett minus - att flera egenskaper saknas.
I de följande sju raderna anger ett plus + att egenskapen finns, ett minus - att den inte finns.
Fix form av källkod bör undvikas under Fortran 95!
REAL*8 är en alternativ benämning på DOUBLE PRECISION som införts av IBM och användes även av Digital. Fler varianter i samma stil finns.
Som kommentarsymbol rekommenderas utropstecknet !, som accepteras även i flera implementationer av Fortran 77.
Under UNIX finns egentligen inget som heter filtyp, och dessa är inte specificerade i Fortran-standarderna utan är informella fabrikantstandarder.
(16.2) Modifiera programmet genom att byta ut eventuella kommentarer inledda med
C eller * mot ! och försök att utnyttja
Fortran 90 fri form.
Lösning.
(16.3) Vad händer om följande lilla program körs under fix form respektive fri form?
LOGICAL L L = .FALSE. IF (L) THEN Z = 1.0 ELSE Y = Z ENDIF ENDLösning.