Fortran - Fortran

Fortran
Fortran-logo.svg
Paradigma Multiparadigma : strukturiert , zwingend ( prozedural , objektorientiert ), generisch , Array
Entworfen von John Backus
Entwickler John Backus und IBM
Erstmals erschienen 1957 ; Vor 64 Jahren ( 1957 )
Stabile Version
Fortran 2018 (ISO/IEC 1539-1:2018) / 28. November 2018 ; vor 2 Jahren ( 2018-11-28 )
Schreibdisziplin stark , statisch , manifest
Dateinamenerweiterungen .f, .for,.f90
Webseite fortran-lang .org
Wichtige Implementierungen
Absoft , Cray , GFortran , G95 , IBM XL Fortran, Intel , Hitachi , Lahey/Fujitsu, Numerical Algorithms Group , Open Watcom , PathScale , PGI , Silverfrost , Oracle Solaris Studio , andere
Beeinflusst von
Geschwindigkeitscodierung
Beeinflusst
ALGOL 58 , BASIC , C , Kapelle , CMS-2 , DOPE , Fortress , PL/I , PACT I , MUMPS , IDL , Ratfor
Das Fortran Automatic Coding System for the IBM 704 (15. Oktober 1956), das erste Programmierhandbuch für Fortran

Fortran ( / f ɔːr t r æ n / , früher FORTRAN ) ist ein Allzweck-, kompilierten zwingend notwendig Programmiersprache , die besonders geeignet ist zur numerischen Berechnung und wissenschaftlichen Rechnens .

Fortran wurde ursprünglich in den 1950er Jahren von IBM für wissenschaftliche und technische Anwendungen entwickelt und dominierte später das wissenschaftliche Rechnen. Es wird seit über sechs Jahrzehnten in rechenintensiven Bereichen wie der numerischen Wettervorhersage , der Finite-Elemente-Analyse , der numerischen Strömungsmechanik , der Geophysik , der computergestützten Physik , der Kristallographie und der computergestützten Chemie eingesetzt . Es ist eine beliebte Sprache für Hochleistungsrechnen und wird für Programme verwendet, die die schnellsten Supercomputer der Welt vergleichen und einstufen .

Fortran hat zahlreiche Versionen gehabt, von denen jede Erweiterungen hinzugefügt hat, während die Kompatibilität mit den Vorgängerversionen weitgehend beibehalten wurde. Aufeinanderfolgende Versionen bieten Unterstützung für strukturierte Programmierung und Verarbeitung von zeichenbasierten Daten (FORTRAN 77), Array-Programmierung , modulare Programmierung und generische Programmierung (Fortran 90), Hochleistungs-Fortran (Fortran 95), objektorientierte Programmierung (Fortran 2003), gleichzeitige Programmierung (Fortran 2008) und native parallele Computing- Funktionen (Coarray Fortran 2008/2018).

Das Design von Fortran war die Grundlage für viele andere Programmiersprachen. Zu den bekannteren gehört BASIC , das auf FORTRAN II basiert, mit einer Reihe von Syntaxbereinigungen , insbesondere besseren logischen Strukturen und anderen Änderungen, um in einer interaktiven Umgebung einfacher zu arbeiten.

Ab August 2021 wurde Fortran 13 auf Platz th im TIOBE Index , ein Maß für die Popularität von Programmiersprachen, Klettern 29 Positionen aus seiner Rangliste von 42 nd im August 2020.

Benennung

Der Name FORTRAN leitet sich von Formula Translating System , Formula Translator, Formula Translation oder Formulaic Translation ab. Die Namen früherer Versionen der Sprache bis FORTRAN 77 wurden konventionell in Großbuchstaben geschrieben (FORTRAN 77 war die letzte Version, in der der Fortran-Zeichensatz nur Großbuchstaben enthielt). Die Amtssprache Standards für Fortran haben die Sprache , wie „Fortran“ mit bezeichnet Kapitälchen (statt „Fortran“ in allen Großbuchstaben) , da Fortran 90.

Geschichte

Ende 1953 unterbreitete John W. Backus seinen Vorgesetzten bei IBM einen Vorschlag , eine praktischere Alternative zur Assemblersprache für die Programmierung ihres IBM 704 Großrechners zu entwickeln . Das historische FORTRAN-Team von Backus bestand aus den Programmierern Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt , Robert Nelson, Irving Ziller, Harold Stern, Lois Haibt und David Sayre . Zu seinen Konzepten gehörte die einfachere Eingabe von Gleichungen in einen Computer, eine Idee, die von J. Halcombe Laning entwickelt und im Laning- und Zierler-System von 1952 demonstriert wurde .

Ein Entwurf Spezifikation für IBM Mathematische Formel Translating - System wurde im November 1954. Das erste Handbuch für Fortran abgeschlossen erschien im Oktober 1956 mit den ersten Fortran - Compiler ausgeliefert im April 1957. Dies war der erste optimierenden Compiler , weil die Kunden zögern , eine zu verwenden , High-Level-Programmiersprache, es sei denn, ihr Compiler könnte Code mit einer Leistung generieren, die sich der von handcodierten Assemblersprachen annähert.

Während die Gemeinde war skeptisch , dass diese neue Methode könnte möglicherweise outperform Hand-Codierung, reduziert sie die Anzahl der Programmierung Aussagen notwendig , eine Maschine um einen Faktor von 20, zu bedienen und schnell durchgesetzt. John Backus sagte während einer 1979 Interview mit Denken , das IBM - Mitarbeiterzeitschrift „ Ein großer Teil meiner Arbeit kommen aus faul. Ich habe nicht wie Programme zu schreiben, und so, wenn ich arbeitete auf dem IBM 701 , die Programme schreiben , für die Berechnung Raketenflugbahnen begann ich mit der Arbeit an einem Programmiersystem, um das Schreiben von Programmen zu vereinfachen."

Die Sprache wurde von Wissenschaftlern weithin zum Schreiben numerisch intensiver Programme übernommen, was Compiler-Autoren ermutigte, Compiler zu entwickeln, die schnelleren und effizienteren Code generieren konnten. Durch die Aufnahme eines komplexen Zahlendatentyps in die Sprache eignet sich Fortran besonders für technische Anwendungen wie die Elektrotechnik.

Bis 1960 waren Versionen von FORTRAN für die Computer IBM 709 , 650 , 1620 und 7090 verfügbar . Bezeichnenderweise spornte die zunehmende Popularität von FORTRAN konkurrierende Computerhersteller an, FORTRAN-Compiler für ihre Maschinen bereitzustellen, so dass 1963 über 40 FORTRAN-Compiler existierten. Aus diesen Gründen gilt FORTRAN als die erste weit verbreitete plattformübergreifende Programmiersprache.

Die Entwicklung von Fortran verlief parallel zur frühen Entwicklung der Compiler-Technologie , und viele Fortschritte in der Theorie und dem Design von Compilern wurden speziell durch die Notwendigkeit motiviert, effizienten Code für Fortran-Programme zu generieren.

FORTRAN

Die erste Version von FORTRAN für die IBM 704 enthielt 32 Anweisungen , darunter:

  • DIMENSIONund EQUIVALENCEAussagen
  • Zuweisungsanweisungen
  • Dreifache arithmetische IF Anweisung, die die Kontrolle an eine von drei Stellen im Programm übergibt, je nachdem, ob das Ergebnis der arithmetischen Anweisung negativ, null oder positiv war
  • IFAnweisungen zum Prüfen von Ausnahmen ( ACCUMULATOR OVERFLOW, QUOTIENT OVERFLOW, und DIVIDE CHECK); und IFAnweisungen zur Manipulation von Sensorschaltern und Sensorlichtern
  • GO TO, berechnet GO TO, ASSIGN, und zugewiesenGO TO
  • DO Schleifen
  • Formatierte E/A: FORMAT, READ, READ INPUT TAPE, WRITE, WRITE OUTPUT TAPE, PRINT, undPUNCH
  • Unformatierte E/A: READ TAPE, READ DRUM, WRITE TAPE, undWRITE DRUM
  • Andere E/A: END FILE, REWIND, undBACKSPACE
  • PAUSE, STOP, undCONTINUE
  • FREQUENCY-Anweisung (um dem Compiler Optimierungshinweise bereitzustellen).

