FORTRAN
FORTRAN (für FORmula TRANSlation) ist eine Gruppe von Programmiersprachen, die insbesondere in den numerischen Wissenschaften (Mathematik, Physik, Chemie) weitverbreitet sind.
Fortran wurde in den 1950er Jahren entwickelt, und hat seitdem mehrere Standardisierungen (FORTRAN I, FORTRAN II, FORTRAN IV, FORTRAN 66, FORTRAN 77, Fortran90 und Fortran95) erlebt, welche die Sprache auch heute noch attraktiv machen. Fortran unterstützt numerische Rechenoperationen, und vermeidet manche Programmierstrukturen moderner Programmiersprachen. Dadurch werden Optimierungen durch den Compiler möglich, die in anderen Programmiersprachen nicht denkbar sind.
Insbesondere für wissenschaftliche und numerische Berechnungen existieren in FORTRAN umfangreiche Bibliotheken, die auch heute noch unentbehrlich sind.
Einige von Fortran abgeleitete Programmiersprachen sind Ratfor, F, ELF und HPF (High Performance Fortran).
Wichtige Neuerungen in Fortran 77
- Datentyp CHARACTER
Hier kann man Texte speichern. Außerdem wird dieser Datentyp für internal I/O verwendet - Daten werden statt auf ein Ausgabegerät in einen Hauptspeicherbereich geschrieben bzw. von dort gelesen. In früheren Versionen gab es für internal I/O keinen einheitlichen Standard. Daher schufen verschiedene Hersteller eigene Verfahren für internal I/O. CDC und IBM verwendeten ENCODE/DECODE, HP dagegen CALL CODE gefolgt von einer WRITE- oder READ-Anweisung. Mit FORTRAN 77 erfolgt internal I/O einfach durch WRITE / READ auf eine Variable vom Typ CHARACTER.
- Standards für Ein- und Ausgabe
Vorher fehlten Standards für Ein- und Ausgabe. Wieder schufen mehrere Hersteller eigene Lösungen. So gabe es für den Zugriff auf Direct-Access-Dateien bei IBM die DEFINE FILE Anweisung. Fortran 77 ermöglicht mit der OPEN-Anweisung den Zugriff auf verschiedene Dateitypen. Bei allen I/O-Anweisungen kann man mit IOSTAT= ERR= END= die Fehlerbedingungen oder das Dateiende abfragen und geeignet im Programm verzweigen.
- IMPLICIT NONE
Der Programmierer kann sich nun dazu zwingen, alle Variablen explizit zu deklarieren. Damit erkennt man Schreibfehler bei Variablen (alpha, alhpa) schon beim Compilieren. Dies reduziert die Fehleranfälligkeit und verkürzt evtl. die Testphase. Ohne dieses IMPLICIT NONE-Anweisung wendet Fortran (in allen Versionen) eine implizite Deklaration an: Variablen, die mit "I" - "N" beginnen sind von Typ INTEGER, alle anderen vom Typ REAL. Lediglich die CHARACTER-Variablen müssen explizit deklariert werden. Damit werden Schreibfehler evtl. erst beim Programmtest erkannt.
- IF - THEN - ELSE
In früheren Versionen musste man für solche Abfragen mindestens eine GOTO-Anweisung verwenden. Mit der neuen Syntax kann man diese Abfragen übersichtlicher formulieren und gleichzeitig die Anzahl der GOTOs reduzieren.
- PARAMETER-Anweisung
Mit der PARAMETER-Anweisung kann man symbolische Konstanten definieren. Mit solchen Konstanten lassen sich z.B. ARRAYs dimensionieren. Man kann sie auch noch anderswo im Programm verwenden. z.B. bei Schleifen (Anzahl der Schleifendurchläufe). Damit ist es möglich, dass man mit der Änderung der PARAMETER-Anweisung sofort alle betroffenen Dimensionierungen und alle anderen betroffenen Programmstellen anpasst. Symbolische Konstanten haben gegenüber "normalen" Variablen den Vorteil, dass sie nicht versehentlich überschrieben werden können - eine Anweisung <symbolische Konstante> = n + 1 weist der Compiler zurück, außer wenn "n" auch eine symbolische Konstante ist.
Insbesondere die Standardisierung im Bereich Ein-/Ausgabe und bei internem I/O erleichtern die Portierung auf eine andere Plattform erheblich.
Schwächen von Fortran
Gegenüber anderen Programmiersprachen, z.B. Pascal, weist Fortran einige Schwächen auf. Der Programmierer hat mehr Möglichkeiten, Fehler zu produzieren. Die Folge sind verlängerte Testphasen und häufig fehlerhafte Programme in der Produktionsphase.
- Implizite Deklaration
Der Programmierer hat die Möglichkeit, alle Variablen implizit deklarieren zu lassen. (s. Punkt "IMPLICIT NONE" im Abschnitt "Wichtige Neuerungen in Fortran 77" ). Zwar erspart sich der Programmerer damit die explizite Deklaration, also einige Schreibarbeit, aber damit werden Schreibfehler in Variablennamen evtl. erst in der Testphase erkannt. Pascal erzwingt eine explizite Deklaration. Schreibfehler werden sofort beim Compilieren gemeldet.
- ungeprüfter Aufruf von Unterprogrammen
Fortran prüft nicht, ob ein Unterprogramm formal korrekt aufgerufen wird. Es wird weder die Anzahl der übergebenen Variablen noch deren Datentyp auf Übereinstimmungen mit dem aufgerufenen Unterprogramm verglichen. Beispielsweise kann man das Unterprogramm SUBROUTINE test (a, b, n) aufrufen mit CALL test (x, 9). In der Regel handelt es sich bei solchen Aufrufen um ungewollte Fehler, die frühestens in der Testphase gefunden werden können. Pascal dagegen prüft die Aufrufe deer Unterprogramme. Ist ein Pascalprogramm erfolgreich compiliert, dann weiss man sicher, dass alle Unterprogrammaufrufe formal korrekt sind.
- Überschreiten von Feldgrenzen werden zugelassen
Fortran verhindert nicht, dass ein Feld über seine deklarierte Grenze hinaus beschrieben wird. Dabei kann z.B. vorhandener Programmcode überschrieben werden. Die Folgen sind nicht vorhersehbar, der Fehler ist oft schwer zu finden, weil das Programm zur Laufzeit an einer ganz anderen Stelle abbrechen kann.
Literatur zur Geschichte von Fortran
- Annals of History of Computing, 6, 1, Jan. 1984.
- S. Rosen (ed.), Programming Systems and Languages, McGraw Hill, 1967.
- R.L. Wexelblat (ed.), History of Programmining Languages, Academic Press, 1981, S. 25-74.