Fortran - Fortran
Paradigma | Multiparadigma : strukturiert , zwingend ( prozedural , objektorientiert ), generisch , Array |
---|---|
Entworfen von | John Backus |
Entwickler | John Backus und IBM |
Erstmals erschienen | 1957 |
Stabile Version | Fortran 2018 (ISO/IEC 1539-1:2018) / 28. November 2018
|
Schreibdisziplin | stark , statisch , manifest |
Dateinamenerweiterungen |
.f , .for ,.f90
|
Webseite | fortran-lang |
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 |
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:
-
DIMENSION
undEQUIVALENCE
Aussagen - 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 -
IF
Anweisungen zum Prüfen von Ausnahmen (ACCUMULATOR OVERFLOW
,QUOTIENT OVERFLOW
, undDIVIDE CHECK
); undIF
Anweisungen zur Manipulation von Sensorschaltern und Sensorlichtern -
GO TO
, berechnetGO 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 IF
Anweisung 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 FREQUENCY
Anweisung 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 FREQUENCY
Anweisung 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
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 X
ein 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,101
10101 DO 101 I = 1, 101
101010DO101I=1.101
10101 DO101I = 1.101
DO101I
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
undRETURN
COMMON
In den nächsten Jahren würde FORTRAN II auch die Unterstützung für die Datentypen DOUBLE PRECISION
und 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
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 LOGICAL
Datentyp , 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
, undBLOCK DATA
Programmeinheiten -
INTEGER
,REAL
,DOUBLE PRECISION
,COMPLEX
, undLOGICAL
Datentypen -
COMMON
,DIMENSION
, undEQUIVALENCE
Aussagen -
DATA
Anweisung zur Angabe von Anfangswerten -
Intrinsische und
EXTERNAL
(zB Bibliotheks-) Funktionen - Zuweisungsanweisung
-
GO TO
, berechnetGO TO
, zugewiesenGO TO
undASSIGN
Anweisungen - Logische
IF
und arithmetische (Drei-Wege-)IF
Anweisungen -
DO
Schleifenanweisung -
READ
,WRITE
,BACKSPACE
,REWIND
, undENDFILE
Anweisungen für sequentielle I/O -
FORMAT
Anweisung und zugewiesenes Format -
CALL
,RETURN
,PAUSE
, undSTOP
Aussagen -
Hollerith-Konstanten in
DATA
undFORMAT
-Anweisungen und als Argumente für Prozeduren - Bezeichner mit bis zu sechs Zeichen Länge
- Kommentarzeilen
-
END
Leitung
FORTRAN 77
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
IF
undEND IF
Anweisungen, mit optionalenELSE
undELSE IF
Klauseln, 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
, undINQUIRE
-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
SQRT
akzeptiert auch Argumente anderer Typen, wieCOMPLEX
oderREAL*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 z
GREET = 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.
-
DO WHILE
,EXIT
,CYCLE
, undEND DO
Aussagen -
INCLUDE
Stellungnahme -
IMPLICIT NONE
Variante derIMPLICIT
Aussage - Bit - Manipulations intrinsische Funktionen, basierend auf ähnlichen Funktionen, die in Industrie Real-Time Fortran (ANSI / ISA S61.1 (1976))
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.
- ganze, partielle und maskierte Array-Zuweisungsanweisungen und Array-Ausdrücke, wie z
-
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
ALLOCATABLE
Attribut und dieALLOCATE
und-DEALLOCATE
Anweisungen -
POINTER
Attribut, Zeigerzuweisung undNULLIFY
Anweisung, um die Erstellung und Manipulation dynamischer Datenstrukturen zu erleichtern - Strukturierte Schleifenkonstrukte mit einer
END DO
Anweisung zum Beenden der SchleifeEXIT
undCYCLE
Anweisungen zumDO
geordneten Beenden normaler Schleifeniterationen -
SELECT
. . .CASE
Konstrukt 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.
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:
-
FORALL
und verschachtelteWHERE
Konstrukte zur Unterstützung der Vektorisierung - Benutzerdefiniert
PURE
undELEMENTAL
Verfahren - 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
ALLOCATABLE
die Zuordnung von Arrays automatisch aufgehoben wird, wenn sie den Gültigkeitsbereich verlassen.
Eine Reihe von intrinsischen Funktionen wurde erweitert (zum Beispiel dim
wurde dem maxloc
intrinsischen ein Argument hinzugefügt ).
Mehrere Funktionen, die in Fortran 90 als "veraltet" bezeichnet wurden, wurden aus Fortran 95 entfernt:
-
DO
Anweisungen mitREAL
undDOUBLE PRECISION
Indexvariablen END IF
Von außerhalb des Blocks zu einer Anweisung verzweigen-
PAUSE
Stellungnahme -
ASSIGN
und zugewieseneGO TO
Anweisung 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 ALLOCATABLE
Arrays, bevor vollständig Fortran 2003-kompatible Fortran-Compiler verfügbar waren. Solche Verwendungen umfassen ALLOCATABLE
Arrays als abgeleitete Typkomponenten, in Dummy-Argumentlisten von Prozeduren und als Rückgabewerte von Funktionen. ( ALLOCATABLE
Arrays sind POINTER
-basierten Arrays vorzuziehen, da ALLOCATABLE
von 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,
VOLATILE
Attribut , 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
FLUSH
Anweisung, 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".
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 EQUIVALENCE
Anweisung , 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 DO
Schleifen 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 TO
Aussage wie zuvor zu verwenden. (Schwierige FORMAT
Aussagen 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
- f2c
- FORMAC
- Liste der Fortran-Compiler
- Liste der numerischen Bibliotheken von Fortran
- Liste der Programmiersprachen
- Matrixdarstellung
- Reihen-Großauftrag
- Spaghetti-Code
Verweise
Weiterlesen
- Sprachstandards
- Ansi x3.9-1966. USA-Standard FORTRAN (PDF) . American National Standards Institute. Archiviert vom Original (PDF) am 15. Mai 2011 . Abgerufen am 5. Mai 2010 . Informell bekannt als FORTRAN 66.
- Ansi x3.9-1978. American National Standard – Programmiersprache FORTRAN . American National Standards Institute. Archiviert vom Original am 29. Oktober 2013 . Abgerufen am 11. Dezember 2007 .Auch bekannt als ISO 1539–1980, informell bekannt als FORTRAN 77.
- ANSI X3.198-1992 (R1997) / ISO/IEC 1539:1991. American National Standard – Programmiersprache Fortran Extended . Amerikanisches Nationales Normungsinstitut / ISO/IEC. Archiviert vom Original am 1. Mai 2002. Informell bekannt als Fortran 90.
- ISO/IEC 1539-1: 1997. Informationstechnik – Programmiersprachen – Fortran – Teil 1: Basissprache (PDF) . Archiviert vom Original (PDF) am 18. August 2011 . Abgerufen am 13. Dezember 2007 .Informell bekannt als Fortran 95. Dieser Standard besteht aus zwei weiteren Teilen. Teil 1 wurde offiziell von ANSI angenommen.
- ISO/IEC 1539-1:2004. Informationstechnik – Programmiersprachen – Fortran – Teil 1: Basissprache (PDF) . Informell bekannt als Fortran 2003.
- ISO/IEC 1539-1:2010 (Endgültiger internationaler Standardentwurf). Informationstechnik – Programmiersprachen – Fortran – Teil 1: Basissprache (PDF) . Informell bekannt als Fortran 2008.
- Zugehörige Normen
- Kneis, Wilfried (Oktober 1981). "Entwurf eines industriellen Echtzeit-Fortran-Standards" . ACM SIGPLAN-Mitteilungen . 16 (7): 45–60. doi : 10.1145/947864.947868 . ISSN 0362-1340 . S2CID 8662381 .
- ISO 8651-1: 1988 Informationsverarbeitungssysteme - Computergrafik - Graphical Kernel System (GKS) Sprachbindungen - Teil 1: FORTRAN . Genf, Schweiz: ISO . 1988.
- Sonstiges Referenzmaterial
- ECMA-Standard zu FORTRAN (PDF) . Verband der europäischen Computerhersteller. April 1965 . Abgerufen am 17. November 2014 .
- FORTRAN 77 4.0 Referenzhandbuch (PDF) . Sun Microsystems, Inc. 1995. Archiviert vom Original (PDF) am 5. Januar 2012 . Abgerufen am 17. November 2014 .
- "FORTRAN-Kodierungsformular" (PDF) . IBM . Archiviert vom Original (PDF) am 8. Juni 2015 . Abgerufen am 17. November 2014 .
- IBM System/360 und System/370 Fortran IV-Sprache (PDF) . Internationale Geschäftsmaschinen . Mai 1974. Archiviert vom Original (PDF) am 6. April 2011 . Abgerufen am 17. November 2014 .
- Görz, Michael (2014). "Moderne Fortran-Referenzkarte" (PDF) . Abgerufen am 14. Dezember 2014 .
- Bücher
- Adams, Jeanne C. ; Brainerd, Walter S.; Hendrickson, Richard A.; Maine, Richard E.; Martin, Jeanne T.; Smith, Brian T. (2009). Das Fortran 2003-Handbuch (1. Aufl.). Springer . ISBN 978-1-84628-378-9.
- Rütsch, Gregory; Fatica, Massimiliano (2013). CUDA Fortran für Wissenschaftler und Ingenieure (1. Aufl.). Sonst . P. 338. ISBN 9780124169708.
- Akin, Hrsg.: "Objektorientierte Programmierung über Fortran 90/95", Cambridge Univ Press, ISBN 978-0521524087 , (Feb. 2003).
- Brainerd, Walter S., Goldberg, Charles H., Adams, Jeanne C.: "Programmer's Guide to Fortran 90" (3. Aufl.), Springer, (1996).
- Brainerd, Walter S.: "Guide to Fortran 2008 Programming" (2. Aufl.), Springer, ISBN 978-1447167587 , (Sep. 2015).
- Chapman, Stephen J. (2018). Fortran für Wissenschaftler und Ingenieure (vierte Aufl.). New York : McGraw-Hill-Ausbildung . S. xxiv + 1024. ISBN 978-0-07-338589-1.
- Chivers, Ian; Sleightholme, Jane (2018). Einführung in die Programmierung mit Fortran (4. Aufl.). Springer. ISBN 978-3-319-75501-4.
- Clerman, Norman S., Spector, Walter: "Modern Fortran: Style and Usage", Cambridge University Press, ISBN 978-0521514538 , (Feb. 2012).
- Curcic, Mailand: "Modern Fortran: Building effiziente parallele Anwendungen", Manning Publications, ISBN 978-1617295287 (Nov. 2020).
- Ellis, TMR; Phillips, Ivor R.; Lahey, Thomas M. (1994). Fortran 90-Programmierung (1. Aufl.). Addison Wesley. ISBN 978-0-201-54446-6.
- Etter, DM (1990). Strukturiertes FORTRAN 77 für Ingenieure und Wissenschaftler (3. Aufl.). The Benjamin/Cummings Publishing Company, Inc. ISBN 978-0-8053-0051-2.
- Kerrigan, JF (1993). Migration zu Fortran 90 (1. Aufl.). O'Reilly & Associates, Inc. ISBN 1-56592-049-X.
- Kupferschmid, Michael (2002). Klassisches Fortran: Programmierung für technische und wissenschaftliche Anwendungen . Marcel Dekker (CRC-Presse). ISBN 978-0-8247-0802-3.
- Lorenzo, Mark Jones (2019). Die Maschine abstrahieren: Die Geschichte der Programmiersprache FORTRAN (Formula TRANslation) . Unabhängig veröffentlicht. ISBN 978-1082395949.
- Loukides, Mike (1990). Unix für FORTRAN-Programmierer . Sebastopol, CA 95472: O'Reilly & Associates, Inc. ISBN 0-937175-51-X.CS1 Wartung: Standort ( Link )
- McCracken, Daniel D. (1961). Eine Anleitung zur FORTRAN-Programmierung . New York: Wiley. LCCN 61016618 .
- Metcalf, Michael; Reid, John; Cohen, Malcolm: "Modern Fortran Explained: Incorporating Fortran 2018" (5. Aufl.), Oxford Univ. Presse, ISBN 978-0198811886 , (Nov. 2018).
- Nyhoff, Larry; Sanford Leestma (1995). FORTRAN 77 für Ingenieure und Wissenschaftler mit einer Einführung in Fortran 90 (4. Aufl.). Lehrlingssaal . ISBN 978-0-13-363003-9.
- Seite, Clive G. (1988). Leitfaden für professionelle Programmierer zu Fortran77 ( Ausgabe vom 7. Juni 2005). London: Pitman. ISBN 978-0-273-02856-7. Abgerufen am 4. Mai 2010 .
- Presse, William H. (1996). Numerische Rezepte in Fortran 90: Die Kunst des parallelen wissenschaftlichen Rechnens . Cambridge, Großbritannien: Cambridge University Press. ISBN 978-0-521-57439-6.
- Sleighthome, Jane; Chivers, Ian David (1990). Interaktives Fortran 77: Ein praktischer Ansatz . Computer und ihre Anwendungen (2. Aufl.). Chichester: E. Horwood. ISBN 978-0-13-466764-5. Archiviert vom Original am 12. März 2014 . Abgerufen am 12. März 2014 .
- Artikel
- Allen, FE (September 1981). „Eine Geschichte der Sprachprozessortechnologie in IBM“. IBM-Journal für Forschung und Entwicklung . 25 (5): 535–548. doi : 10.1147/rd.255.0535 . S2CID 14149353 .
- JW Backus ; RJ Beeber; S. Beste; R. Goldberg; LM Haibt ; HL Herrick; RA Nelson; D. Sayre ; PB Sheridan; H. Stern; L. Ziller; RA Hughes; R. Nutt (Februar 1957). Das automatische Kodierungssystem von FORTRAN (PDF) . Gemeinsame Computerkonferenz des Westens. S. 188–198. doi : 10.1145/1455567.1455599 .
- Chivers, Ian D.; Sleightholme, Jane (2013). "Compilerunterstützung für die Fortran 2003 & 2008 Standards" . ACM SIGPLAN Fortran-Forum . 28 (1): 26–28. doi : 10.1145/1520752.1520755 . ISSN 1061-7264 . S2CID 26200779 . Archiviert vom Original am 16. Mai 2008.
- Metcalf, Michael (2011). "Die sieben Zeitalter von Fortran" . Zeitschrift für Informatik und Technologie . 11 (1): 1–8.
- Pigott, Diarmuid (2006). "FORTRAN – Backus et al. High-Level-Compiler (Computersprache)" . Die Enzyklopädie der Computersprachen . Murdoch-Universität . Archiviert vom Original am 8. Oktober 2009 . Abgerufen am 5. Mai 2010 .
- Roberts, Mark L.; Griffiths, Peter D. (1985). "Entwurfsüberlegungen für IBM Personal Computer Professional FORTRAN, an Optimizing Compiler" (PDF) . IBM Systems Journal . 24 (1): 49–60. doi : 10.1147/sj.241.0049 .
Externe Links
- ISO/IEC JTC1/SC22/WG5 – die offizielle Heimat der Fortran-Standards
- Fortran-Standarddokumente —GFortran-Standards
- fortran-lang.org (2020).
- Geschichte von FORTRAN und Fortran II — Computer History Museum
- Valmer Norrod et al.: Ein Selbststudienkurs in FORTRAN-Programmierung – Band I – Lehrbuch , Computer Science Corporation El Segundo, Kalifornien (April 1970). NASA (N70-25287).
- Valmer Norrod, Sheldom Blecher und Martha Horton: Ein Selbststudienkurs in FORTRAN-Programmierung – Band II – Arbeitsbuch , NASA CR-1478 (April 1970), NASA (N70-25288).