Die arithmetische IFAnweisung erinnerte an eine auf dem 704 verfügbare Dreiwege-Vergleichsanweisung (CAS – Compare Accumulator with Storage) (die jedoch nicht ohne weiteres implementiert werden konnte). Überlaufgefahr. Dieser Mangel wurde später durch "logische" Einrichtungen beseitigt, die in FORTRAN IV eingeführt wurden.

Die FREQUENCYAnweisung wurde ursprünglich (und optional) verwendet, um Verzweigungswahrscheinlichkeiten für die drei Verzweigungsfälle der arithmetischen IF-Anweisung anzugeben. Der erste FORTRAN-Compiler verwendete diese Gewichtung, um zur Kompilierzeit eine Monte-Carlo-Simulation des generierten Codes durchzuführen , deren Ergebnisse zur Optimierung der Platzierung von Basisblöcken im Speicher verwendet wurden – eine für die damalige Zeit sehr ausgeklügelte Optimierung. Die Monte-Carlo-Technik ist in Backus et al. über diese ursprüngliche Implementierung, The FORTRAN Automatic Coding System, dokumentiert :

Die grundlegende Programmeinheit ist der Basisblock ; Ein Basisblock ist ein Programmabschnitt, der einen Einstiegspunkt und einen Ausstiegspunkt hat. Der Zweck von Abschnitt 4 besteht darin, für Abschnitt 5 eine Tabelle der Vorgänger (PRED-Tabelle) zu erstellen, die die Basisblöcke aufzählt und für jeden Basisblock jeden der Basisblöcke auflistet, der sein unmittelbarer Vorgänger im Fluss sein kann, zusammen mit der absoluten Häufigkeit von jede solche Basisblockverbindung. Diese Tabelle wird erhalten, indem das Programm einmal in Monte-Carlo-Manier ausgeführt wird, wobei das Ergebnis von bedingten Übertragungen, die aus Anweisungen vom Typ IF und berechneten GO TOs resultieren, durch einen Zufallszahlengenerator bestimmt wird, der entsprechend den bereitgestellten FREQUENCY-Anweisungen geeignet gewichtet ist .

Viele Jahre später hatte die FREQUENCYAnweisung keine Auswirkung auf den Code und wurde als Kommentaranweisung behandelt, da die Compiler diese Art der Simulation zur Kompilierzeit nicht mehr durchführten. Ein ähnliches Schicksal ereilte Compilerhinweise in mehreren anderen Programmiersprachen, zB das Schlüsselwort in C . register

Der erste FORTRAN-Compiler meldete Diagnoseinformationen, indem er das Programm anhielt, wenn ein Fehler gefunden wurde, und einen Fehlercode auf seiner Konsole ausgab. Dieser Code könnte vom Programmierer in einer Fehlermeldungstabelle in der Bedienungsanleitung nachgeschlagen werden und ihm eine kurze Beschreibung des Problems geben. Später wurde eine von der NASA entwickelte Subroutine zur Fehlerbehandlung zur Behandlung von Benutzerfehlern wie der Division durch Null integriert, die Benutzer darüber informiert, welche Codezeile den Fehler enthielt.

Festes Layout und Lochkarten

FORTRAN-Code auf einer Lochkarte , der die speziellen Verwendungen der Spalten 1–5, 6 und 73–80 anzeigt

Vor der Entwicklung von Diskettendateien, Texteditoren und Terminals wurden Programme meist über eine Keypunch- Tastatur auf 80-spaltige Lochkarten eingegeben , eine Zeile für eine Karte. Das resultierende Kartenspiel würde einem Kartenleser zugeführt, um zusammengestellt zu werden. Gestanzte Kartencodes enthielten keine Kleinbuchstaben oder viele Sonderzeichen, und es wurden spezielle Versionen des IBM 026- Keypunchs angeboten, die die in FORTRAN verwendeten wiederverwendeten Sonderzeichen korrekt drucken würden.

Fortran-Programme, die die Praxis der Lochkarteneingabe widerspiegeln, wurden ursprünglich in einem Format mit festen Spalten geschrieben, wobei die ersten 72 Spalten in zwölf 36-Bit-Wörter gelesen wurden.

Ein Buchstabe "C" in Spalte 1 führte dazu, dass die gesamte Karte als Kommentar behandelt und vom Compiler ignoriert wurde. Ansonsten wurden die Spalten der Karte in vier Felder unterteilt:

  • 1 bis 5 waren das Label-Feld: Eine Ziffernfolge wurde hier als Label für die Verwendung in DO- oder Steueranweisungen wie GO TO und IF oder zur Identifizierung einer FORMAT-Anweisung verwendet, auf die in einer WRITE- oder READ-Anweisung Bezug genommen wird. Führende Nullen werden ignoriert und 0 ist keine gültige Labelnummer.
  • 6 war ein Fortsetzungsfeld: Ein anderes Zeichen als ein Leerzeichen oder eine Null führte hier dazu, dass die Karte als Fortsetzung der Aussage auf der vorherigen Karte genommen wurde. Die Fortsetzungskarten waren normalerweise mit 1, 2 usw. nummeriert und die Startkarte könnte daher eine Null in ihrer Fortsetzungsspalte haben – die keine Fortsetzung ihrer vorherigen Karte ist.
  • Als Anweisungsfeld dienten 7 bis 72.
  • 73 bis 80 wurden ignoriert (der Kartenleser der IBM 704 verwendet nur 72 Spalten).

Die Spalten 73 bis 80 könnten daher für Identifikationsinformationen verwendet werden, wie beispielsweise das Stanzen einer Sequenznummer oder eines Textes, der verwendet werden könnte, um Karten neu zu ordnen, wenn ein Kartenstapel fallen gelassen wurde; obwohl dies in der Praxis stabilen Produktionsprogrammen vorbehalten war. Ein IBM 519 könnte verwendet werden, um ein Programmdeck zu kopieren und Sequenznummern hinzuzufügen. Einige frühe Compiler, zB die IBM 650, hatten zusätzliche Einschränkungen aufgrund von Beschränkungen ihrer Kartenleser. Keypunches konnten so programmiert werden, dass sie bis Spalte 7 Tabulatoren und nach Spalte 72 ausspringen. Spätere Compiler lockerten die meisten Beschränkungen fester Formate, und die Anforderung wurde im Fortran 90-Standard eliminiert.

Innerhalb des Anweisungsfeldes wurden Leerzeichen (Leerzeichen) außerhalb eines Textliterals ignoriert. Dies ermöglichte es, Leerzeichen zwischen den Token aus Gründen der Kürze wegzulassen oder Leerzeichen innerhalb von Bezeichnern aus Gründen der Klarheit einzufügen. War beispielsweise AVG OF Xein gültiger Bezeichner, äquivalent zu AVGOFX, und war eine gültige Anweisung, äquivalent zu, da die Null in Spalte 6 wie ein Leerzeichen (!) behandelt wird, während stattdessen die Zuweisung von 1.101 zu einer Variablen namens . Beachten Sie den leichten visuellen Unterschied zwischen einem Komma und einem Punkt. 101010DO101I=1,10110101 DO 101 I = 1, 101101010DO101I=1.10110101 DO101I = 1.101DO101I

Hollerith-Strings , die ursprünglich nur in FORMAT- und DATA-Anweisungen zulässig waren, wurden mit einer Zeichenzahl und dem Buchstaben H (zB 26HTHIS IS ALPHANUMERIC DATA.) vorangestellt , sodass Leerzeichen in der Zeichenfolge beibehalten werden konnten. Fehlzählungen waren ein Problem.

FORTRAN II

IBMs FORTRAN II erschien 1958. Die wichtigste Verbesserung bestand darin, die prozedurale Programmierung zu unterstützen , indem vom Benutzer geschriebene Subroutinen und Funktionen zugelassen wurden, die Werte mit Parametern zurückgaben, die als Referenz übergeben wurden . Die COMMON-Anweisung bot Unterroutinen eine Möglichkeit, auf allgemeine (oder globale ) Variablen zuzugreifen . Sechs neue Aussagen wurden eingeführt:

  • SUBROUTINE, FUNCTION, undEND
  • CALL und RETURN
  • COMMON

In den nächsten Jahren würde FORTRAN II auch die Unterstützung für die Datentypen DOUBLE PRECISIONund hinzufügen COMPLEX.

