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.
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.