Fortran: F
<< zur Fortran-Startseite | |
< Fortran und Python | Ratfor > |
Was ist F? Bearbeiten
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 Bearbeiten
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 Bearbeiten
- Strengere Regeln bei
end
-Statements für Hauptprogramm, Unterprogramme und Module:
Fortran 90/95 | F |
---|---|
program bsp ! ... end |
program bsp ! ... end program bsp |
Datentypen Bearbeiten
- In F gibt es den Datentyp
double precision
nicht. Er kann aber problemlos wie in Fortran 90 /95 mittelsreal
undkind
-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 Bearbeiten
- 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 Bearbeiten
- F kennt keine
do-while
-Schleife.
Funktionen und Subroutinen Bearbeiten
- 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 Bearbeiten
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 Bearbeiten
<< zur Fortran-Startseite | |
< Fortran und Python | Ratfor > |