Frühe FORTRAN-Compiler unterstützten keine Rekursion in Unterroutinen. Frühe Computerarchitekturen unterstützten kein Konzept eines Stapels, und wenn sie Subroutinenaufrufe direkt unterstützten, wurde die Rückkehrposition oft an einer festen Position neben dem Subroutinencode (zB IBM 1130 ) oder einem spezifischen Maschinenregister ( IBM 360 ff. ) gespeichert ), die eine Rekursion nur zulässt, wenn ein Stack von der Software verwaltet wird und die Rückkehradresse auf dem Stack gespeichert wird, bevor der Aufruf erfolgt und nach der Rückkehr des Aufrufs wiederhergestellt wird. Obwohl in FORTRAN 77 nicht angegeben, unterstützten viele F77-Compiler Rekursion als Option, und die Burroughs-Mainframes , die mit integrierter Rekursion entwickelt wurden, taten dies standardmäßig. Über das neue Schlüsselwort RECURSIVE wurde es in Fortran 90 zum Standard.

Einfaches FORTRAN II-Programm

Dieses Programm, für die Formel von Heron , liest Daten auf einer Bandspule, die drei 5-stellige ganze Zahlen A, B und C als Eingabe enthalten. Es stehen keine "Typ"-Deklarationen zur Verfügung: Variablen, deren Name mit I, J, K, L, M oder N beginnt, sind "Festkomma" (dh ganze Zahlen), ansonsten Gleitkommazahlen. Da in diesem Beispiel ganze Zahlen verarbeitet werden sollen, beginnen die Namen der Variablen mit dem Buchstaben „I“. Der Name einer Variablen muss mit einem Buchstaben beginnen und kann sowohl aus Buchstaben als auch aus Ziffern bestehen, in FORTRAN II maximal sechs Zeichen lang. Wenn A, B und C die Seiten eines Dreiecks in der ebenen Geometrie nicht darstellen können, endet die Programmausführung mit dem Fehlercode "STOP 1". Andernfalls wird eine Ausgabezeile gedruckt, die die Eingabewerte für A, B und C anzeigt, gefolgt von der berechneten Fläche des Dreiecks als Gleitkommazahl, die zehn Stellen entlang der Ausgabezeile einnimmt und 2 Stellen nach dem Komma anzeigt , die .2 in F10.2 der FORMAT-Anweisung mit dem Label 601.

C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION
C INPUT - TAPE READER UNIT 5, INTEGER INPUT
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING
      READ INPUT TAPE 5, 501, IA, IB, IC
  501 FORMAT (3I5)
C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO
C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE
C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
      IF (IA) 777, 777, 701
  701 IF (IB) 777, 777, 702
  702 IF (IC) 777, 777, 703
  703 IF (IA+IB-IC) 777, 777, 704
  704 IF (IA+IC-IB) 777, 777, 705
  705 IF (IB+IC-IA) 777, 777, 799
  777 STOP 1
C USING HERON'S FORMULA WE CALCULATE THE
C AREA OF THE TRIANGLE
  799 S = FLOATF (IA + IB + IC) / 2.0
      AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) *
     +     (S - FLOATF(IC)))
      WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA
  601 FORMAT (4H A= ,I5,5H  B= ,I5,5H  C= ,I5,8H  AREA= ,F10.2,
     +        13H SQUARE UNITS)
      STOP
      END

FORTRAN III

Eine Reproduktion eines auf Papier gedruckten FORTRAN-Kodierungsformulars, das von Programmierern verwendet werden soll, um Programme zum Lochen auf Karten durch Keypunch- Operatoren vorzubereiten . Jetzt veraltet.

IBM entwickelte 1958 auch ein FORTRAN III , das unter anderem Inline-Assembly- Code ermöglichte; diese Version wurde jedoch nie als Produkt veröffentlicht. Wie die 704 FORTRAN und FORTRAN II enthielt FORTRAN III maschinenabhängige Funktionen, die den darin geschriebenen Code von Maschine zu Maschine nicht portieren ließen. Frühe Versionen von FORTRAN, die von anderen Anbietern bereitgestellt wurden, litten unter dem gleichen Nachteil.

IBM 1401 FORTRAN

FORTRAN wurde für den IBM 1401- Computer von einem innovativen 63-Phasen-Compiler bereitgestellt , der vollständig in seinem Kernspeicher von nur 8000 (sechs Bit) Zeichen lief. Der Compiler könnte vom Band oder von einem 2200-Karten-Deck ausgeführt werden; es verwendete keinen weiteren Band- oder Plattenspeicher. Es behielt das Programm im Speicher und lud Overlays ein , die es nach und nach in eine ausführbare Form überführten, wie von Haines beschrieben. Dieser Artikel wurde in beiden Ausgaben von Anatomy of a Compiler und im IBM Handbuch "Fortran Specifications and Operating Procedures, IBM 1401" nachgedruckt und bearbeitet . Die ausführbare Form war nicht ausschließlich Maschinensprache ; vielmehr wurden Gleitkommaarithmetik, Subskription, Eingabe/Ausgabe und Funktionsreferenzen interpretiert, die dem UCSD Pascal P-Code um zwei Jahrzehnte vorausgingen .

IBM lieferte später einen FORTRAN IV-Compiler für die 1400-Computerserie.

FORTRAN IV

Aufgrund von Kundenwünschen begann IBM 1961 mit der Entwicklung von FORTRAN IV. FORTRAN IV entfernte die maschinenabhängigen Funktionen von FORTRAN II (wie READ INPUT TAPE) und fügte neue Funktionen wie einen LOGICALDatentyp , logische boolesche Ausdrücke und die logische IF-Anweisung als Alternative zur arithmetischen IF-Anweisung hinzu. FORTRAN IV wurde schließlich 1962 veröffentlicht, zuerst für den IBM 7030 ("Stretch") Computer, gefolgt von Versionen für den IBM 7090 , IBM 7094 und später für den IBM 1401 im Jahr 1966.

Bis 1965 wurde Fortran IV konform mit dem sein soll Standard durch die entwickelt amerikanischen Standards Association X3.4.3 Fortran - Arbeitsgruppe.

Zwischen 1966 und 1968 bot IBM mehrere FORTRAN IV-Compiler für sein System/360 an , die jeweils mit Buchstaben benannt waren, die die minimale Speichermenge angaben, die der Compiler zum Ausführen benötigte. Die Buchstaben (F, G, H) stimmten mit den Codes überein, die mit den System/360-Modellnummern verwendet wurden, um die Speichergröße anzuzeigen, wobei jedes Buchstabeninkrement um den Faktor zwei größer ist:

  • 1966: FORTRAN IV F für DOS/360 (64 KB)
  • 1966: FORTRAN IV G für OS/360 (128 KB)
  • 1968: FORTRAN IV H für OS/360 (256 KB)

Ungefähr zu dieser Zeit hatte sich FORTRAN IV zu einem wichtigen Bildungswerkzeug entwickelt und Implementierungen wie WATFOR und WATFIV der University of Waterloo wurden entwickelt, um die komplexen Kompilierungs- und Linkprozesse früherer Compiler zu vereinfachen.

FORTRAN 66

Die vielleicht bedeutendste Entwicklung in der frühen Geschichte von FORTRAN war die Entscheidung der American Standards Association (jetzt American National Standards Institute (ANSI)), ein von der BEMA, der Business Equipment Manufacturers Association, gesponsertes Komitee zu bilden, um ein American Standard Fortran zu entwickeln . Die daraus resultierenden zwei Standards, die im März 1966 genehmigt wurden, definierten zwei Sprachen, FORTRAN (basierend auf FORTRAN IV, das als De-facto-Standard gedient hatte) und Basic FORTRAN (basierend auf FORTRAN II, aber ohne seine maschinenabhängigen Funktionen). Das durch den ersten Standard definierte FORTRAN, offiziell als X3.9-1966 bezeichnet, wurde als FORTRAN 66 bekannt (obwohl viele es weiterhin FORTRAN IV nannten, die Sprache, auf der der Standard weitgehend basierte). FORTRAN 66 wurde effektiv die erste Industriestandardversion von FORTRAN. FORTRAN 66 enthalten:

  • Hauptprogramm, SUBROUTINE, FUNCTION, und BLOCK DATAProgrammeinheiten
  • INTEGER, REAL, DOUBLE PRECISION, COMPLEX, und LOGICAL Datentypen
  • COMMON, DIMENSION, und EQUIVALENCEAussagen
  • DATA Anweisung zur Angabe von Anfangswerten
  • Intrinsische und EXTERNAL(zB Bibliotheks-) Funktionen
  • Zuweisungsanweisung
  • GO TO, berechnet GO TO, zugewiesen GO TOund ASSIGNAnweisungen
  • Logische IFund arithmetische (Drei-Wege-) IFAnweisungen
  • DO Schleifenanweisung
  • READ, WRITE, BACKSPACE, REWIND, und ENDFILEAnweisungen für sequentielle I/O
  • FORMAT Anweisung und zugewiesenes Format
  • CALL, RETURN, PAUSE, und STOPAussagen
  • Hollerith-Konstanten in DATAund FORMAT-Anweisungen und als Argumente für Prozeduren
  • Bezeichner mit bis zu sechs Zeichen Länge
  • Kommentarzeilen
  • END Leitung

