Zum Inhalt springen

Fortran: F

Aus Wikibooks
<< 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 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

Ein- / Ausgabe

[Bearbeiten]
  • 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

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.

[Bearbeiten]



<< zur Fortran-Startseite
< Fortran und Python Ratfor >