| << zur Fortran-Startseite | |
| < Fortran und Python | Ratfor > |
Was ist F?
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.
Einige Unterschiede zu Fortran 90/95
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.
Diverses
- Strengere Regeln bei
end-Statements für Hauptprogramm, Unterprogramme und Module:
| Fortran 90/95 | F |
|---|---|
program bsp ! ... end |
program bsp ! ... end program bsp |
Datentypen
- In F gibt es den Datentyp
double precisionnicht. Er kann aber problemlos wie in Fortran 90 /95 mittelsrealundkind-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 |
Ein- / Ausgabe
- Die vereinfachte Schreibweise
write( *, * )undread( *, * )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 |
Schleifen
- F kennt keine
do-while-Schleife.
Funktionen und Subroutinen
- 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
|
Module
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.
Weblinks
| << zur Fortran-Startseite | |
| < Fortran und Python | Ratfor > |