FORTRAN 77

FORTRAN-77-Programm mit Compiler-Ausgabe, geschrieben auf einer CDC 175 an der RWTH Aachen , Deutschland, 1987
4.3 BSD für die Digital Equipment Corporation (DEC) VAX , zeigt das Handbuch für den FORTRAN 77 (f77) Compiler

Nach der Veröffentlichung des FORTRAN 66-Standards führten Compiler-Hersteller mehrere Erweiterungen von Standard Fortran ein , was das ANSI-Komitee X3J3 im Jahr 1969 veranlasste, unter der Schirmherrschaft von CBEMA , der Computer Business Equipment Manufacturers Association (ehemals BEMA), mit der Überarbeitung des Standards von 1966 zu beginnen . Die endgültigen Entwürfe dieses überarbeiteten Standard in Umlauf im Jahr 1977, was zu einer Entlastung des neuen Fortran - Standard im April 1978. Der neue Standard, genannt Fortran 77 und offiziell bezeichnet X3.9-1978, eine Reihe von wichtigen Funktionen Adresse viele der addierte Mängel von FORTRAN 66:

  • Block IFund END IFAnweisungen, mit optionalen ELSEund ELSE IFKlauseln, um eine verbesserte Sprachunterstützung für strukturierte Programmierung bereitzustellen
  • DO Schleifenerweiterungen, einschließlich Parameterausdrücken, negativen Inkrementen und Null-Trip-Zählungen
  • OPEN, CLOSE, und INQUIRE-Anweisungen für verbesserte I/O-Fähigkeit
  • Datei-I/O mit direktem Zugriff
  • IMPLICIT -Anweisung, um implizite Konventionen zu überschreiben, dass nicht deklarierte Variablen INTEGER sind, wenn ihr Name mit I, J, K, L, M oder N beginnt (und ansonsten REAL)
  • CHARACTER Datentyp, der Hollerith-Strings durch stark erweiterte Möglichkeiten zur Zeicheneingabe und -ausgabe und Verarbeitung von zeichenbasierten Daten ersetzt
  • PARAMETER Anweisung zur Angabe von Konstanten
  • SAVE Anweisung für persistente lokale Variablen
  • Generische Namen für intrinsische Funktionen (zB SQRTakzeptiert auch Argumente anderer Typen, wie COMPLEXoder REAL*16).
  • Ein Satz von Intrinsics ( LGE, LGT, LLE, LLT) für den lexikalischen Vergleich von Strings, basierend auf der ASCII- Sortierungssequenz . (Diese ASCII-Funktionen wurden vom US-Verteidigungsministerium in seinem bedingten Genehmigungsvotum gefordert .)

Bei dieser Überarbeitung des Standards wurden eine Reihe von Funktionen entfernt oder in einer Weise geändert, die ehemals standardkonforme Programme ungültig machen könnte. (Die Entfernung war damals die einzig zulässige Alternative zu X3J3, da das Konzept der „ Veraltung “ für ANSI-Standards noch nicht verfügbar war.) Während die meisten der 24 Punkte in der Konfliktliste (siehe Anhang A2 von X3.9-1978) Lücken oder pathologische Fälle adressiert, die nach dem früheren Standard zugelassen, aber selten verwendet wurden, wurden einige spezifische Fähigkeiten bewusst entfernt, wie zum Beispiel:

  • Hollerith-Konstanten und Hollerith- Daten, wie zGREET = 12HHELLO THERE!
  • Einlesen in einen H-Edit-Deskriptor (Hollerith-Feld) in einer FORMAT-Spezifikation
  • Überindizierung von Array-Grenzen durch Indizes
          DIMENSION A(10,5)
          Y=  A(11,1)
    
  • Übertragung der Kontrolle aus und zurück in den Bereich einer DO-Schleife (auch bekannt als "Extended Range")

Varianten: Minnesota FORTRAN

Die Computer der Control Data Corporation verfügten über eine weitere Version von FORTRAN 77, genannt Minnesota FORTRAN (MNF), die speziell für Studenten entwickelt wurde, mit Variationen in den Ausgabekonstrukten, speziellen Verwendungen von COMMON- und DATA-Anweisungen, Optimierungscodeebenen für die Kompilierung, detaillierten Fehlerlisten, ausführlichen Warnungen Nachrichten und Debugging-Funktionen. MNF wurde von Mitarbeitern (Liddiard & Mundstock) an der University of Minnesota entwickelt . MNF war grundsätzlich kostenlos erhältlich.

Übergang zum ANSI-Standard Fortran

Die Entwicklung eines überarbeiteten Standards als Nachfolger von FORTRAN 77 wurde wiederholt verzögert, da der Standardisierungsprozess Schwierigkeiten hatte, mit den schnellen Veränderungen in der Computer- und Programmierpraxis Schritt zu halten. Inzwischen war FORTRAN 77 als "Standard FORTRAN" seit fast fünfzehn Jahren der historisch bedeutendste Dialekt.

Eine wichtige praktische Erweiterung von FORTRAN 77 war die Veröffentlichung von MIL-STD-1753 im Jahr 1978. Diese vom US-Verteidigungsministerium entwickelte Spezifikation standardisierte eine Reihe von Funktionen, die von den meisten FORTRAN 77-Compilern implementiert, aber nicht im ANSI FORTRAN 77-Standard enthalten sind . Diese Funktionen würden schließlich in den Fortran 90-Standard aufgenommen.

Der 1991 veröffentlichte IEEE 1003.9 POSIX- Standard bot FORTRAN 77-Programmierern eine einfache Möglichkeit, POSIX-Systemaufrufe abzusetzen. In dem Dokument wurden über 100 Aufrufe definiert, die den Zugriff auf POSIX-kompatible Prozesssteuerung, Signalverarbeitung, Dateisystemsteuerung, Gerätesteuerung, Prozedurzeiger und Stream-I/O auf portable Weise ermöglichen.

Fortran 90

Der viel verzögerte Nachfolger von FORTRAN 77, informell als Fortran 90 (und davor Fortran 8X ) bekannt, wurde schließlich 1991 als ISO/IEC-Standard 1539:1991 und 1992 als ANSI-Standard veröffentlicht Schreibweise von FORTRAN zu Fortran fügte diese große Überarbeitung viele neue Funktionen hinzu, um die bedeutenden Änderungen in der Programmierpraxis widerzuspiegeln, die sich seit dem Standard von 1978 entwickelt hatten:

  • Quelleingabe in freier Form , auch mit Fortran-Schlüsselwörtern in Kleinbuchstaben
  • Bezeichner mit einer Länge von bis zu 31 Zeichen (im vorherigen Standard waren es nur sechs Zeichen).
  • Inline-Kommentare
  • Fähigkeit, mit Arrays (oder Array-Abschnitten) als Ganzes zu arbeiten, wodurch mathematische und technische Berechnungen erheblich vereinfacht werden.
    • ganze, partielle und maskierte Array-Zuweisungsanweisungen und Array-Ausdrücke, wie z X(1:N)=R(1:N)*COS(A(1:N))
    • WHERE Anweisung zur selektiven Array-Zuweisung
    • Array-wertige Konstanten und Ausdrücke,
    • benutzerdefinierte Array-Wert-Funktionen und Array-Konstruktoren.
  • RECURSIVE Verfahren
  • Module , um zusammengehörige Prozeduren und Daten zu gruppieren und sie anderen Programmeinheiten zur Verfügung zu stellen, einschließlich der Möglichkeit, die Zugänglichkeit nur auf bestimmte Teile des Moduls zu beschränken.
  • Ein stark verbesserter Argument-Passing-Mechanismus, der es ermöglicht, Schnittstellen zur Kompilierzeit zu überprüfen
  • Benutzerdefinierte Schnittstellen für generische Prozeduren
  • Überlastung des Bedieners
  • Abgeleitete (strukturierte) Datentypen
  • Neue Datentyp-Deklarationssyntax, um den Datentyp und andere Attribute von Variablen anzugeben
  • Dynamische Speicherzuweisung über das ALLOCATABLEAttribut und die ALLOCATEund- DEALLOCATEAnweisungen
  • POINTERAttribut, Zeigerzuweisung und NULLIFYAnweisung, um die Erstellung und Manipulation dynamischer Datenstrukturen zu erleichtern
  • Strukturierte Schleifenkonstrukte mit einer END DOAnweisung zum Beenden der Schleife EXITund CYCLEAnweisungen zum DOgeordneten Beenden normaler Schleifeniterationen
  • SELECT. . . CASEKonstrukt für Mehrfachauswahl
  • Tragbare Spezifikation der numerischen Präzision unter der Kontrolle des Benutzers
  • Neue und verbesserte intrinsische Verfahren.

