F ist ein Fortran 90/95-Subset. Das bedeutet auch, dass sich F-Programmcode immer mit Fortran 90/95-Compilern übersetzen lassen sollte. Umgekehrt ist das natürlich oft nicht möglich. Grob gesagt, wurde bei F auf die bedingungslose Kompatibilität mit FORTRAN 77-Code gepfiffen und nur die moderneren Fortran 90/95-Sprachmittel erlaubt. Die überbordenden Möglichkeiten und Schreibweisen zur Erreichung ein und desselben Ziels wurden also deutlich eingebremst. F ist somit ein bisschen leichter erlernbar als Fortran 90/95 in seiner Gesamtheit und führt durch restriktivere Regeln automatisch zu einem etwas stringenteren Programmierstil. Und das war bei der Einführung von F auch das Ziel: Einsatz von F in der Ausbildung und Lehre, wenngleich natürlich von den F-Schöpfern der Einsatz in praktischen Projekten auch gerne gesehen worden wäre.
Ein expliziter F-Compiler ist auf ftp.swcp.com/pub/walt/F unter FortranTools für die Betriebssysteme MS Windows und Linux zu finden. In diesen Softwarepaketen sind unter anderem das F-Manual und etliche Beispiele in der F-Programmiersprache enthalten.
Im Nachfolgenden werden Fortran 90/95- und F-Beispiele gegenüber gestellt. Das soll aber nicht bedeuten, dass die Fortran 90/95-Beispiele zwingend so formuliert werden müssen oder optimaler Fortran 90/95-Code sind. Es soll nur gezeigt werden, welche Freiheiten Fortran 90/95 im Gegensatz zu F erlaubt. F ist ein Subset von Fortran 90/95 und die als F-Code deklarierten Beispiele enthalten somit auch immer gültigen Fortran 90/95-Code.
- Strengere Regeln bei
end
-Statements für Hauptprogramm, Unterprogramme und Module:
Fortran 90/95
|
F
|
program bsp
! ...
end
|
program bsp
! ...
end program bsp
|
- In F gibt es den Datentyp
double precision
nicht. Er kann aber problemlos wie in Fortran 90 /95 mittels real
und kind
-Attribut ersetzt werden.
- Die alte (FORTRAN 77)-Form ohne Doppel-Doppelpunkt zwecks Variablendeklaration ist in F nicht erlaubt:
Fortran 90/95
|
F
|
program bsp
real r
r = 12.5
! ...
end program bsp
|
program bsp
real :: r
r = 12.5
! ...
end program bsp
|
- In F gibt es keine impliziten Datentypvereinbarungen. Der Datentyp muss immer explizit festgelegt werden:
Fortran 90/95
|
F
|
program bsp
i = 12
! ...
end program bsp
|
program bsp
integer :: i = 12
! ...
end program bsp
|
- Die vereinfachte Schreibweise
write( *, * )
und read( *, * )
funktioniert bei F nicht. F akzeptiert Apostrophe nicht als Zeichenkettenbegrenzer:
Fortran 90/95
|
F
|
program bsp
write( *, * ) 'Hallo Welt!'
! Alternativ auch: print *, 'Hallo Welt!'
end program bsp
|
program bsp
write( unit = *, fmt = * ) "Hallo Welt!"
! Alternativ auch: print *, "Hallo Welt!"
end program bsp
|
- Kein
format
, keine Marken:
Fortran 90/95
|
F
|
program bsp
real :: a = 30.0
write( *, fmt = 999 ) a
999 format( F10.3 )
end program bsp
|
program bsp
real :: a = 30.0
write( unit = *, fmt = "(F10.3)" ) a
end program bsp
|
- F kennt keine
do-while
-Schleife.
- Egal, ob die Parameterliste leer ist oder nicht, in F müssen immer die Klammern im Anschluss an den Unterprogrammnamen geschrieben werden
- Externe Unterprogramme sind nicht erlaubt.
Fortran 90/95
|
F
|
program bsp
call schreibe
end program bsp
subroutine schreibe
write( *, * ) "Hallo"
end subroutine schreibe
|
program bsp
call schreibe()
contains
subroutine schreibe()
write( unit = *, fmt = * ) "Hallo"
end subroutine schreibe
end program bsp
|
F ist restriktiver bei der Verwendung von Modulen als Fortran 90/95. Für Modulvariablen und -unterprogramme muss immer ein Zugriffspezifizierer public
oder private
vorgegeben werden.
Fortran 90/95
|
F
|
module modu
real :: pi = 3.1416
contains
subroutine schreibe()
write( *, * ) "Hallo"
end subroutine schreibe
end module modu
program bsp
use modu
write( *, * ) pi
call schreibe()
end program bsp
|
module modu
private
real, public :: pi = 3.1416
public :: schreibe
contains
subroutine schreibe()
write( unit = *, fmt = * ) "Hallo"
end subroutine schreibe
end module modu
program bsp
use modu
write( unit = *, fmt = * ) pi
call schreibe()
end program bsp
|
Weitere Unterschiede sind mittels angegebener Weblinks auffindbar bzw. dem F-Manual zu entnehmen.