Fortran lub FORTRAN (
ang.
FORmula TRANslator) to
język programowania
stworzony w
latach 50.
i nadal będący w użyciu. Był to niegdyś
język proceduralny
, obecnie umożliwia również korzystanie ze
struktur
(Fortran 90/95), a jego głównym zastosowaniem są obliczenia naukowo-inżynierskie (w szczególności obliczenia
numeryczne
).
Z pierwszych wersji języka pochodzi zasada braku rozróżniania małych i wielkich liter w
słowach kluczowych
języka oraz używanych zmiennych, a także bogate zasady tworzenia formatów zapisywanych i drukowanych danych.
Fortran dysponuje wielką liczbą
bibliotek
, które pozwalają rozwiązać praktycznie każde zadanie numeryczne. Najważniejsze przyczyny, z powodu których Fortran jest wykorzystywany i rozwijany do dziś, to: szybkość obliczeń oraz wysoka wydajność kodu generowanego przez
kompilatory
Fortranu, wynikająca m.in. z jego długiej obecności na rynku programistycznym, znakomita skalowalność i
przenośność oprogramowania
(pomiędzy różnymi
platformami sprzętowymi
i
systemami operacyjnymi
), a także dostępność bibliotek dla programowania wieloprocesorowego i
równoległego
. Obliczenia
aerodynamiczne
,
wytrzymałościowe
i
cieplne
obecnie często prowadzone są z użyciem tego języka.
Do niedawna te zalety były okupione brakiem dobrych metod wizualizacji czy niskopoziomowej komunikacji z systemem operacyjnym, gdyż te zagadnienia są pominięte w kolejnych standardach języka (aż do Fortranu 95 włącznie). Obecnie producenci kompilatorów (zwłaszcza niezależni), wzbogacają je o możliwość stosowania grafiki celem umożliwienia wizualizacji wyników obliczeń (wykresy, wizualizacja tablic wielowymiarowych) poprzez dostarczanie odpowiednich bibliotek.
Historia i standardy
Pierwszy
kompilator
Fortranu stworzył zespół
Johna Backusa
, który w latach
1954
-
1957
pracował dla
IBM
. Kompilator ten był pierwszym w historii kompilatorem
języka wysokiego poziomu
. Został starannie
zoptymalizowany
, ponieważ autorzy obawiali się, że nikt nie będzie go używał, jeśli szybkość programów nie będzie porównywalna z szybkością programów napisanych w
asemblerze
.
Pierwsza standaryzacja nastąpiła w
1960
roku, kiedy opisano pierwszy
standard
języka znany jako Fortran IV. Kolejnym standardem był Fortran 66. Standard ten był zbyt ubogi i implementacje musiały zawierać wiele rozszerzeń. W latach siedemdziesiątych American National Standard Institute (
ANSI
) opracowała kolejny standard nazwany Fortran 77, który w roku
1980
stał się standardem międzynarodowym. Jego struktura przystosowana jest do używanych wówczas powszechnie
kart perforowanych
, ale zawierała elementy
programowania strukturalnego
. W Polsce bardzo popularna była odmiana Fortranu na maszyny
ICL
/
Odra
(FORTRAN 1900;
kompilator
taśmowy #XFAM oraz dyskowe #XFAT i #XFAE z
konsolidatorem
#XPCK), a także Watfor 77, Lahey 77 i MS Fortran na
PC
czy Fortran 80 dla 8-
bitowych
komputerów z systemem
CP/M
-80. W praktyce większość tych kompilatorów miała wiele rozszerzeń, które dopiero po latach weszły do kolejnego standardu (
struktury rekordowe
,
alokowalne
tablice
, więcej instrukcji pozwalających na programowanie strukturalne itp.). Następcą Fortranu 77 stał się Fortran 90. Standard ma całkowicie zmienioną składnie dostosowaną do współczesnych
języków programowania
, przykładowo Fortran 90 nie wymusza już na użytkowniku stosowania
etykiet
i instrukcji
goto
. Kolejnym standardem jest Fortran 95, zmiany w stosunku do poprzedniej wersji są niewielkie. Pomimo wprowadzenia nowych standardów, Fortran 77 jest nadal w użyciu (głównie przez starszych programistów przyzwyczajonych do tej wersji), co uwzględniają producenci praktycznie wszystkich kompilatorów – na przykład kompilator Compaq Visual Fortran (wcześniej Digital Visual Fortran) kompiluje programy napisane w standardach 66/77/90/95. Najnowszy standard języka nosi nazwę Fortran 2003.
FORTRAN czy Fortran
Należy wspomnieć o tym, że obecnie stosujemy pisownię nazwy języka Fortran. Poprzednie standardy języka aż do wersji 66 włącznie oznaczano jako FORTRAN.
Podstawy programowania
Operatory logiczne
operacja | nazwa |
---|
.NOT. | negacja |
.AND. | koniunkcja |
.OR. | alternatywa |
.EQV. | równoważność |
.NEQV. | zaprzeczenie równoważności |
Operatory działań na liczbach
operator | opis |
---|
.LT. | ang. less than - inaczej < |
.LE. | ang. less equal - inaczej <= |
.GT. | ang. greater than - inaczej > |
.GE. | ang. greater equal - inaczej >= |
.EQ. | ang. equal - inaczej == (lub = w Pascalu) |
.NE. | ang. not equal - inaczej != (lub <> w Pascalu) |
Operatory arytmatyczne
operator | działanie |
---|
+ | dodawanie |
- | odejmowanie |
* | mnożenie |
/ | dzielenie |
** | potęgowanie |
Przykłady kodu
Ciekawostka - najkrótszy program
Warto zwrócić uwagę, że kod ten jest konieczny w każdym programie (jako informacja o końcu bloku głównego).
Typowy program - "hello, world"
Kod dla F77:
PROGRAM HELLO WRITE (*,*) 'hello, world' END
Deklaracje zmiennych i "Implicit none"
Standard
nie wymusza stosowania
deklaracji
zmiennych, wówczas niezadeklarowane zmienne o
nazwach
rozpoczynających się od liter A-H i O-Z (nie są rozróżniane małe i duże
litery
) mają
typ
real (
rzeczywisty
,
zmiennoprzecinkowy
o precyzji zależnej od
implementacji
i opcji) a
zmienne
rozpoczynające się od I-N są typu integer (
liczby całkowite
o zakresie zależnym od implementacji i opcji); jest to równoważne deklaracjom "implicit real (A-H,O-Z)" i "implicit integer (I-N)".
Wyrażenie
"implicit none" zastosowane na początku programu, zapobiega wykorzystaniu niezadeklarowanych zmiennych. Przykładowy poprawny kod programu liczącego sumę dwóch liczb rzeczywistych (podwójnej precyzji - real(8)), w języku F95:
IMPLICIT NONEREAL(8) :: a,bREAD *,a,bPRINT *,'wynik',a+bEND
w przypadku kodu:
IMPLICIT NONEREAL(8) :: aREAD *,a,bPRINT *,'wynik',a+bEND
kompilator wyświetla błąd o niezadeklarowaniu zmiennej 'b' wykorzystywanej w programie.
Fakt domyślnej deklaracji zmiennych niejednokrotnie powodował kłopoty programistów, nie mogących odnaleźć źródła nieoczekiwanych kaprysów pozornie poprawnych programów. Np. nagłówek pętli wykonywanej stokrotnie dla zmiennej I
mógłby wyglądać następująco:
Omyłkowe umieszczenie kropki zamiast przecinka nie czyni tej instrukcji niepoprawną:
Kompilator uzna ten zapis nie za otwarcie pętli, a za domyślną deklarację zmiennej DO100I
typu rzeczywistego (nazwa zaczyna się bowiem od litery D) i przypisze jej wartość 1.1
, co w oczywisty sposób zmieni zamierzony przepływ sterowania.
Kompilatory języka Fortran
Kompilatory języka Fortran 90/95
-
GNU Fortran 95
-
wolny
, jeden z podprojektów
GCC
-
G95 Project
(
Linux
) - darmowy
-
Edi
(
Windows
) - darmowy pakiet programistyczny dla Windows, pod warunkiem zarejestrowania
- VAST/f90 (Linux) - darmowy kompilator dla użytkowników indywidualnych (a właściwie translator F77 do F90)
-
Intel Fortran Compiler
(
Linux
,
Windows
) - w wersji pod Linuksa darmowy dla niekomercyjnych zastosowań
- Absoft Pro Fortran (
Linux
,
Windows
,
Mac OS
,
PowerPC
) - płatny
- Compaq Visual Fortran (Windows, Linux/
Unix
/Open
VMS
Alpha, OpenVMS VAX) - płatny, ale już nie produkowany (następcą jest Fortran rozwijany przez firmę Intel)
- Lahey/Fujitsu Fortran (Windows, Linux,
SPARC
Solaris
) - komercyjny
- NAGWare f95 (
Linux
, Mac OS, SPARC Solaris,
IRIX
,
SunOS
,
OSF
/1,
PA-RISC
) - komercyjny
- NA Software FortranPlus (
Linux
,
Windows
) - płatny
- Portland Group PGHPF Workstation (
Linux
,
Windows
) - płatny
- Salford FTN95 (Windows) - darmowy do zastosowań niekomercyjnych (od roku 2005)
- Open64
[1]
- darmowy
Kompilatory języka Fortran 77
Bibliografia
- Ryszard K. Kott, Krzysztof Walczak. Programowanie w języku Fortran 77,
Wydawnictwa Naukowo-Techniczne
,
Warszawa
1991
,
- Janna Jonkisz, Jan Makuch, Stanisław Starzak, Programowanie w językach Algol 60 i Fortran 1900, Wydawnictwo Politechniki Łódzkiej,
Łódź
1982
,
Skrypty
dla
szkół wyższych
,
Politechnika Łódzka
, Ośrodek Elektronicznej Techniki Obliczeniowej
Zobacz też
-
SAKO
- "Polski Fortran"
-
Photran
- środowisko programistyczne
Linki zewnętrzne