Obsoleszenz und Löschungen

Im Gegensatz zur vorherigen Überarbeitung entfernte Fortran 90 keine Funktionen. Jedes standardkonforme FORTRAN 77-Programm ist auch standardkonform unter Fortran 90, und jeder Standard sollte verwendet werden können, um sein Verhalten zu definieren.

Ein kleiner Satz von Funktionen wurde als "veraltet" identifiziert und soll in einem zukünftigen Standard entfernt werden. Alle Funktionen dieser frühen Versionsfunktionen werden von neuen Fortran 95-Funktionen ausgeführt. Einige werden aufbewahrt, um die Portierung alter Programme zu vereinfachen, können aber irgendwann gelöscht werden.

Obsoleszenz und Löschungen
Veraltete Funktion Beispiel Status/Schicksal in Fortran 95
Arithmetische IF-Anweisung
      IF (X) 10, 20, 30
Veraltet
Nicht ganzzahlige DO-Parameter oder Steuervariablen
      DO 9 X= 1.7, 1.6, -0.1
Gelöscht
Beendigung der gemeinsamen DO-Schleife oder
Beendigung mit einer
anderen Anweisung als END DO oder CONTINUE  
      DO 9 J= 1, 10
          DO 9 K= 1, 10
  9       L=  J + K
Veraltet
Verzweigung auf END IF

von außerhalb eines Blocks

 66   GO TO 77 ; . . .
      IF (E) THEN ;     . . .
 77   END IF
Gelöscht
Alternative Rückgabe
      CALL SUBR( X, Y, *100, *200 )
Veraltet
PAUSE-Anweisung
      PAUSE 600
Gelöscht
ASSIGN-Anweisung
  und zugewiesene GO TO-Anweisung
 100   . . .
      ASSIGN 100 TO H
       . . .
      GO TO H . . .
Gelöscht
Zugewiesene Anweisungsnummern und FORMAT-Bezeichner
      ASSIGN 606 TO F ... WRITE ( 6, F )...
Gelöscht
H Deskriptoren bearbeiten
 606  FORMAT ( 9H1GOODBYE. )
Gelöscht
Berechnete GO TO-Anweisung
      GO TO (10, 20, 30, 40), index
(obsolet)
Anweisungsfunktionen
      FOIL( X, Y )=  X**2 + 2*X*Y + Y**2
(obsolet)
DATA-Anweisungen
  unter ausführbaren Anweisungen
      X= 27.3
      DATA  A, B, C  / 5.0, 12.0, 13.0 /
      . . .
(obsolet)
CHARACTER* Form der CHARACTER-Deklaration
      CHARACTER*8 STRING   ! Use CHARACTER(8)
(obsolet)
Angenommene Zeichenlängenfunktionen
      CHARACTER*(*) STRING
(obsolet)
Quellcode in fester Form Spalte 1 enthält C oder * oder ! für Kommentare.
Spalten 1 bis 5 für Anweisungsnummern
Beliebiges Zeichen in Spalte 6 für die Fortsetzung.
Spalten 73 und höher ignoriert
(obsolet)

"Hallo Welt!" Beispiel

program helloworld
     print *, "Hello, World!"
end program helloworld

Fortran 95

Fortran 95 , offiziell als ISO/IEC 1539-1:1997 veröffentlicht, war eine kleine Überarbeitung, hauptsächlich um einige noch offene Probleme des Fortran 90-Standards zu lösen. Nichtsdestotrotz hat Fortran 95 auch eine Reihe von Erweiterungen hinzugefügt, insbesondere aus der High Performance Fortran- Spezifikation:

  • FORALLund verschachtelte WHEREKonstrukte zur Unterstützung der Vektorisierung
  • Benutzerdefiniert PUREund ELEMENTALVerfahren
  • Standardinitialisierung abgeleiteter Typkomponenten, einschließlich Zeigerinitialisierung
  • Möglichkeit zur Verwendung von Initialisierungsausdrücken für Datenobjekte erweitert
  • Initialisierung von Zeigern auf NULL()
  • Klar definiert, dass ALLOCATABLEdie Zuordnung von Arrays automatisch aufgehoben wird, wenn sie den Gültigkeitsbereich verlassen.

Eine Reihe von intrinsischen Funktionen wurde erweitert (zum Beispiel dimwurde dem maxlocintrinsischen ein Argument hinzugefügt ).

Mehrere Funktionen, die in Fortran 90 als "veraltet" bezeichnet wurden, wurden aus Fortran 95 entfernt:

  • DOAnweisungen mit REALund DOUBLE PRECISIONIndexvariablen
  • END IFVon außerhalb des Blocks zu einer Anweisung verzweigen
  • PAUSE Stellungnahme
  • ASSIGNund zugewiesene GO TOAnweisung und zugewiesene Formatbezeichner
  • H Hollerith Edit-Deskriptor.

Eine wichtige Ergänzung zu Fortran 95 war der technische ISO-Bericht TR-15581: Enhanced Data Type Facilities , informell als Allocable TR bekannt. Diese Spezifikation definierte die erweiterte Verwendung von ALLOCATABLEArrays, bevor vollständig Fortran 2003-kompatible Fortran-Compiler verfügbar waren. Solche Verwendungen umfassen ALLOCATABLEArrays als abgeleitete Typkomponenten, in Dummy-Argumentlisten von Prozeduren und als Rückgabewerte von Funktionen. ( ALLOCATABLEArrays sind POINTER-basierten Arrays vorzuziehen, da ALLOCATABLEvon Fortran 95 garantiert wird, dass Arrays automatisch freigegeben werden, wenn sie den Gültigkeitsbereich verlassen, wodurch die Möglichkeit von Speicherverlusten ausgeschlossen wird . Außerdem sind Elemente von zuweisbaren Arrays zusammenhängend und Aliasing ist kein Problem für Optimierung von Array-Referenzen, wodurch Compiler schnelleren Code generieren können als im Fall von Zeigern.)

Eine weitere wichtige Ergänzung zu Fortran 95 war der technische ISO- Bericht TR-15580: Floating-Point-Exception-Handling , informell als IEEE TR bekannt. Diese Spezifikation definiert die Unterstützung für IEEE-Gleitkommaarithmetik und Gleitkomma- Ausnahmebehandlung .

Bedingte Kompilierung und Strings unterschiedlicher Länge

Neben der obligatorischen „Basissprache“ (definiert in ISO/IEC 1539-1 : 1997) umfasst die Fortran 95-Sprache auch zwei optionale Module:

  • Zeichenfolgen unterschiedlicher Länge (ISO/IEC 1539-2 : 2000)
  • Bedingte Zusammenstellung (ISO/IEC 1539-3: 1998)

die zusammen den mehrteiligen Internationalen Standard (ISO/IEC 1539) bilden.

Laut den Entwicklern der Standards „beschreiben die optionalen Teile in sich abgeschlossene Funktionen, die von einer beträchtlichen Anzahl von Benutzern und/oder Implementierern angefordert wurden, die jedoch nicht als ausreichend allgemein erachtet werden, um sie in allen normkonformen Anforderungen erforderlich zu machen Fortran-Compiler." Wenn jedoch ein standardkonformes Fortran solche Optionen bietet, müssen sie „in Übereinstimmung mit der Beschreibung dieser Einrichtungen im entsprechenden Teil des Standards bereitgestellt werden“.

Fortran 2003

Fortran 2003, offiziell als ISO/IEC 1539-1:2004 veröffentlicht, ist eine umfassende Überarbeitung, die viele neue Funktionen einführt. Eine umfassende Zusammenfassung der neuen Funktionen von Fortran 2003 ist auf der offiziellen Website der Fortran Working Group (ISO/IEC JTC1/SC22/WG5) verfügbar.

