Sunday 22 March 2009

FORTRAN

10 IF (.NOT.(ΕΧΩ ΔΙΑΒΑΣΕΙ ΑΥΤΟ)) ΤΗΕΝ
READ IT
ELSE
GOTO 10
END IF

Κάπως έτσι φαίνεται ο κώδικας στην τυποποίηση της FORTRAN 77. Όλα κεφαλαία, καθόλου identation, πολλά goto και άλλα πολλά που κάνουν τον κώδικα δυσανάγνωστο. Αλλά η αρχαιότερη γλώσσα υψηλού επιπέδου έχει εξελιχθεί αρκετά. Υποστηρίζει πολλά χαρακτηριστικά του αντικειμενοστραφή προγραμματισμού με τα modules, έχει δικούς της δείκτες (pointers), αλλά και συμβατούς με τη C δείκτες (Cray pointers οι οποίοι όμως δεν περιλαμβάνονται στην τυποποίηση). Το πλεονέκτημά της είναι η ταχύτητα εκτέλεσης και ότι υπάρχει μια απειρία από προγράμματα που μπορεί να βρει κανείς σχετικά με επιστημονικούς υπολογισμούς. Για παράδειγμα το scipy της python περιλαμβάνει πολλούς wrapper σε προγράμματα FORTRAN (από εδώ www.netlib.org) για διαφορικές εξισώσεις, μετασχηματισμούς Fourier κ.α.. Φυσικά η FORTRAN υποστηρίζει και τις δύο μορφές παραλληλοποίησης, openmp και mpi.

Σίγουρα στα γραφικά υστερεί. Aλλά για αυτό υπάρχει η C ή η python. H επικοινωνία με τη C είναι απλή (αν ξέρεις πως γίνεται δηλαδή), με παρόμοιο τρόπο γίνεται και με τη C++, αν και χρειάζεται και δεύτερο wrapper από C σε C++ για να μη χαθεί η αντικειμενοστρέφεια του κώδικα, με την python μπορεί να χρησιμοποιηθεί το πρόγραμμα f2py που γράφει ένα wrapper από τον FORTRAN κώδικα.

Θα μου πείτε ποιος χρησιμοποιεί ακόμη FORTRAN όταν υπάρχει η python, η java, η C++ και τόσες άλλες γλώσσες προγραμματισμού; Πολλοί. Η πλειονότητα των προγραμμάτων στους υπερυπολογιστές (high performance computing) και σμήνη υπολογιστών (clusters) είναι προγράμματα FORTRAN. Δεν πρόκειται να δείτε κανένα πρόγραμμα java.

Προγραμματίζοντας στη FORTRAN, όπως και στη C, μαθαίνει κανείς διαχείριση μνήμης. Το σίγουρο είναι ότι θα ψάχνεται με τις ώρες ένα bug που θα βγάζει segmentation fault ή bus error. Τα άλλα είναι σχετικά εύκολα, μιας και τα βρίσκει και o compiler.

Μετά θα μου πείτε, μα αφού υπάρχει το octave ή το scilab ή τα αντίστοιχα εμπορικά; Ναι, και πάλι το octave χρησιμοποιει συναρτήσεις FORTRAN για την επίλυση εξισώσεων. Φυσικά είναι πολύ πιο εύκολο να προγραμματίσεις κάτι στο octave, αλλά αν ένας πίνακας είναι μεγάλος, της τάξης των 1.000.000 στοιχείων, τότε θα πρέπει να περιμένετε μέρες.

Η FORTRAN υποστηρίζει και system call, δηλαδή μπορείτε να καλέσετε άλλα προγράμματα μέσω FORTRAN. Καθόλου καλή προγραμματιστική τεχνική αλλά γίνεται.