Aus diesem Artikel sind die wichtigsten Verbesserungen für diese Überarbeitung:

  • Verbesserungen bei abgeleiteten Typen: parametrisierte abgeleitete Typen, verbesserte Kontrolle der Zugänglichkeit, verbesserte Strukturkonstruktoren und Finalizer
  • Unterstützung für objektorientierte Programmierung : Typerweiterung und -vererbung , Polymorphismus , dynamische Typzuweisung und typgebundene Prozeduren, die vollständige Unterstützung für abstrakte Datentypen bieten
  • Verbesserungen bei der Datenmanipulation: zuweisbare Komponenten (mit TR 15581), verzögerte Typparameter, VOLATILEAttribut , explizite Typspezifikation in Arraykonstruktoren und allocate-Anweisungen, Zeigererweiterungen, erweiterte Initialisierungsausdrücke und erweiterte intrinsische Prozeduren
  • Eingabe-/Ausgabeerweiterungen: asynchrone Übertragung, Stream-Zugriff, benutzerdefinierte Übertragungsoperationen für abgeleitete Typen, benutzerdefinierte Steuerung der Rundung bei Formatkonvertierungen, benannte Konstanten für vorverbundene Einheiten, die FLUSHAnweisung, Regularisierung von Schlüsselwörtern und Zugriff auf Fehlermeldungen
  • Prozedurzeiger
  • Unterstützung für IEEE-Gleitkommaarithmetik und Gleitkomma- Ausnahmebehandlung (mit TR 15580)
  • Interoperabilität mit der Programmiersprache C
  • Unterstützung für internationale Verwendung: Zugriff auf ISO 10646 4-Byte-Zeichen und Wahl von Dezimal oder Komma bei numerisch formatierter Ein-/Ausgabe
  • Verbesserte Integration mit dem Host-Betriebssystem: Zugriff auf Befehlszeilenargumente , Umgebungsvariablen und Prozessorfehlermeldungen

Eine wichtige Ergänzung zu Fortran 2003 war der ISO Technical Report TR-19767: Enhanced module Facilities in Fortran. Dieser Bericht enthält Untermodule, die Fortran-Module den Modula-2- Modulen ähnlicher machen . Sie ähneln den privaten untergeordneten Untereinheiten von Ada . Dadurch kann die Spezifikation und Implementierung eines Moduls in separaten Programmeinheiten ausgedrückt werden, was das Packen großer Bibliotheken verbessert, die Wahrung von Geschäftsgeheimnissen bei der Veröffentlichung definitiver Schnittstellen ermöglicht und Kompilierungskaskaden verhindert.

Fortran 2008

ISO/IEC 1539-1:2010, informell als Fortran 2008 bekannt, wurde im September 2010 genehmigt. Wie bei Fortran 95 handelt es sich hierbei um ein kleineres Upgrade, das Klarstellungen und Korrekturen zu Fortran 2003 sowie einige neue Funktionen enthält. Zu den neuen Funktionen gehören:

  • Submodule – zusätzliche Strukturierungsmöglichkeiten für Module; ersetzt ISO/IEC TR 19767:2005
  • Coarray Fortran — ein paralleles Ausführungsmodell
  • Das DO CONCURRENT- Konstrukt – für Schleifeniterationen ohne Abhängigkeiten
  • Das CONTIGUOUS-Attribut – um Einschränkungen für das Speicherlayout anzugeben
  • Das BLOCK-Konstrukt —kann Deklarationen von Objekten mit Konstruktbereich enthalten
  • Rekursive zuordenbare Komponenten – als Alternative zu rekursiven Zeigern in abgeleiteten Typen

Der Final Draft International Standard (FDIS) ist als Dokument N1830 verfügbar.

Eine Ergänzung zu Fortran 2008 ist die Technische Spezifikation (TS) 29113 der International Organization for Standardization (ISO) zur weiteren Interoperabilität von Fortran mit C , die der ISO im Mai 2012 zur Genehmigung vorgelegt wurde. Die Spezifikation fügt Unterstützung für den Zugriff auf den Array-Deskriptor von C hinzu und ermöglicht das Ignorieren von Typ und Rang von Argumenten.

Fortran 2018

Die neueste Überarbeitung der Sprache (Fortran 2018) wurde früher als Fortran 2015 bezeichnet. Sie ist eine bedeutende Überarbeitung und wurde am 28. November 2018 veröffentlicht.

Fortran 2018 enthält zwei zuvor veröffentlichte technische Spezifikationen:

  • ISO/IEC TS 29113: 2012 Weitere Interoperabilität mit C
  • ISO/IEC TS 18508: 2015 Zusätzliche Parallelfunktionen in Fortran

Zu den weiteren Änderungen und neuen Funktionen gehören die Unterstützung für ISO/IEC/IEEE 60559:2011 (die Version des IEEE-Gleitkomma-Standards vor der letzten Nebenrevision IEEE 754-2019), hexadezimale Eingabe/Ausgabe, IMPLICIT NONE-Erweiterungen und andere Änderungen.

Sprachmerkmale

Eine vollständige Beschreibung der Fortran-Sprachfunktionen seit Fortran 95 finden Sie im zugehörigen Artikel Fortran 95-Sprachfunktionen .

Wissenschaft und Ingenieurswesen

Obwohl ein Zeitschriftenartikel aus dem Jahr 1968 von den Autoren von BASIC FORTRAN bereits als "altmodisch" bezeichnete, werden seit über sechs Jahrzehnten Programme in Fortran geschrieben und es gibt eine große Menge Fortran-Software im täglichen Gebrauch in den wissenschaftlichen und technischen Gemeinschaften. Jay Pasachoff schrieb 1984, dass „Studenten der Physik und Astronomie einfach FORTRAN lernen müssen. Im Jahr 1993 nannte Cecil E. Leith FORTRAN die "Muttersprache des wissenschaftlichen Rechnens" und fügte hinzu, dass seine Ersetzung durch jede andere mögliche Sprache "eine verlorene Hoffnung bleiben kann".

Allgemeine relativistische magnetohydrodynamische Fortran-Simulation der Akkretion von Schwarzen Löchern unter Verwendung des BHAC-Codes mit kartesischem adaptivem Netz (www.bhac.science).

Es ist die primäre Sprache für einige der intensivsten Supercomputing- Aufgaben wie Astronomie , Klimamodellierung , Computerchemie, Computerökonomie , Strömungssimulation , Computerphysik , Datenanalyse, hydrologische Modellierung , numerische lineare Algebra und numerische Bibliotheken ( LAPACK , IMSL und NAG ), Optimierung , Satellitensimulation, Tragwerksplanung und Wettervorhersage . Viele der Gleitkomma-Benchmarks zur Messung der Leistung neuer Computerprozessoren, wie beispielsweise die Gleitkomma-Komponenten der SPEC- Benchmarks (zB CFP2006 , CFP2017 ) sind in Fortran geschrieben. Mathematische Algorithmen sind in Numerical Recipes gut dokumentiert .

Abgesehen davon verwenden modernere Codes in der Computational Science im Allgemeinen große Programmbibliotheken wie METIS für die Graphpartitionierung, PETSc oder Trilinos für lineare Algebrafähigkeiten , DUNE oder FEniCS für die Unterstützung von Netzen und Finite-Elementen und andere generische Bibliotheken. Seit Anfang der 2000er Jahre wurden viele der weit verbreiteten Support-Bibliotheken auch in C und neuerdings in C++ implementiert . Andererseits sind Hochsprachen wie MATLAB , Python und R in bestimmten Bereichen der Computerwissenschaften populär geworden. Folglich wird ein wachsender Anteil wissenschaftlicher Programme auch in solchen höheren Skriptsprachen geschrieben. Aus diesem Grund wurde Fortran 2003 um Möglichkeiten für die Interoperation mit C erweitert und um die technische ISO/IEC-Spezifikation 29113 erweitert, die in Fortran 2018 integriert wurde, um eine flexiblere Zusammenarbeit mit anderen Programmiersprachen zu ermöglichen.

Die Software für die NASA-Sonden Voyager 1 und Voyager 2 wurde ursprünglich in FORTRAN 5 geschrieben und später auf FORTRAN 77 portiert. Seit dem 25. September 2013 ist ein Teil der Software noch in Fortran geschrieben und ein Teil wurde auf C portiert.

Portabilität

Portabilität war in der Anfangszeit ein Problem, da es keinen vereinbarten Standard gab – nicht einmal das Referenzhandbuch von IBM – und Computerfirmen darum kämpften, ihre Angebote durch inkompatible Funktionen von anderen zu unterscheiden. Standards haben die Portabilität verbessert. Der 1966 - Standard vorgesehen , um eine Referenz - Syntax und Semantik, aber Anbieter weiterhin inkompatible Erweiterungen zur Verfügung zu stellen. Obwohl sorgfältige Programmierer erkannten, dass die Verwendung inkompatibler Erweiterungen teure Portabilitätsprobleme verursachte und daher Programme wie The PFORT Verifier verwendeten, dauerte es bis nach dem Standard von 1977, als das National Bureau of Standards (jetzt NIST ) FIPS PUB . veröffentlichte 69 , dass Prozessoren, die von der US-Regierung gekauft wurden, verpflichtet waren, Erweiterungen des Standards zu diagnostizieren. Anstatt zwei Prozessoren anzubieten, hatte im Wesentlichen jeder Compiler irgendwann zumindest die Möglichkeit, Erweiterungen zu diagnostizieren.

Inkompatible Erweiterungen waren nicht das einzige Portabilitätsproblem. Bei numerischen Berechnungen ist es wichtig, die Eigenschaften der Arithmetik zu berücksichtigen. Dies wurde von Fox et al. im Kontext des 1966er Standards von der PORT- Bibliothek. Die darin enthaltenen Ideen wurden weit verbreitet und wurden schließlich über intrinsische Abfragefunktionen in den Standard von 1990 aufgenommen. Die weit verbreitete (jetzt fast universelle) Annahme des IEEE 754- Standards für binäre Gleitkomma-Arithmetik hat dieses Problem im Wesentlichen beseitigt.

Der Zugriff auf die Computerumgebung (z. B. die Befehlszeile des Programms, Umgebungsvariablen, Texterklärung von Fehlerbedingungen) blieb ein Problem, bis es durch den Standard von 2003 behoben wurde.

Große Sammlungen von Bibliothekssoftware, die als lose Verbindung zu technischen und wissenschaftlichen Berechnungen beschrieben werden können, wie z. Dies wurde durch die Aufnahme der C-Interoperabilität in den Standard von 2003 angegangen.

Es ist jetzt möglich (und relativ einfach), ein vollständig portables Programm in Fortran zu schreiben, auch ohne auf einen Präprozessor zurückzugreifen.

Varianten

Bis zur Entwicklung des Fortran-66-Standards unterstützte jeder Compiler seine eigene Fortran-Variante. Einige wichen stärker vom Mainstream ab als andere.

Der erste Fortran-Compiler setzte einen hohen Effizienzstandard für kompilierten Code. Dieses Ziel machte es schwierig, einen Compiler zu erstellen, so dass dies normalerweise von den Computerherstellern getan wurde, um den Hardwareverkauf zu unterstützen. Dies hinterließ eine wichtige Nische: Compiler, die schnell waren und dem Programmierer (oft Studenten) eine gute Diagnose lieferten. Beispiele sind Watfor, Watfiv, PUFFT und in kleinerem Maßstab FORGO, Wits Fortran und Kingston Fortran 2.

Fortran 5

Fortran 5 wurde von Data General Corp in den späten 1970er und frühen 1980er Jahren für die Computer der Nova- , Eclipse- und MV- Reihe vermarktet . Es hatte einen optimierenden Compiler, der für Minicomputer seiner Zeit recht gut war. Die Sprache ähnelt am ehesten FORTRAN 66.

FORTRAN V

FORTRAN V wurde 1968 von der Control Data Corporation für die CDC 6600- Serie vertrieben. Die Sprache basierte auf FORTRAN IV.

Univac bot auch einen Compiler für die 1100er Serie an, der als FORTRAN V bekannt ist. Ein Spin-off von Univac Fortran V war Athena FORTRAN.

Fortran 6

Fortran 6 oder Visual Fortran 2001 wurde von Microsoft an Compaq lizenziert . Sie haben Compaq Visual Fortran lizenziert und die Visual Studio 5-Umgebungsschnittstelle für Compaq v6 bis v6.1 bereitgestellt.

Spezifische Varianten

Anbieter von wissenschaftlichen Hochleistungscomputern ( z. B. Burroughs , Control Data Corporation (CDC), Cray , Honeywell , IBM , Texas Instruments und UNIVAC ) fügten Fortran Erweiterungen hinzu, um spezielle Hardwarefunktionen wie Befehlscache , CPU- Pipelines , und Vektorarrays. Zum Beispiel hatte einer von IBMs FORTRAN-Compilern ( H Extended IUP ) eine Optimierungsstufe, die die Maschinencode- Befehle neu ordnete , um mehrere interne arithmetische Einheiten gleichzeitig beschäftigt zu halten. Ein weiteres Beispiel ist CFD , eine spezielle Variante von Fortran speziell für den ILLIAC IV - Supercomputer, läuft bei der NASA ‚s Ames Research Center . IBM Research Labs hat außerdem eine erweiterte FORTRAN-basierte Sprache namens VECTRAN für die Verarbeitung von Vektoren und Matrizen entwickelt.

Objektorientiertes Fortran war eine objektorientierte Erweiterung von Fortran, bei der Datenelemente zu Objekten gruppiert werden können, die instanziiert und parallel ausgeführt werden können. Es war für Sun, Iris, iPSC und nCUBE verfügbar, wird aber nicht mehr unterstützt.

Solche maschinenspezifischen Erweiterungen sind im Laufe der Zeit entweder verschwunden oder haben Elemente in die Hauptnormen aufgenommen. Die wichtigste verbleibende Erweiterung ist OpenMP , eine plattformübergreifende Erweiterung für die Shared-Memory-Programmierung. Eine neue Erweiterung, Coarray Fortran, soll die parallele Programmierung unterstützen.

FÜR TRANSIT für den IBM 650

FOR TRANSIT war der Name einer reduzierten Version der IBM 704 FORTRAN-Sprache, die für die IBM 650 mit einem in den späten 1950er Jahren bei Carnegie entwickelten Übersetzerprogramm implementiert wurde. Der folgende Kommentar erscheint im IBM Reference Manual ( FOR TRANSIT Automatic Coding System C28-4038, Copyright 1957, 1959 by IBM):

Das FORTRAN-System wurde für eine komplexere Maschine als die 650 entwickelt, und folglich sind einige der 32 Anweisungen im FORTRAN Programmer's Reference Manual für das FOR TRANSIT-System nicht akzeptabel. Darüber hinaus wurden der FORTRAN-Sprache bestimmte Einschränkungen hinzugefügt. Keine dieser Einschränkungen macht jedoch ein für FOR TRANSIT geschriebenes Quellprogramm mit dem FORTRAN-System für den 704 inkompatibel.

Die zulässigen Aussagen waren:

  • Arithmetische Zuweisungsanweisungen, z. a = b
  • GO to n
  • GO TO (n1, n2, ..., nm), i
  • IF (a) n1, n2, n3
  • PAUSE
  • STOP
  • DO n i = m1, m2
  • CONTINUE
  • END
  • READ n, list
  • PUNCH n, list
  • DIMENSION V, V, V, ...
  • EQUIVALENCE (a,b,c), (d,c), ...

Bis zu zehn Unterprogramme können in einem Programm verwendet werden.

FOR TRANSIT-Anweisungen waren nur auf die Spalten 7 bis 56 beschränkt. Für die Ein- und Ausgabe auf der IBM 650 wurden Lochkarten verwendet. Drei Durchgänge waren erforderlich, um den Quellcode in die "IT"-Sprache zu übersetzen, dann die IT-Anweisungen in die SOAP-Assemblersprache zu kompilieren und schließlich das Objektprogramm zu erstellen, das dann in die Maschine geladen werden, um das Programm auszuführen (Verwendung von Lochkarten zur Dateneingabe und Ausgabe der Ergebnisse auf Lochkarten).

Für die 650er mit 2000-Wort-Speichertrommel gab es zwei Versionen: FOR TRANSIT I (S) und FOR TRANSIT II, ​​letztere für Maschinen mit Indexierungsregistern und automatischer Gleitkomma-Dezimal- ( biquinär ) Arithmetik. Anhang A des Handbuchs enthielt Schaltpläne für das Bedienfeld des Kartenlesers/Lochers IBM 533 .

Fortran-basierte Sprachen

Vor FORTRAN 77 wurden üblicherweise eine Reihe von Präprozessoren verwendet, um eine benutzerfreundlichere Sprache bereitzustellen, mit dem Vorteil, dass der vorverarbeitete Code auf jedem Computer mit einem Standard-Fortran-Compiler kompiliert werden konnte. Diese Präprozessoren würden normalerweise strukturierte Programmierung , Variablennamen mit mehr als sechs Zeichen, zusätzliche Datentypen, bedingte Kompilierung und sogar Makrofunktionen unterstützen . Beliebte Präprozessoren waren FLECS , iftran , MORTRAN , SFtran , S-Fortran , Ratfor und Ratfiv . Ratfor und Ratfiv haben beispielsweise eine C- ähnliche Sprache implementiert , die vorverarbeiteten Code im Standard FORTRAN 66 ausgibt. Trotz der Fortschritte in der Fortran-Sprache werden Präprozessoren weiterhin für bedingte Kompilierung und Makroersetzung verwendet.

Eine der frühesten Versionen von FORTRAN, die in den 60er Jahren eingeführt wurde, wurde im Volksmund in Colleges und Universitäten verwendet. Entwickelt, unterstützt und durch die verteilte University of Waterloo , WATFOR beruhte weitgehend auf Fortran IV. Ein Student, der WATFOR verwendet, könnte seinen FORTRAN-Batch-Job senden, und wenn keine Syntaxfehler auftreten, würde das Programm direkt zur Ausführung übergehen. Diese Vereinfachung ermöglichte es den Studenten, sich auf die Syntax und Semantik ihres Programms oder den logischen Ablauf der Ausführung zu konzentrieren, anstatt sich mit der Submission Job Control Language (JCL), den sukzessiven Kompilierungs-/Link-Bearbeitungs-/Ausführungsprozessen oder anderen Komplexitäten des Mainframes zu befassen /Minicomputer-Umgebung. Ein Nachteil dieser vereinfachten Umgebung war, dass WATFOR keine gute Wahl für Programmierer war, die die erweiterten Fähigkeiten ihrer Host-Prozessoren benötigten, zB hatte WATFOR normalerweise nur sehr begrenzten Zugriff auf E/A-Geräte. WATFOR wurde von WATFIV und seinen späteren Versionen abgelöst.

program; s=0 i=1,n; s=s+1; stop i; s='s'  Stop

(Linienprogrammierung)

LRLTRAN wurde am Lawrence Radiation Laboratory entwickelt , um neben anderen Erweiterungen zur Unterstützung der Systemprogrammierung Unterstützung für Vektorarithmetik und dynamische Speicherung bereitzustellen. Die Distribution beinhaltete das LTSS-Betriebssystem .

Der Fortran-95-Standard enthält einen optionalen Teil 3, der eine optionale bedingte Kompilierungsfunktion definiert . Diese Fähigkeit wird oft als "CoCo" bezeichnet.

Viele Fortran-Compiler haben Teilmengen des C-Präprozessors in ihre Systeme integriert.

SIMSCRIPT ist ein anwendungsspezifischer Fortran-Präprozessor zur Modellierung und Simulation großer diskreter Systeme.

Die Programmiersprache F wurde als saubere Teilmenge von Fortran 95 entwickelt, die versuchte, die redundanten, unstrukturierten und veralteten Funktionen von Fortran, wie die EQUIVALENCEAnweisung , zu entfernen . F behält die in Fortran 90 hinzugefügten Array-Funktionen bei und entfernt Steueranweisungen, die durch strukturierte Programmierkonstrukte, die sowohl in FORTRAN 77 als auch in Fortran 90 hinzugefügt wurden, obsolet wurden. F wird von seinen Schöpfern als "eine besonders gut geeignete kompilierte, strukturierte Array-Programmiersprache" beschrieben für Bildung und wissenschaftliches Rechnen".

Lahey und Fujitsu haben sich zusammengetan, um Fortran für das Microsoft .NET Framework zu entwickeln . Silverfrost FTN95 kann auch .NET-Code erstellen.

Codebeispiele

Das folgende Programm veranschaulicht die dynamische Speicherzuweisung und Array-basierte Operationen, zwei Funktionen, die mit Fortran 90 eingeführt wurden. Besonders bemerkenswert ist das Fehlen von DOSchleifen und IF/ THEN-Anweisungen bei der Manipulation des Arrays; mathematische Operationen werden auf das Array als Ganzes angewendet. Ebenfalls offensichtlich ist die Verwendung beschreibender Variablennamen und allgemeiner Codeformatierungen, die dem zeitgenössischen Programmierstil entsprechen. In diesem Beispiel wird ein Durchschnitt über interaktiv eingegebene Daten berechnet.

program average

  ! Read in some numbers and take the average
  ! As written, if there are no data points, an average of zero is returned
  ! While this may not be desired behavior, it keeps this example simple

  implicit none

  real, dimension(:), allocatable :: points
  integer                         :: number_of_points=0
  real                            :: average_points=0., &
                                     positive_average=0., &
                                     negative_average=0.

  write (*,*) "Input number of points to average:"
  read  (*,*) number_of_points

  allocate (points(number_of_points))

  write (*,*) "Enter the points to average:"
  read  (*,*) points

  ! Take the average by summing points and dividing by number_of_points
  if (number_of_points > 0) average_points = sum(points) / number_of_points

  ! Now form average over positive and negative points only
  if (count(points > 0.) > 0) then
     positive_average = sum(points, points > 0.) / count(points > 0.)
  end if

  if (count(points < 0.) > 0) then
     negative_average = sum(points, points < 0.) / count(points < 0.)
  end if

  deallocate (points)

  ! Print result to terminal
  write (*,'(a,g12.4)') 'Average = ', average_points
  write (*,'(a,g12.4)') 'Average of positive points = ', positive_average
  write (*,'(a,g12.4)') 'Average of negative points = ', negative_average

end program average

Humor

Während derselben Sitzung des FORTRAN-Normungsausschusses, bei der der Name "FORTRAN 77" gewählt wurde, wurde ein satirisches technisches Angebot mit dem Titel "Letter O Considered Harmful " in die offizielle Distribution aufgenommen . Dieser Vorschlag soll die Verwechslung, die manchmal zwischen dem Buchstaben "O" und der Ziffer Null auftritt, angehen, indem der Buchstabe aus zulässigen Variablennamen entfernt wird. Die vorgeschlagene Methode bestand jedoch darin, den Buchstaben vollständig aus dem Zeichensatz zu entfernen (wodurch 48 als Anzahl der lexikalischen Zeichen beibehalten wurden, die der Doppelpunkt auf 49 erhöht hatte). Dies wurde insofern als vorteilhaft erachtet, als es eine strukturierte Programmierung fördern würde, indem es unmöglich machte, die berüchtigte GO TOAussage wie zuvor zu verwenden. (Schwierige FORMATAussagen würden ebenfalls eliminiert.) Es wurde festgestellt, dass dies "einige vorhandene Programme ungültig machen könnte", die meisten jedoch "wahrscheinlich sowieso nicht konform waren".

Als X3J3 debattierte, ob die minimale Anzahl von Trips für eine DO-Schleife in Fortran 77 null oder eins betragen sollte, schlug Loren Meissner eine minimale Anzahl von Trips von zwei vor – mit der Begründung (mit Augenzwinkern), dass, wenn es weniger als zwei wäre, es kein grund für eine schleife!

Als Arrays mit angenommener Länge hinzugefügt wurden, gab es Streit über das geeignete Zeichen, um obere und untere Grenzen zu trennen. In einem Kommentar, der diese Argumente untersuchte, verfasste Dr. Walt Brainerd einen Artikel mit dem Titel "Astronomy vs. Gastroenterology", weil einige Befürworter die Verwendung des Sterns oder des Sternchens ("*") vorgeschlagen hatten, während andere den Doppelpunkt (":") bevorzugten.

Variablennamen, die mit den Buchstaben I–N beginnen, haben den Standardtyp Integer, während Variablen, die mit anderen Buchstaben beginnen, den Standardwert Real haben, obwohl Programmierer die Standardwerte mit einer expliziten Deklaration überschreiben könnten. Dies führte zu dem Witz: "In FORTRAN ist GOTT REAL (es sei denn, es wird INTEGER deklariert)."

Siehe auch

Verweise

Weiterlesen

Sprachstandards
Zugehörige Normen
Sonstiges Referenzmaterial
Bücher
Artikel

Externe Links