It’s Free Crunch Time http://www.g95.org
Kl´ıˇcov´e rysy G95 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •
Volnˇe ˇsiˇriteln´ y pˇrekladaˇc jazyka Fortran 95. Souˇcasn´ a (September 2006) verze g95 je 0.91. GNU Open Source, GPL licence. Bˇeh pˇreloˇzen´ ych program˚ u lze modifikovat pomoc´ı mnoha promˇenn´ ych prostˇred´ı, dokumentovan´ ych v samotn´em pˇreloˇzen´em programu. TR15581– Alokovateln´e argumenty procedur, komponenty struktur a n´avratov´e hodnoty funkc´ı. F2003 procedur´ aln´ı ukazatele, konstruktory struktur, interoperabilita s jazykem C F2003 vestavˇen´e procedury a moduly. Atribut VALUE pro pˇred´ av´ an´ı argument˚ u procedur hodnotou. Volba COMMA v pˇr´ıkazech OPEN, READ, a WRITE pro desetinnou ˇc´arku. Hranat´e z´ avorky [ ] jako alternativa k (/ /) pro konstruktory pol´ı. Pˇr´ıkaz IMPORT, pouˇziteln´ y v INTERFACE pro pˇr´ıstup k vnˇejˇs´ım deklarac´ım. MIN() a MAX() pro znakov´e i numerick´e typy. OPEN pro bin´ arn´ı proudov´e I/O. Zpˇetn´ a kompatibilita s g77 Application Binary Interface (ABI). Defaultn´ı integer 32 nebo 64 bit˚ u. Procedura SYSTEM() pro pˇr´ıstup k pˇr´ıkazov´e ˇr´adce. Tabul´ atory v zdrojov´em k´ odu jsou povoleny. Volba pro symbolick´ a jm´ena s $. From´ at ˇreˇzˇezc˚ u Hollerith. Datov´ y typ DOUBLE COMPLEX. Promˇenn´ a d´elka pojmenovan´ ych COMMON blok˚ u. M´ıch´ an´ı ˇretˇezcov´ ych a ˇc´ıseln´ ych typ˚ u v COMMON a EQUIVALENCE. INTEGER kind = 1, 2, 4, 8. LOGICAL kind = 1, 2, 4, 8. REAL kind = 4, 8. REAL(KIND=10) pro x86-kompatibiln´ı syst´emy. 19 desetinn´ ych ˇc´ıslic, rozsah do 10±4931 . Write s hvˇezdiˇckov´ ym form´ atem pouˇz´ıv´a minim´aln´ı poˇcet ˇc´ıslic potˇrebn´ y pro jednoznaˇcn´e rozliˇsen´ı ˇc´ısel. VAX ladic´ı (D) ˇr´ adky. Volba pro ˇretˇezcov´e konstanty v C-stylu (napˇr. ’hello\nworld’). I/O deskriptory \ a $. VAX syst´emov´e vestavˇen´e procedury (SECNDS atd.) Unixov´e funkce (getenv, etime, stat, etc.) Detekce nekonformn´ıch nebo nealokovateln´ ych pol´ı za bˇehu - viz Table IV na: http://ftp.aset.psu.edu/pub/ger/fortran/test/results.txt Detekce memory leaks - viz Table V na: http://ftp.aset.psu.edu/pub/ger/fortran/test/results.txt Trasov´ an´ı bˇehov´ ych chyb. Chytr´ a kompilace br´ an´ıc´ı ˇretˇezov´e rekompilaci. Volba pro F kompatibilitu. Viz http://www.fortran.com/F. G95 lze pˇreloˇzit jako pˇrekladaˇc F. suspend/resume schopnost program˚ u pˇreloˇzen´ ych pod x86/Linux. Zastaral´e re´ aln´e indexy DO cykl˚ u NEJSOU podporov´any. Typick´ a je rychl´ a odezva na zpr´ avy o chyb´ach. Lze pˇreloˇzit s GCC 4.0.3 a 4.1.1. Ke staˇzen´ı pro Linux/x86, PowerPC, 64-bit Opteron, 64-bit Itanium, 64-bit Alpha. Ke staˇzen´ı pro Windows/Cygwin, MinGW, & Interix. Ke staˇzen´ı pro OSX on Power Mac G4, x86-OSX. Ke staˇzen´ı pro FreeBSD na x86, HP-UX 11, Sparc-Solaris, x86-Solaris, OpenBSD, NetBSD, AIX, IRIX, Tru64 UNIX na Alpha. Tak´e “Fink” verze. Stabiln´ı a v´ yvojov´e bin´ arky pro vˇetˇsinu platforem ke staˇzen´ı na http://ftp.g95.org.
1
Sem tam potk´ am nˇekoho s k´ ym jsem si mailoval o g95. Nejˇcastˇeji hovoˇr´ı o tom, jak v´ yjimeˇcnou pr´ aci dˇel´ am zcela s´ am. Vˇzdycky se smˇeju a poukazuji na to, ˇze jsem ji nikdy nedˇelal s´am. S g95 aktivnˇe pomohlo tak okolo tis´ıce lid´ı. Nˇekteˇr´ı si mysl´ı, ˇze kdo p´ıˇse k´od, dˇel´a vˇsechnu pr´aci, ale ve skuteˇcnosti lid´e, kteˇr´ı izoluj´ı chyby v pˇrekladaˇci na tucet ˇr´ adk˚ u, odv´ adˇej´ı extr´emnˇe d˚ uleˇzitou pr´aci, kter´a se ˇcasto pˇrehl´ıˇz´ı. Programov´ an´ı nˇeˇceho tak sloˇzit´eho jako je modern´ı pˇrekladaˇc Fortranu nen´ı pr´ace, kterou byste mohli dˇelat sami, vˇeˇrte mi. Jako mnoho jin´eho, g95 se zrodilo z frustrace. J´a psal k´od pro svou doktorskou pr´aci ve Fortranu 77 s pomoc´ı g77. Fortran je u ´ˇzasn´ y jazyk pro numerick´e v´ ypoˇcty - rychl´ y a neuˇcesan´ y pro ty, kdo se zaj´ımaj´ı v´ıce o v´ ysledky neˇz psan´ı program˚ u. M˚ uj k´ od obsahoval hromadu sofistikovan´ ych datov´ ych struktur - spojov´e seznamy, octree stromy, ˇr´ıdk´e matice, tvoˇren´ı s´ıtˇe pro koneˇcn´e prvky, ˇreˇsen´ı Poissonovy rovnice, multip´ olov´e rozvoje, minimalizace metodou sdruˇzen´ ych gradient˚ u a spoustu v´ ypoˇcetn´ı geometrie. Protoˇze jsem pouˇz´ıval Fotran 77, k´ od byl komplikovan´ y a ˇslo by jej hodnˇe vylepˇsit dynamickou alokac´ı a strukturami. A moje doktorsk´ a pr´ ace byla minulost´ı a j´ a potˇreboval novou v´ yzvu. Kromˇe pohodl´ı pokroˇcil´ ych jazykov´ ych kosntrukc´ı mˇe hodnˇe inspirovala pr´ace Billa Kahana. Po pˇreˇcten´ı mnoha z jeho ˇcl´ ank˚ u jsem z´ıskal n´ azor, ˇze aˇckoli jsou numerick´e v´ ypoˇcty sloˇzit´e, lze nal´ezt cesty jak redukovat chyby tak, ˇze uˇz nikoho nezaj´ımaj´ı. Uˇzivatel je zde ˇcasto vyd´an na milost autorovi knihoven. Aˇckoliv pˇrekladaˇc je ta cool ˇc´ ast, knihovny mˇe vˇzdycky zaj´ımaly v´ıce. Pr´ace pˇrekladaˇce je dost striktnˇe specifikov´ ana, ale v knihovn´ ach se mohou rozv´ıjet inovace a experimenty. I dokud byla v plenk´ach, bylo v n´ı hodnˇe ve srovn´ an´ı s konkurenˇcn´ımi pˇrekladaˇci. Tˇreba schopnost suspend/resume jsem chtˇel dlouho pˇredt´ım, neˇz jsem ji implementoval v g95. Pˇri psan´ı g95 jsem si uˇzil hodnˇe z´ abavy, a tˇeˇs´ım se na jej´ı pokraˇcov´an´ı v n´asleduj´ıc´ıch desetilet´ıch.
Andy Vaught Mesa, Arizona ˇ ıjen 2006 R´
2
Licence G95 samotn´ y je uvolnˇen pod GNU General Public License (GPL). Pr´avn´ı detaily viz: http://www.gnu.org/licenses/gpl.html. Bˇehov´e knihovny jsou vˇetˇsinou pod GPL a obsahuj´ı v´ yjimku z GPL kter´a d´av´a uˇzivatel˚ um pr´ ava pouˇz´ıvat knihovny g95 s k´ ody kter´e pod GPL nespadaj´ı, a distribuovat programy bez jak´ ychkoli omezen´ı vypl´ yvaj´ıc´ıch z GPL.
Instalace Unix (Linux/OSX/Solaris/Irix/etc.): Otevˇrete konzolu, pˇrejdˇete do adres´ aˇre, kam chcete g95 nainstalovat, a spusˇte n´asleduj´ıc´ı pˇr´ıkazy (mus´ıte m´ıt pˇripojen´ı k internetu). wget -O - http://ftp.g95.org/g95-x86-linux.tgz | tar xvfz ln -s $PWD/g95-install/bin/i686-pc-linux-gnu-g95 /usr/bin/g95 Rozbal´ı se n´ asleduj´ıc´ı souborov´ a struktura: ./g95-install/ ./g95-install/bin/ ./g95-install/bin/i686-pc-linux-gnu-g95 ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/ ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/f951 ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/crtendS.o ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/crtend.o ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/crtbeginT.o ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/crtbeginS.o ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/crtbegin.o ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/cc1 ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/libf95.a ./g95-install/lib/gcc-lib/i686-pc-linux-gnu/4.1.1/libgcc.a ./g95-install/INSTALL ./g95-install/G95Manual.pdf Soubor cc1 je symbolick´ y odkaz na f951 ve stejn´em adres´aˇri.
Cygwin Volba -mno-cygwin umoˇzn ˇuje Cygwin´ı verzi g95 sestavovat bin´arky kter´e nepotˇrebuj´ı pro bˇeh pˇr´ıstup ke knihovnˇe cygwin1.dll, a tak je lze spustit na jin´ ych syst´emech. Tak´e jsou pak programy nez´avisl´e na GNU GPL. Aby volba -mno-cygwin fungovala, mus´ı b´ yt nainstalov´any knihovny mingw (http://www.cygwin.com). St´ ahnˇete si bin´ arky z http://ftp.g95.org/g95-x86-cygwin.tgz do rootovsk´eho adres´aˇre Cygwina (obvykle c:\Cygwin). Pusˇtte Cygwin´ı konzolu, a zadejte tyto pˇr´ıkazy: cd / tar -xvzf g95-x86-cygwin.tgz T´ım nainstalujete g95 do adres´ aˇre /usr/local/bin. Pozor: Nepouˇz´ıvejte Winzip na extrakci tar archivu, symbolick´e odkazy se pak nenastav´ı spr´avnˇe.
MinGW Bin´ arky g95 pro prostˇred´ı MS-Windows jsou samorozbalovac´ı instal´atory. Dostupn´e jsou moment´alnˇe dvˇe verze: Uˇzivatel´e Windows 98 by mˇeli pouˇz´ıvat bal´ık g95 sestaven´ y gcc 4.0.3, http://ftp.g95.org/g95MinGW.exe. Uˇzivatel´e Windows NT, XP a 2000 mohou pouˇz´ıt stejn´ y bal´ık, nebo novˇejˇs´ı sestaven´ y gcc 4.1.1, dostupn´ y na http://ftp.g95.org/g95-MinGW-41.exe. Volnˇe ˇsiˇriteln´ y syst´em MinGW/Msys poskytuje GNU GCC komponenty potˇrebn´e pro g95, coˇz zahrnuje linker ld.exe, a as.exe (GNU assembler) z bal´ıku binutils, dostupn´eho na http://www.mingw.org. Instalaˇcn´ı skript umoˇzn ˇuje dva druhy instalace. Nen´ı-li nalezen MinGW, nainstaluje g95 i s d˚ uleˇzit´ ymi MinGW 3
utilitami a knihovnami do sloˇzky vybran´e uˇzivatelem. Instalaˇcn´ı sloˇzku zahrˇ nte do promˇenn´e PATH, a nastavte promˇennou prostˇred´ı LIBRARY PATH na tuto instalaˇcn´ı sloˇzku. M´ ate-li uˇz MinGW nainstalovan´ y, doporuˇcuje se nainstalovat g95 do koˇrenov´eho adres´aˇre MinGW (obvykle C:\mingw) aby se pˇredeˇslo pˇr´ıpadn´ ym konflikt˚ um. Pokud instal´ator detekuje MinGW, pokus´ı se do nˇej g95 nainstalovat. Zahrˇ nte adres´ aˇr MinGW\bin do PATH, a nastavte promˇennou LIBRARY PATH=path-to-MinGW/lib Ve Windows 98 a Windows ME to obvykle znamen´a editovat soubor autoexec.bat, a je potˇreba restartovat syst´em. Pozn´ amka pro uˇzivatele Windows XP: MinGW moment´alnˇe dovoluje pouh´ ych 8 MB pro heap. Pokud potˇrebuje vaˇse aplikace v´ıce pamˇeti, zkuste pˇrekl´adat s: -Wl,--heap=0x01000000. Zvˇetˇsujte hexadecim´ aln´ı hodnotu --heap dokud v´ aˇs program nepobˇeˇz´ı norm´alnˇe.
Spouˇstˇen´ı G95 G95 se rozhoduje jak zkompilovat dan´ y soubor podle jeho pˇr´ıpony. Povolen´e pˇr´ıpony pro Fortransk´e zdroj´ aky jsou .f, .F, .for, .FOR, .f90, .F90, .f95, .F95, .f03 a .F03. Pˇr´ıpona urˇcuje, zda je soubor ve fixed nebo free form´ atu. Soubory konˇc´ıc´ı .f, .F, .for, a .FOR se pˇredpokl´adaj´ı ve fixed form´atu kompatibiln´ım se star´ ymi f77 soubory. Soubory konˇc´ıc´ı .f90, .F90, .f95, .F95, .f03 a .F03 se pˇredpokl´adaj´ı ve free form´atu. Soubory s pˇr´ıponou velk´ ymi p´ısmeny jsou automaticky pˇred pˇrekladem prohn´any C preprocesorem, s pˇr´ıponou mal´ ym p´ısmem nikoli. Pozn.pˇrekl. nedoporuˇcuje se volit pˇr´ıpony f90,f95,f03 podle verze standardu Fortranu, kter´ym se hlavnˇe ˇr´ıd´ıte (zdroj c.l.f. google group). Pˇr´ıpona f90 (ponˇekud neˇsˇtastnˇe zvolen´ a) m´ a oznaˇcovat, ˇze jde o zdrojov´y text ve free form´ atu, zat´ımco .f z˚ ustane vyhrazeno pro form´ at fixed. Z´ akladn´ı volby pro pˇreklad Fortranu s g95 jsou: -c Jen pˇreloˇzit, nesestavovat. -v Vypiˇs pˇr´ıkazy (programy s argumenty) spouˇstˇen´e g95. Obzvl´aˇstˇe uˇziteˇcn´e pro ˇreˇsen´ı probl´emu s cestami. ˇ objektov´eho k´odu nebo spustiteln´eho. Pod windows se au-o Specifikace jm´ena v´ ystupn´ıho souboru, bud tomaticky pˇrid´ a pˇr´ıpona .exe, pokud nen´ı uvedena. Nen´ı-li specifikov´ano jinak, automatick´ y v´ ystupn´ı spustiteln´ y soubor je a.out v unixu, a.exe pod Windows. Jednoduch´e pˇr´ıklady: g95 -c hello.f90 Pˇreloˇz´ı hello.f90 do objekt k´ odu hello.o. g95 hello.f90 Pˇreloˇz´ı hello.f90 a sestav´ı jej do spustiteln´eho souboru a.out (v unixech), nebo a.exe (na syst´emech MS Windows). g95 -c h1.f90 h2.f90 h3.f90 Pˇreloˇz´ı nˇekolik zdrojov´ ych soubor˚ u. Nejsou-li chyby, vytvoˇr´ı se objektov´e soubory h1.o, h2.o a h3.o. g95 -o hello h1.f90 h2.f90 h3.f90 Pˇreloˇz´ı nˇekolik zdrojov´ ych soubor˚ u a sestav´ı je do spustiteln´eho souboru a.out (v unixech), nebo a.exe (na syst´emech MS Windows).
Syntax voleb g95 [ -c | -S | -E ] [-g] [-pg] [-O[n] ] [-s ] [-Wjm´eno warningu ] [-pedantic] [-Iadres´ aˇr ]
Pˇreloˇz | vyrob assemblerov´ y k´od | vypiˇs zdroj (po preprocesingu) Ladic´ı pˇreklad Level optimalizac´ı, n = 0, 1, 2, 3 Oˇreˇz debug info R˚ uzn´a varov´an´ı Adres´aˇr pro USE a INCLUDE 4
[-Ladres´ aˇr ] [-D makro[=hodnota]... ] [-U makro ] [-f volba ...] [-m strojov´ a-volba ...] [-o v´ ystupn´ ı soubor ] vstupn´ ı soubor
Adres´aˇr pro knihovny Definuj makro (pro cpp) Oddefinuj makro Obecn´e volby pˇrekladu (viz mau´al GCC) Strojov´e volby pˇrekladu (viz manu´al GCC) Jm´eno v´ ystupn´ıho souboru
Volby G95 Uˇzit´ı: g95 [volby] soubor... -pass-exit-codes --help --target-help -dumpspecs -dumpversion -dumpmachine -print-search-dirs -print-libgcc-file-name -print-file-name=lib -print-prog-name=prog -print-multi-directory -print-multi-lib -print-multi-os-directory -Wa,options -Wp,options -Wl,options -Xassembler arg -Xpreprocessor arg -Xlinker arg -save-temps -pipe -time -specs=file -std=standard -B directory -b machine -V version -v -M -### -E -S -c -o file -x language
Ukonˇci f´ azi s nejvyˇsˇs´ım chybov´ ym k´odem bˇehem n´ı. Zobraz tento help. Zobraz´ı volby pˇr´ıkazov´e ˇr´adky specifick´e pro c´ıl pˇrekladu. (Pouˇzijte ’-v --help’ pro zobrazen´ı voleb podproces˚ u). Zobraz´ı vestavˇen´e spec ˇretˇezce. Zobraz´ı verzi pˇrekladaˇce. Zobraz´ı c´ılov´ y procesor pˇrekladaˇce. Zobraz´ı adres´aˇre v pˇrekladaˇcem prohled´avan´ ych cest´ach. Zobraz´ı doprovodnou knihovnu pˇrekladaˇce. Zobraz´ı plnou cestu ke knihovnˇe lib. Zobraz´ı plnou cestu ke komponentˇe prog. Zobraz´ı koˇrenov´ y adres´aˇr pro verze libgcc. Zobraz´ı vztahy mezi volbami pˇr´ık. ˇr´adku a prohled´av´an´ım v´ıce adres´ aˇr˚ u. Zobraz´ı relativn´ı cestu k syst´emov´ ym knihovn´am. Pˇred´ a volby (oddˇelen´e ˇc´arkami) assembleru. Pˇred´ a volby (oddˇelen´e ˇc´arkami) preprocesoru. Pˇred´ a volby (oddˇelen´e ˇc´arkami) linkeru. Pˇred´ a argument arg assembleru. Pˇred´ a argument arg preprocesoru. Pˇred´ a argument arg linkeru. Nemazat doˇcasn´e soubory. Pouˇzij roury m´ısto doˇcasn´ ych soubor˚ u, je-li to moˇzn´e. Mˇeˇr ˇcas bˇehu podproces˚ u. Nen´ı na nˇekter´ ych platform´ach (MinGW, OSX). Nahrad´ı vestavˇen´e specifikace obsahem souboru file. Pˇredpokl´ad´a zdrojov´e k´ody pro dan´ y standard Fortranu. Pˇrid´ a adres´aˇr directory k prohled´avan´e cestˇe pˇrekladaˇce. Spusˇt gcc pro c´ılov´ y stroj machine, je-li to moˇzn´e. Spusˇt gcc verze version, je-li to moˇzn´e. Zobraz programy spouˇstˇen´e pˇrekladaˇcem. Vypiˇs z´ avislosti ve stylu Makefile. Jako -v ale volby se vyp´ıˇs´ı a pˇr´ıkazy nevykon´avaj´ı. Jen preprocesuj; nepˇrekl´adej. Pˇreklad jen do assembleru. Pˇreloˇz, nesestavuj. V´ ystup do souboru file. Specifikuj jazyk language n´asleduj´ıc´ıch vstupn´ıch soubor˚ u. Povoleno je: c, c++, assembler, none; ‘none’ znamen´a n´avrat k norm´aln´ımu rozhodov´ an´ı podle pˇr´ıpony.
Volby zaˇc´ınaj´ıc´ı -g, -f, -m, -O, -W, nebo --param jsou automaticky pˇred´av´any spouˇstˇen´ ym subproces˚ um. Pro pˇred´ an´ı jin´ ych voleb je tˇreba pouˇz´ıt -Wletter. Pro hl´aˇsen´ı chyb (bug reporting), viz: http://www.g95.org. ˇ ıslo n volby -On ud´av´a u Nespecifikujeme-li jinak, g95 pˇrekl´ ad´ a bez optimalizac´ı. C´ ´roveˇ n optimalizace, od 0 do 3. Nula znamen´ a ˇz´ adn´e optimalizace, vyˇsˇs´ı ˇc´ısla vyˇsˇs´ı agresivitu optimalizac´ı. V ˇreˇzimu optimalizace 5
ˇ sm´ı pˇrekladaˇc mˇenit k´ od za u ´ˇcelem urychlen´ı. Casto se tak drobnˇe ovlivn´ı v´ ysledky v´ ypoˇct˚ u. -O je tot´eˇz co -O1. Podstatn´eho zrychlen´ı lze dos´ ahnout zahrnut´ım alespoˇ n -O2 -march=arch kde arch je architektura vaˇseho procesoru, ˇcili pentium4, athlon, opteron, atd. Dalˇs´ı volby typick´e pro Fortran zahrnuj´ı -funroll-loops,-fomit-frame-pointer, -malign-double a -msse2. Pro informace o vˇsech volb´ ach GCC viz: http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc.
Volby preprocesoru G95 um´ı zpracovat soubory s kontrukcemi preprocesoru jazyka C. -cpp Vynut´ı zpracov´ an´ı zdroj´ak˚ u preprocesorem. -no-cpp Zak´ aˇze tot´eˇz. -D name[=value] Definuje makro preprocesoru. -U name Oddefinuje makro preprocesoru. -E Uk´ aˇze v´ ysledek preprocesingu. -I directory Pˇrid´ a adres´ aˇr directory do cesty prohled´avan´e pro #include. Soubory se hledaj´ı v adres´ aˇr´ıch v tomto poˇrad´ı: Adres´aˇr hlavn´ıho zdrojov´eho souboru, aktu´aln´ı adres´ aˇr, adres´ aˇre v -I, adres´ aˇre v promˇenn´e prostˇred´ı G95 INCLUDE PATH a nakonec syst´emov´e adres´ aˇre.
Volby Fortranu -Wall -Werror -Werror=numbers -Wextra
-Wglobals -Wimplicit-none -Wimplicit-interface -Wline-truncation -Wmissing-intent -Wobsolescent -Wno=numbers -Wuninitialized -Wunused-internal-procs -Wunused-vars -Wunused-types -Wunset-vars -Wunused-module-vars -Wunused-module-procs -Wunused-parameter -Wprecision-loss -fbackslash
-fc-binding -fd-comment
Zapne vˇetˇsinu varovn´ ych hl´aˇsen´ı. Bere varov´ an´ı chyby. Bere (ˇc´ısly) vybran´a varov´an´ı jako chyby. Zapne dal´ı varovn´a hl´aˇsen´ı, nezapnut´a pˇri -Wall. Jmenovitˇe -Wobsolescent, -Wunused-module-vars, -Wunused-module-procs, -Wunused-internal-procs, -Wunused-parameter, -Wunused-types, -Wmissing-intent a -Wimplicit-interface. Kˇr´ıˇzov´ a kontrola vol´an´ı a definic procedur ve stejn´em zdrojov´em textu. Norm´ alnˇe zapnuto, -Wno-globals vypne. Tot´eˇz co -fimplicit-none. Varuje pˇri pouˇzit´ı implicitn´ıch interface. Varuje pˇri oˇrez´an´ı ˇr´adk˚ u. Varuje pˇri chybˇej´ıc´ıch INTENTech argument˚ u. Varuje pˇred zastaral´ ymi konstrukcemi. Vypne mnoˇzinu varov´an´ı podle ˇc´ısel (oddˇelen´ ych ˇc´arkou). Varuje pˇri pouˇzit´ı neinicializovan´ ych promˇenn´ ych. Funguje jen s -O2 nebo vyˇsˇs´ım. Varuje, pokud vnoˇren´a procedura nen´ı nikdy pouˇzita. Varuje pˇred nepouˇzit´ ymi promˇenn´ ymi. Varuje pˇred nepouˇzit´ ymi typy v modulech. Nezap´ın´a se pˇri -Wall. Varuje pˇred promˇenn´ ymi, kter´ ym nen´ı pˇriˇrazena hodnota. Varuje pˇred nepouˇzit´ ymi promˇenn´ ymi modul˚ u. Uˇziteˇcn´e pro sestavov´ an´ı ONLY klauzul´ı. Varuje pˇred nepouˇzit´ ymi procedurami modul˚ u. Uˇziteˇcn´e pro sestavov´ an´ı ONLY klauzul´ı. Varuje pˇred nepouˇzit´ ymi parametry. Nezap´ın´a se pˇri -Wall. Varuje pˇred ztr´atou pˇresnosti v implicitn´ıch typov´ ych konverz´ıch. Interpretuje zpˇetn´a lom´ıtka ve znakov´ ych konstant´ach jako escape k´ody. Tato volba je defaultnˇe zapnuta. Pouˇzijte -fno-backslash, chcete-li br´ at zpˇetn´ a lom´ıtka jako zpˇetn´a lom´ıtka. Vypiˇs C prototypy procedur na standardn´ı v´ ystup. Ve fixed form´atu zahrne do k´odu ˇr´adky zaˇc´ınaj´ıc´ı D. 6
-fdollar-ok -fendian=value -ffixed-form -ffixed-line-length-132 -ffixed-line-length-80 -ffree-form -ffree-line-length-huge -fimplicit-none -fintrinsic-extensions -fintrinsic-extensions= -fmod=directory -fmodule-private -fmultiple-save -fone-error -ftr15581 -std=F -std=f2003 -std=f95 -i4 -i8 -r8 -d8
Povolit dolary ve jm´enech entit. Nastav´ı endian neform´atovan´ ych ˇcten´ı a z´apis˚ u. value mus´ı b´ yt big nebo little. M´ a pˇrednost pˇred promˇenn´ ymi prostˇred´ı. Pˇredpokl´ ad´a form´at fixed pro zdrojov´e texty. ˇ adky o 132 znac´ıch ve fixed form´atu. R´ ˇ adky o 80 znac´ıch ve fixed form´atu. R´ Pˇredpokl´ ad´a voln´ y form´at pro zdrojov´e texty. Povolit velmi dlouh´e ˇr´adky (10k). AUtomatick´e IMPLICIT NONE. Lze pˇreb´ıt explicitn´ımi IMPLICIT pˇr´ıkazy. Zapne vestavˇen´e funkce g95 i v -std= m´odu. Tot´eˇz, ale selektivn´ı (jm´ena oddˇelena ˇc´arkami). Umisˇtuje .mod soubory do adres´aˇre directory. Nstav´ı defaultn´ı pr´ava entit modul˚ u na PRIVATE. Povol´ı v´ıcen´asobnou specifikaci atributu SAVE. Zastav´ı pˇreklad po prvn´ı chybˇe. Zapne TR15581 rozˇs´ıˇren´ı alokovateln´ ych pol´ı i v m´odech -std=F a -std=f95. Drˇz´ı se standardu F. See http://www.fortran.com/F. Drˇz´ı se standardu Fortran 2003 (implementovan´e podmoˇziny). Drˇz´ı se standardu Fortran 95. Defaultn´ı integer kind=4 (32 bit˚ u). Defaultn´ı integer kind=8 (64 bit˚ u). Defaultn´ı real kind=8 (dvojit´a pˇresnost). Zapne -i8 a -r8.
Volby generov´an´ı k´odu -fbounds-check -fcase-upper -fleading-underscore -fonetrip -fpack-derived -fqkind=n -fsecond-underscore -fshort-circuit -fsloppy-char -fstatic -ftrace=
-funderscoring -max-frame-size=n -finteger=n -flogical=value -freal=value -fpointer=value
Kontroluje meze pol´ı a ˇretˇezc˚ u za bˇehu. Vˇsechny veˇrejn´e symboly v uppercase. Pˇrid´ a podtrˇz´ıtko pˇred veˇrejn´a jm´ena. ˇ DO-cykly aspoˇ Proved n jednou. (Pro nechod´ıc´ı FORTRAN 66). ˇ r´ı pamˇeˇt, ale m˚ Seskl´ adat struktury co nejkompaktnˇeji. Setˇ uˇze zpomalovat program. Nastav´ı real kind pro konstanty s exponentem ’q’ na n. Pˇrid´ a dalˇs´ı podtrˇz´ıtko za jm´ena s podtrˇz´ıtkem (default). Pouˇzijte -fnosecond-underscore pro potlaˇcen´ı. Zkr´ acen´e vyhodnocov´an´ı a la C oper´ator˚ u .AND. a .OR. Povoluje pˇriˇrazen´ı neznakov´ ych dat do znakov´ ych promˇenn´ ych a porovn´av´ an´ı INTEGERov´ ych a CHARACTERov´ ych promˇenn´ ych. Alokuje lok´ aln´ı promˇenn´e ze statick´e pamˇeti kdekoli to jde. Nepl´est s volbou -static. -ftrace=frame vkl´ad´a k´od pro zpˇetn´e trasov´an´ı chybov´ ych ukonˇcen´ı programu, kter´ y se t´ım zpomal´ı. -ftrace=full nav´ıc umoˇzn´ı vypsat ˇc´ıslo ˇr´adku aritmetick´ ych v´ yjimek (jeˇstˇe pomalejˇs´ı). Defaultn´ı je -ftrace=none. Pˇripoj´ı podtrˇz´ıtka za glob´aln´ı jm´ena. Tahle volba je defaultnˇe zapnut´a, vyp´ın´ a se pˇres -fno-underscoring. Mez pro velikost z´asobn´ıkov´eho r´amce, neˇz se zaˇcnou pole alokovat z heapu. pozn.aut.: default je co?) Inicializuje skal´arn´ı celoˇc´ıseln´e promˇenn´e na n. Inicializuje skal´arn´ı logick´e promˇenn´e. value je sm´ı b´ yt none, true nebo false. Inicializuje skal´arn´ı re´aln´e a komplexn´ı promˇenn´e. value sm´ı b´ yt none, zero, nan, inf, +inf nebo -inf. Inicializuje ukazatele. value sm´ı b´ yt none, null nebo invalid. 7
Kontroluje zaokrouhlov´an´ı pˇri pˇrekladu. value sm´ı b´ yt nearest, plus, minus nebo zero. Default je zaokrouhlov´an´ı k bliˇzˇs´ı hodnotˇe, plus je zaokrouhlov´ an´ı ke kladn´emu nekoneˇcnu, minus k z´aporn´emu, zero k nule. Inicializuj numerick´e typy na nulu, logick´e promˇenn´e na false a ukazatele na null. V´ yˇse uveden´e inicializaˇcn´ı volby tuto pˇreb´ıjej´ı.
-fround=value
-fzero
Adres´aˇrov´e volby -I directory -Ldirectory -fmod=directory
Pˇrid´ a adres´ aˇr directory k prohled´avan´ ym cest´am pro soubory include a moduly. Pˇrid´ a adres´ aˇr directory k cest´am pro knihovny. Umisˇtuje .mod soubory do adres´aˇre directory.
Environment Variables Bˇehov´e prostˇred´ı g95 poskytuje hodnˇe moˇznost´ı pro zmˇenu chov´an´ı programu po spuˇstˇen´ı, a to pomoc´ı promˇenn´ ych prostˇred´ı. Spuˇstˇen´ı programu pˇreloˇzen´eho g95 s volbou --g95 vyp´ıˇse vˇsechny tyto volby na standardn´ı v´ ystup. Hodnoty vˇsech promˇenn´ ych prostˇred´ı jsou vˇzdycky ˇretˇezce, ale mohou b´ yt interpretov´ any jako ˇc´ısla. Jen prvn´ı znak booleovsk´e promˇenn´e se kontroluje, a mus´ı b´ yt jeden z ’t’, ’f’, ’y’, ’n’, ’1’ nebo ’0’ (mohou b´ yt velk´ a). Je-li hodnota ˇspatn´ a, nedoˇck´ate se ˇz´adn´eho varov´an´ı a pouˇzije se defaultn´ı nastaven´ı. Pro informaci o promˇenn´ ych prostˇred´ı GCC pouˇz´ıvan´ ych g95, jako je LIBRARY PATH, viz dokumentace ke GCC. G95 STDIN UNIT
Integer
G95 STDOUT UNIT
Integer
G95 STDERR UNIT
Integer
G95 USE STDERR G95 ENDIAN
Boolean String
G95 CR
Boolean
G95 INPUT CR G95 IGNORE ENDFILE
Boolean Boolean
G95 TMPDIR
String
G95 UNBUFFERED ALL
Boolean
G95 SHOW LOCUS
Boolean
G95 STOP CODE G95 OPTIONAL PLUS G95 DEFAULT RECL
Boolean Boolean Integer
G95 LIST SEPARATOR
String
G95 LIST EXP
Integer
ˇ ıslo jednotky pˇredpˇripojen´e ke standardn´ımu vstupu. Z´ ˇ adn´ C´ a, je-li negativn´ı, default je 5. ˇ ıslo jednotky pˇredpˇripojen´e ke standardn´ımu v´ ˇ adn´ C´ ystupu. Z´ a, je-li negativn´ı, default je 6. ˇ ıslo jednotky pˇredpˇripojen´e ke standardn´ımu chybov´emu v´ C´ ystupu. ˇ Z´ adn´a, je-li negativn´ı, default je 0. V´ ystup z knihoven na stderr m´ısto stdout. Default je Yes. Endian pro neform´atovan´e I/O. Hodnoty jsou BIG, LITTLE nebo NATIVE. Default je NATIVE. Pouˇz´ıvat CR zanky pro konce z´aznam˚ u ve form´atovan´em v´ ystupu. Default je TRUE na Windows (ale ne Cygwin), FALSE jinde. CRLF na vstupu br´at jako LF - konec z´aznamu. Default je TRUE. Ignoruje ˇcten´ı za koncem souboru v sekvenˇcn´ım m´odu. Default je FALSE. Adres´aˇr pro scratch soubory. Nen´ı-li nastaveno, uˇzije se promˇenn´ a TMP. Nen´ı-li nastavena TMP, pouˇzije se /var/tmp. Je-li TRUE, veˇsker´ y v´ ystup se nebufferuje. Zpomaluje menˇs´ı z´ apisy, ale m˚ uˇze b´ yt uˇziteˇcn´e, je-li tˇreba data okamˇzitˇe zapisovat. Default je FALSE. Je-li TRUE, vypisuje jm´eno souboru a ˇc´ıslo ˇr´adku bˇehov´e chyby. Default je TRUE. Je-li TRUE, k´ody STOP se pˇred´avaj´ı syst´emu. Default TRUE. Vypisuje plus pˇred kladn´a ˇc´ısla. Default je FALSE. Defaultn´ı maxim´aln´ı d´elka z´aznamu pro sekvenˇcn´ı soubory. Nejuˇziteˇcnˇejˇs´ı pro kontrolu d´elky ˇr´adk˚ u pˇredpˇripojen´ ych jednotek. Default je 50000000. Oddˇelovaˇc pro seznamem ˇr´ızen´ y v´ ystup. M˚ uˇze obsahovat libovoln´ y poˇcet mezer a nejv´ yˇs jednu ˇc´arku. Default je jedin´a mezera. Nejvyˇsˇs´ı mocnina des´ıtky, pro niˇz se jeˇstˇe nepouˇzije E form´at. Default 6. 8
G95 COMMA G95 EXPAND UNPRINTABLE
Boolean Boolean
G95 QUIET
Boolean
G95 SYSTEM CLOCK
Integer
G95 SEED RNG
Boolean
G95 MINUS ZERO
Boolean
G95 ABORT
Boolean
G95 MEM INIT
String
G95 MEM SEGMENTS
Integer
G95 MEM MAXALLOC
Boolean
G95 MEM MXFAST
Integer
G95 MEM TRIM THRESHOLD
Integer
G95 MEM TOP PAD
Integer
G95 SIGHUP
String
G95 SIGINT G95 SIGQUIT G95 CHECKPOINT
String String Integer
G95 CHECKPOINT MSG G95 FPU ROUND
Boolean String
G95 FPU PRECISION
String
G95 FPU DENORMAL
Boolean
G95 FPU INVALID
Boolean
G95 G95 G95 G95
Boolean Boolean Boolean Boolean
FPU FPU FPU FPU
ZERODIV OVERFLOW UNDERFLOW INEXACT
G95 FPU EXCEPTIONS
Boolean
G95 UNIT x G95 UNBUFFERED x
String Boolean
Pouˇzije ˇc´arku jako desetinn´ y oddˇelovaˇc v I/O. Default FALSE. Tiskne jinak netisknuteln´e znaky ve form´atovan´em v´ ystupu pˇres \-sekvence. Default FALSE. Potlaˇc´ı znaky p´ıpnut´ı (\a) ve form´atovan´em v´ ystupu. Default FALSE. Poˇcet tik˚ u za sekundu, kter´e pouˇz´ıv´a vestavˇen´a funkce SYSTEM CLOCK(). Nula hodiny vyp´ın´a. Default je 100000. Je-li TRUE, automaticky prov´ad´ı random seed pˇri spuˇstˇen´ı programu. Default FALSE. Je-li TRUE, tiskne nulu vˇzdy bez znam´enka. Tradiˇcn´ı ale ne standardn´ı. Default FALSE. Je-li TRUE, udˇel´a v´ ypis j´adra pˇri abnorm´aln´ım ukonˇcen´ı programu. Uˇziteˇcn´e pro lokalizaci probl´em˚ u. Default FALSE. Kontroluje inicializaci alokovan´e pamˇeti. Default je NONE pro ˇza´dnou inicializaci (rychlejˇs´ı), NAN pro Not-a-Number (v hexu 0x00f95) nebo vybran´a hexadecim´aln´ı hodnota. Maxim´aln´ı poˇcet st´ale alokovan´ ych pamˇeˇtov´ ych segment˚ u zobrazen´ ych pˇri ukonˇcen´ı programu. 0 znamen´a ˇz´adn´e, m´enˇe neˇz 0 znamen´a vˇsechny. Default je 25. Je-li TRUE, ukazuje se maxim´aln´ı poˇcet byt˚ u alokovan´ ych za bˇehu programu. Default FALSE. Maxim´aln´ı velikost alokac´ı zpracov´avan´ ych pˇres fastbins. Fastbins jsou rychlejˇs´ı al sn´aze se fragmentuj´ı. Default je 64 byt˚ u. Amount of top-most memory to keep around until it is returned to the operating system. -1 prevents returning memory to the system. Useful in long-lived programs. Default 262144. Mnoˇzstv´ı pamˇeti nav´ıc pˇri alokaci od syst´emu. M˚ uˇze zrychlit budouc´ı alokace. Default 0. Chov´an´ı programu pˇri sign´alu SIGHUP: IGNORE, ABORT, DUMP nebo DUMP-QUIT. Default ABORT. Jen na Unixech. Tot´eˇz pˇri SIGINT. Tot´eˇz pˇri SIGQUIT. Na Linuxu x86, poˇcet sekund mezi checkpointy (v´ ypisy corefile), nula znamen´a bez v´ ypis˚ u. Je-li TRUE, ohl´asi checkpoint procesu na stderr. Default TRUE. Nastavuje reˇzim zaokrouhlov´an´ı v plovouc´ı ˇc´arce. M˚ uˇze b´ yt NEAREST, UP, DOWN, ZERO. Default je NEAREST. Pˇresnost meziv´ ysledk˚ u. M˚ uˇze b´ yt 24, 53 a 64. Default 64. Jen na x86 a kompatibiln´ıch. Vyvol´a v´ yjimku plovouc´ı ˇc´arky pˇri v´ yskytu denormalizovan´e hodnoty. Default FALSE. Vyvol´a v´ yjimku plovouc´ı ˇc´arky pˇri neplatn´e operaci. Default FALSE. Vyvol´a v´ yjimku plovouc´ı ˇc´arky pˇri dˇelen´ı nulou. Default FALSE. Vyvol´a v´ yjimku plovouc´ı ˇc´arky pˇri pˇreteˇcen´ı. Default FALSE. Vyvol´a v´ yjimku plovouc´ı ˇc´arky pˇri podteˇcen´ı. Default FALSE. Vyvol´a v´ yjimku plovouc´ı ˇc´arky pˇri ztr´atˇe pˇresnosti. Default FALSE. Zda maj´ı b´ yt maskovan´e v´ yjimky plovouc´ı ˇc´arky uk´az´any na konci programu. Default FALSE. Pˇrenastav´ı defaultn´ı jm´eno pro I/O jednotku x. Default je fort.x Je-li TRUE, I/O jednotka x nen´ı bufferov´ana. Default FALSE. 9
Bˇehov´e chybov´e k´ody Spuˇstˇen´ı programu pˇreloˇzen´eho g95 s volbou –g95 vyp´ıˇse tento seznam chybov´ ych k´od˚ u na standardn´ı v´ ystup. -2 Konec z´ aznamu -1 Konec souboru ´ eˇsn´e ukonˇcen´ı 0 Uspˇ K´ ody operaˇcn´ıho syst´emu (1 - 199) 200 Conflicting statement options 201 Bad statement option 202 Missing statement option 203 Soubor jiˇz otevˇren v jin´e jednotce 204 Nepˇripojen´ a jednotka 205 Chyba FORMAT 206 Nespr´ avn´ a ACTION ˇ ı za z´ 207 Cten´ aznam ENDFILE ˇ 208 Spatn´ a hodnota bˇehem ˇcten´ı 209 Numerick´e pˇreteˇcen´ı pˇri ˇcten´ı 210 Nedostatek pamˇeti 211 Pole jiˇz je alokov´ ano 212 Dealokace ˇspatn´eho pointeru 214 Neplatn´ y z´ aznam v neform´ atovan´em sekvenˇcn´ım I/O ˇ ı v´ıce dat neˇz je velikost z´ 215 Cten´ aznamu (RECL) 216 Z´ apis v´ıce dat neˇz je velikost z´ aznamu (RECL)
Vˇeci z Fortranu 2003 G95 implementuje nˇekolik ˇc´ ast´ı Fortranu 2003. Viz diskuse o vˇsech novink´ach Fortranu 2003 na: http://www.kcl.ac.uk/kis/support/cit/fortran/john reid new 2003.pdf. • Jsou k dispozici n´ asleduj´ıc´ı vestavˇen´e procedury: COMMAND ARGUMENT COUNT(), GET COMMAND ARGUMENT(), GET COMMAND() a GET ENVIRONMENT VARIABLE() • Re´ aln´e indexy DO cykl˚ u nejsou povoleny. • Lze uˇz´ıvat hranat´e z´ avorky [ a ] coby alternativu k (/ a /) pro konstruktory pol´ı. • TR 15581 - rozˇs´ıˇren´ı alokovateln´ ych entit. Umoˇzn ˇuje specifikovat atribut ALLOCATABLE pro form´ aln´ı argumenty procedur, n´ avratov´e hodnoty funkc´ı a komponenty struktur. • Stream I/O - specifikace FORM=’STREAM’ umoˇzn ˇuje Fortransk´emu programu ˇc´ıst a zapisovat bin´ arn´ı soubory bez pouˇz´ıv´ an´ı z´ aznam˚ u. Clive Page napsal pojedn´an´ı o t´eto schopnosti: http://www.star.le.ac.uk/~cgp/streamIO.html. • Pˇr´ıkaz IMPORT. Lze uˇz´ıt v tˇele INTERFACE pro zpˇr´ıstupnˇen´ı entit z okol´ı (modulu, procedury). • Evropsk´ a konvence pro re´ aln´ a ˇc´ısla – volba DECIMAL=’COMMA’ v pˇr´ıkazech OPEN, READ a WRITE podporuje re´ aln´ a ˇc´ısla s desetinnou ˇc´ arkou m´ısto teˇcky. • MIN() a MAX() funguj´ı i s ˇretˇezci a znaky. • Atribut VALUE umoˇzn ˇuje specifikovat pˇred´av´an´ı parametru hodnotou. • Konstruktory struktur z F2003. • Procedur´ aln´ı ukazatele z F2003. • Interoperabilita s C - konstrukce BIND(C), modul ISO C BINDING.
V´ıcejazyˇcn´e programov´an´ı Aˇckoli g95 produkuje samostatn´e programy, obˇcas je potˇreba spolupr´ace si jin´ ymi jazyky, nejˇcastˇeji C. Prvn´ı pot´ıˇz s kombinac´ı v´ıce jazyk˚ u jsou jm´ena veˇrejn´ ych symbol˚ u. G95 se drˇz´ı konvence f2c: pˇripojuje za veˇrejn´ a jm´ena podtrˇz´ıtko, dvˇe podtrˇz´ıtka za jm´ena obsahuj´ıc´ı podtrˇz´ıtko. Volbami -fno-second-underscore a -fno-underscoring lze pˇrimˇet g95 k vyprodukov´an´ı jmen kompatibiln´ıch s vaˇs´ım C pˇrekladaˇcem. M˚ uˇzete pouˇz´ıt utilitu nm na objektov´e .o soubory produkovan´e obˇema pˇrekladaˇci ke kontrole vyprodukovan´ ych jmen. 10
G95 produkuje veˇrejn´ a jm´ena v mal´ ych p´ısmenech, pokud mu nezad´ate volbu -fupper-case, v kter´emˇzto pˇr´ıpadˇe pouˇzije velk´ a p´ısmena. Jm´ena entit v modulech jsou reprezentov´any jako module-name MP entityname. Pˇri v´ıcejazyˇcn´em programov´ an´ı lze rozliˇsit dva hlavn´ı pˇr´ıpady: Vol´an´ı C procedur z Fortranu, a vol´ an´ı Fortransk´ ych procedur z C. Prvn´ı pˇr´ıpad nic speci´aln´ıho nepotˇrebuje (pozor, neplat´ı pro C++). Ve druh´em pˇr´ıpadˇe, vol´ an´ı Fortranu z C, budou Fortransk´e podprogramy nˇekdy volat knihovn´ı funkce, kter´e oˇcek´ avaj´ı nˇejak inicializovanou haldu a jin´e vˇeci. Bˇehov´e prostˇred´ı g95 lze inicializovat z C vol´an´ım g95 runtime start() a finalizovat pomoc´ı g95 runtime stop(). Prototyp g95 runtime start() je: void g95 runtime start(int argc, char *argv[]); Nen´ı-li pˇr´ıstup k argument˚ um pˇr´ıkazov´e ˇr´adky (napˇr. jde o knihovnu), nebo nejsou-li potˇreba, lze pˇredat argc=0 a argv=NULL. Na OSX, pouˇzijte -lSystemStubs pˇri v´ıcejazyˇcn´em programov´an´ı. F2003 spoupr´ aci s C velmi zjednoduˇsuje. Atribut BIND(C) umoˇzn ˇuje kontrolovat jm´ena Fortransk´ ych symbol˚ u tak, aby se na nˇe bylo moˇzn´e sn´ aze odkazovat z C (nebo jin´ ych jazyk˚ u). Napˇr´ıklad: SUBROUTINE foo(a) BIND(C) Tento tvar vytvoˇr´ı symbol jm´enem foo bez pˇridan´ ych podtrˇz´ıtek. Vˇsechna p´ısmena jsou mal´a. Podobn´ y tvar je: SUBROUTINE foo(a) BIND(C, name=’Foo1’) T´ım se symbol pojmenuje Foo1. Unitˇr Fortranu se na podprogram st´ale odkazujeme jako na foo, FOO atd. Programy v C pˇred´ avaj´ı argumenty hodnotoum zat´ımco Fortran (norm´alnˇe) odkazem. F2003 atribut VALUE specifikuje argumenty pˇred´ avan´e hodnotou. Pˇr´ıklad: SUBROUTINE foo(a) INTEGER, VALUE :: a ... Podprogram takto definovan´ y lze z Fortranu st´ale norm´alnˇe volat s t´ım omezen´ım, ˇze form´aln´ı argumenty uˇz nejsou asociov´ any s aktu´ aln´ımi a zmˇena form´aln´ıho argumentu se na aktu´aln´ım neprojev´ı. Glob´ aln´ı promˇenn´e lze zpˇr´ıstupnit podobnˇe. N´asleduj´ıc´ı podprogram vyp´ıˇse hodnotu promˇenn´e VAR, kter´ a by jinak byla z Fortranu nepˇr´ıstupn´ a. SUBROUTINE print it INTEGER, BIND(C, name=’VAR’) :: v PRINT *, v END SUBROUTINE Zat´ımco fortran rozliˇsuje r˚ uzn´e druhy (kinds) z´akladn´ıch typ˚ u, C definuje vˇse jak r˚ uzn´e typy. Pro zajiˇsten´ı vz´ ajemn´e korespondence typ˚ u obsahuje vestavˇen´ y modul ISO C BINDING n´asleduj´ıc´ı druhov´e konstanty (PARAMETER): c c c c c c c c c
int short long long long signed char size t intptr t float double
Integer kind pro C int Integer kind pro C short Integer kind pro C long Integer kind pro C long long Integer kind pro C char Integer kind pro C size t Integer kind of the same size as C pointers Real kind pro C float Real kind pro C double
V modulu ISO C BINDING je i spousta dalˇs´ıch vˇec´ı. Pˇr´ıklad pouˇzit´ı: SUBROUTINE foo USE, INTRINSIC :: ISO C BINDING INTEGER(KIND=C INT) :: int var INTEGER(KIND=C LONG LONG) :: big integer REAL(KIND=C FLOAT) :: float var ... 11
Pouˇzit´ı gener´atoru pseudon´ahodn´ych ˇc´ısel REAL INTENT(OUT):: harvest CALL random number(harvest) Napln´ı REAL promˇennou harvest (skal´ ar nebo pole) pseudon´ahodn´ ym ˇc´ısly , 0 ≤ harvest < 1. Nastaven´ı seedu gener´ atoru: INTEGER, OPTIONAL, INTENT(OUT) :: sz INTEGER, OPTIONAL, INTENT(IN) :: pt(n1) INTEGER, OPTIONAL, INTENT(OUT) :: gt(n2) CALL random seed(sz,pt,gt) sz je minim´ aln´ı poˇcet integer˚ u potˇrebn´ ych pro seed, g95 staˇc´ı ˇctyˇri. Argument pt je pole integer˚ u velikosti n1 ≥ sz, obsahuj´ıc´ı uˇzivatelsk´e hodnoty seedu. Argument gt je pole integer˚ u velikosti n2 ≥ sz, do nˇejˇz se uloˇz´ı dosavadn´ı seed. u inicializuje seed na z´akladˇe aktu´aln´ıho ˇcasu - t´ım se zajist´ı genVol´ an´ı RANDOM SEED() bez argument˚ erov´ an´ı r˚ uzn´ ych posloupnost´ı pseudon´ ahodn´ ych ˇc´ısel pokaˇzd´e, kdyˇz je program znovu spuˇstˇen. Tot´eˇz se provede automaticky, je-li nastavena promˇenn´a prostˇred´ı G95 SEED RNG na TRUE. V opaˇcn´em pˇr´ıpadˇe, RANDOM NUMBER() vˇzdy generuje stejnou sekvenci. Pouˇzit´ y gener´ ator je xor-shift gener´ ator, jehoˇz autorem je George Marsaglia.
P ˇreddefinovan´a makra preprocesoru Vˇzdy jsou definov´ ana makra: G95 0 G95 MINOR 91 FORTRAN 95 GNUC 4 Podm´ınˇen´ a makra jsou: unix windows hpux linux solaris irix aix netbsd freebsd openbsd cygwin
Schopnost Corefile Resume Na x86 Linuxov´ ych syst´emech lze prov´adˇen´ı programu pˇreloˇzen´eho g95 pozastavit a obnovit. Pˇreruˇs´ı-li se program sign´ alem QUIT, obvykle generovan´ ym stiskem Ctrl-zpˇetn´e lom´ıtko, program vytvoˇr´ı v aktu´ aln´ım adres´ aˇri spustiteln´ y soubor jm´enem dump (ale nepˇreruˇs´ı bˇeh). Spuˇstˇen´ı tohoto souboru kdykoli pozdˇeji po skonˇcen´ı nebo pˇreruˇsen´ı programu, obnov´ı prov´adˇen´ı vaˇseho programu v m´ıstˇe, kde byl checkpoint poˇr´ızen. Ilustruje to n´ asleduj´ıc´ı sezen´ı: andy@fulcrum:~/g95/g95 % cat tst.f90 b = 0.0 do i=1, 10 do j=1, 3000000 call random number(a) a = 2.0*a - 1.0 b = b + sin(sin(sin(a))) enddo print *, i, b enddo end andy@fulcrum:~/g95/g95 % g95 tst.f90 andy@fulcrum:~/g95/g95 % a.out 1 70.01749 2 830.63153 3 987.717 4 316.48703 5 -426.53815 12
6 25.407673 (control-\ hit) Process dumped 7 -694.2718 8 -425.95465 9 -413.81763 10 -882.66223 andy@fulcrum:~/g95/g95 % ./dump Restarting ............Jumping 7 -694.2718 8 -425.95465 9 -413.81763 10 -882.66223 andy@fulcrum:~/g95/g95 % Otevˇren´e soubory mus´ı b´ yt pˇr´ıtomny na stejn´ ych m´ıstech jako v p˚ uvodn´ım procesu. Pˇri v´ıcejazyˇcn´em programov´ an´ı schopnost nemus´ı fungovat. Nejd˚ uleˇzitˇejˇs´ı pouˇzit´ı je zachov´an´ı bˇehu pˇres reboot nebo odhl´ aˇsen´ı, lze pouˇz´ıt i k pˇrekon´ an´ı limit˚ u na behov´ y ˇcas proces˚ u, nebo i pˇrenos bˇeˇz´ıc´ıho programu na jin´ y stroj. Automatick´e generov´ an´ı checkpoint˚ u lze zapnout nastaven´ım promˇenn´e prostˇred´ı G95 CHECKPOINT na poˇcet sekund mezi v´ ypisy. Nula znamen´ a bez v´ ypis˚ u. Nov´ y v´ ypis pˇrep´ıˇse star´ y.
Chytr´y pˇreklad Uvaˇzujme modul foo jehoˇz zdroj je v souboru foo.f95. Lze rozliˇsit dva druhy zmˇen ve foo.f95: 1. Zmˇeny kter´e mˇen´ı vnˇejˇs´ı vzhled foo, napˇr. zmˇena typu nebo rozhran´ı procedury; 2. Vnitˇrn´ı zmˇeny, ovlivˇ nuj´ıc´ı jen implementaci, napˇr. oprava chyby v k´odu. Oba druhy zmˇen obecnˇe zmˇen´ı objektov´ y k´od foo.o, ale jen prvn´ı druh opravdu zmˇen´ı foo.mod. Kdyˇz g95 znovu pˇrekl´ ad´ a modul, detekuje zda soubor .mod potˇrebuje update, a pokud jde o zmˇenu typu 2, ponech´ a star´ y soubor .mod nezmˇenˇen´ y (vˇcetnˇe data). Tato schopnost g95 br´ an´ı zbyteˇcn´ ym kompilaˇcn´ım kask´ad´am pˇri sestavov´an´ı velk´ ych program˚ u. Zavis´ıˇ pˇr´ımo (kv˚ li mnoho r˚ uzn´ ych zdroj´ ak˚ u na foo.mod, bud uli USE FOO) nebo nepˇr´ımo (uˇzit´ım modulu kter´ y pouˇz´ıv´ a foo, nebo uˇzit´ım modulu kter´ y pouˇz´ıv´a modul kter´ y pouˇz´ıv´a foo, atd). Zmˇena typu 1 ve foo.f95 zp˚ usob´ı rekompilaci vˇsech z´ avisl´ ych zdrojov´ ych soubor˚ u; naˇstˇest´ı takov´e zmˇeny nejsou nejˇcastˇejˇs´ı (alespoˇ n je-li interface peˇclivˇe navrˇzeno pˇredem). Bˇeˇzn ˇejˇs´ı zmˇeny typu 2 zp˚ usob´ı jen rekompilaci foo.f95 samotn´eho, naˇceˇz lze rovnou sestavit program s nov´ ym foo.o.
G95 Rozˇs´ıˇren´e vestavˇen´e funkce ACCESS INTEGER FUNCTION access(filename, mode) CHARACTER(LEN=*) :: filename CHARACTER(LEN=*) :: mode END FUNCTION access Kontroluje zda je soubor filename pˇr´ıstupn´ y ve specifikovan´em m´odu, kde m´od je jedno nebo v´ıce p´ısmen rwxRWX. Vr´ at´ı nulu je-li to tak, nenulovou hodnotu, je-li nˇeco ˇspatnˇe. ALGAMA REAL FUNCTION algama(x) REAL, INTENT(IN) :: x END FUNCTION algama Poˇc´ıt´ a pˇrirozen´ y logaritmus Γ(x). ALGAMA je element´aln´ı funkce pouˇziteln´a na jak´ ykoliv re´aln´ y typ. 13
BESJ0 REAL FUNCTION besj0(x) REAL, INTENT(IN) :: x END FUNCTION besj0 Poˇc´ıt´ a Besselovu funkci nult´eho ˇr´ adu prvn´ıho druhu. Element´aln´ı funkce. BESJ1 REAL FUNCTION besj1(x) REAL, INTENT(IN) :: x END FUNCTION besj1 Poˇc´ıt´ a Besselovu funkci prvn´ıho ˇr´ adu prvn´ıho druhu. Element´aln´ı funkce. BESJN REAL FUNCTION besjn(n,x) INTEGER, INTENT(IN) :: n REAL, INTENT(IN) :: x END FUNCTION besjn Poˇc´ıt´ a Besselovu funkci n-t´eho ˇr´ adu prvn´ıho druhu. Element´aln´ı funkce. BESY0 REAL FUNCTION besy0(x) REAL, INTENT(IN) :: x END FUNCTION besy0 Poˇc´ıt´ a Besselovu funkci nult´eho ˇr´ adu druh´eho druhu. Element´aln´ı funkce. BESY1 REAL FUNCTION besy1(x) REAL, INTENT(IN) :: x END FUNCTION besy1 Poˇc´ıt´ a Besselovu funkci prvn´ıho ˇr´ adu druh´eho druhu. Element´aln´ı funkce. BESYN REAL FUNCTION besyn(n,x) INTEGER, INTENT(IN) :: n REAL, INTENT(IN) :: x END FUNCTION besyn Poˇc´ıt´ a Besselovu funkci n-t´eho ˇr´ adu druh´eho druhu. Element´aln´ı funkce. CHMOD INTEGER FUNCTION chmod(file,mode) CHARACTER(LEN=*), INTENT(IN) :: file INTEGER, INTENT(IN) :: mode END FUNCTION chmod Zmˇen´ı unixov´ a pr´ ava k souboru. Vrac´ı nenulovou hodnotu pˇri chybˇe. DBESJ0 DOUBLE PRECISION FUNCTION dbesj0(x) DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION dbesj0 viz BESJ0. DBESJ1 DOUBLE PRECISION FUNCTION dbesj1(x) DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION dbesj1 viz BESJ1. 14
DBESJN DOUBLE PRECISION FUNCTION dbesjn(n,x) INTEGER, INTENT(IN) :: n DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION dbesjn viz BESJN. DBESY0 DOUBLE PRECISION FUNCTION dbesy0(x) DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION debsy0 viz BESY0. DBESY1 DOUBLE PRECISION FUNCTION dbesy1(x) DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION dbesy1 viz BESY1. DBESYN DOUBLE PRECISION FUNCTION dbesyn(n,x) INTEGER, INTENT(IN) :: n REAL, INTENT(IN) :: x END FUNCTION dbesyn viz BESYN. DCMPLX DOUBLE COMPLEX FUNCTION dcmplx(x,y) END FUNCTION dcmplx Double precision CMPLX, x a y mohou b´ yt libovoln´eho typu a druhu. DERF DOUBLE PRECISION FUNCTION derf(x) DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION derf viz ERF. DERFC DOUBLE PRECISION FUNCTION derfc(x) DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION derfc viz ERFC. DFLOAT DOUBLE PRECISION FUNCTION dfloat(x) END FUNCTION dfloat Alias pro DBLE. DGAMMA DOUBLE PRECISION FUNCTION dgamma(x) DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION dgamma Viz GAMMA. DLGAMA DOUBLE PRECISION FUNCTION dlgama(x) DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION dlgama viz ALGAMA. 15
DREAL DOUBLE PRECISION FUNCTION dreal(x) END FUNCTION dreal Alias pro DBLE. DTIME REAL FUNCTION dtime(tarray) REAL, OPTIONAL, INTENT(OUT) :: tarray(2) END FUNCTION dtime viz ETIME. ERF REAL FUNCTION erf(x) REAL, INTENT(IN) :: x END FUNCTION erf Poˇc´ıt´ a chybovou funkci x. Element´ aln´ı funkce. ERFC REAL FUNCTION erfc(x) REAL, INTENT(IN) :: x END FUNCTION erfc Poˇc´ıt´ a doplˇ nkovou chybovou funkci x. Element´aln´ı funkce. ETIME REAL FUNCTION etime(tarray) REAL, OPTIONAL, INTENT(OUT) :: tarray(2) END FUNCTION etime Nastav´ı tarray(1) na poˇcet uplynul´ ych sekund uˇzivatelsk´eho ˇcasu v aktu´aln´ım procesu. tarray(2) nastav´ı na poˇcet uplynul´ ych sekund syst´emov´eho ˇcasu v aktu´aln´ım procesu. Vrac´ı souˇcet tˇechto ˇcas˚ u. FNUM INTEGER FUNCTION fnum(unit) INTEGER, INTENT(IN) :: unit END FUNCTION fnum Vrac´ı deskriptor odpov´ıdaj´ıc´ı Fortransk´e I/O jednotce unit. Vrac´ı −1 nen´ı-li jednotka pˇripojena. FSTAT INTEGER FUNCTION fstat(unit, sarray) INTEGER, INTENT(IN) :: unit INTEGER, INTENT(OUT) :: sarray(13) END FUNCTION fstat Z´ısk´ a u ´daje o souboru otevˇren´em na I/O jednotce unit a uloˇz´ı je do pole sarray(1:13). Hodnoty jsou ˇ ıslo zaˇr´ızen´ı, sarray(2) ˇc´ıslo Inextrhov´ any ze struktury stat pouˇz´ıvan´e libc funkc´ı fstat(): sarray(1) C´ ode, sarray(3) m´ od souboru, sarray(4) poˇcet link˚ u, sarray(5) uid vlastn´ıka, sarray(6) gid vlastn´ıka, sarray(7) typ zaˇr´ızen´ı, sarray(8) velikost souboru. sarray(9) ˇcas pˇr´ıstupu, sarray(10) ˇcas modifikace, sarray(11) ˇcas zmˇeny, sarray(12) velikost bloku, sarray(13) alokovan´e bloky. FDATE CHARACTER(LEN=*) FUNCTION fdate() END FUNCTION fdate Vrac´ı aktu´ aln´ı datum a ˇcas jako Day Mon dd hh:mm:ss yyyy. FTELL INTEGER FUNCTION ftell(unit) INTEGER, INTENT(IN) :: unit END FUNCTION ftell Vr´ at´ı aktu´ aln´ı offset souboru na jednotce unit nebo −1 nen´ı-li jednotka pˇripojena. 16
GAMMA REAL FUNCTION gamma(x) REAL, INTENT(IN) :: x END FUNCTION gamma Poˇc´ıt´ a Γ(x). GAMMA je generick´ a funkce. GETCWD INTEGER FUNCTION getcwd(name) CHARACTER(LEN=*), INTENT(OUT) :: name END FUNCTION Uloˇz´ı aktu´ aln´ı adres´ aˇr do name. Vrac´ı nenulovou hodnotu v pˇr´ıpadˇe chyby. GETGID INTEGER FUNCTION getgid() END FUNCTION getgid Vrac´ı id skupiny aktu´ aln´ıho procesu. GETPID INTEGER FUNCTION getpid() END FUNCTION getpid Vrac´ı id aktu´ aln´ıho procesu. GETUID INTEGER FUNCTION getuid() END FUNCTION getuid Vrac´ı id uˇzivatele. HOSTNM INTEGER FUNCTION hostnm(name) CHARACTER(LEN=*), INTENT(OUT) :: name END FUNCTION hostnm Nastav´ı name name na syst´emov´e hostitelsk´e jm´eno. Vrac´ı nenulovou hodnotu v pˇr´ıpadˇe chyby. IARGC INTEGER FUNCTION iargc() END FUNCTION iargc Vrac´ı poˇcet argument˚ u pˇr´ıkazov´e ˇr´ adky (mimo program samotn´ y). ISATTY LOGICAL FUNCTION isatty(unit) INTEGER, INTENT(IN) :: unit END FUNCTION isatty Vrac´ı .true. je-li I/O jednotka unit pˇripojena k termin´alu. ISNAN LOGICAL FUNCTION isnan(x) REAL, INTENT(IN) :: x END FUNCTION isnan Vrac´ı .true. je-li x Not-a-Number (NaN). Element´aln´ı funkce. LINK INTEGER FUNCTION link(path1, path2) CHARACTER(LEN=*), INTENT(IN) :: path1, path2 END FUNCTION link Vyrob´ı tvrd´ y odkaz path1 na path2. 17
LNBLNK INTEGER FUNCTION lnblnk(string) CHARACTER(LEN=*), INTENT(IN) :: string END FUNCTION lnblnk Alias pro standardn´ı funkci len trim. LSTAT INTEGER FUNCTION LSTAT(file, sarray) CHARACTER(LEN=*), INTENT(IN) :: file INTEGER, INTENT(OUT) :: sarray(13) END FUNCTION LSTAT Je-li file symbolick´ y odkaz vrac´ı data o odkazu samotn´em. Viz FSTAT(). Vrac´ı nenulovou hodnotu v pˇr´ıpadˇe chyby. RAND REAL FUNCTION rand(x) INTEGER, OPTIONAL, INTENT(IN) :: x END FUNCTION rand Varc´ı pseudon´ ah. ˇc´ıslo s rovnom. rozdˇelen´ım v intervalu 0 ≤ rand < 1. Je-li x rovno 0, vrac´ı se dalˇs´ı ˇc´ıslov sekvenci. Je-li x rovno 1, gener´ ator se restartuje vol´an´ım srand(0). M´a-li x jinou hodnotu, je pouˇzita jako nov´ y seed pro srand(). SECNDS INTEGER FUNCTION secnds(t) REAL, INTENT(IN) :: t END FUNCTION secnds Vrac´ı m´ıstn´ı ˇcas v sekund´ ach od p˚ ulnoci minus t. SIGNAL FUNCTION signal(signal, handler) INTEGER, INTENT(IN) :: signal PROCEDURE, INTENT(IN) :: handler END FUNCTION signal Interface k unixov´e funkci signal. Vrac´ı nenulovou hodnotu v pˇr´ıpadˇe chyby. SIZEOF INTEGER FUNCTION sizeof(object) END FUNCTION sizeof Argument object je v´ yraz, promˇenn´ a nebo typ. Vrac´ı velikost object v bytech. STAT INTEGER FUNCTION stat(file, sarray) CHARACTER(LEN=*), INTENT(IN) :: file INTEGER, INTENT(OUT) :: sarray(13), status END FUNCTION stat viz FSTAT. SYSTEM INTEGER FUNCTION system(cmd) CHARACTER(LEN=*), INTENT(IN) :: cmd END FUNCTION system Spust´ı extern´ı pˇr´ıkaz cmd. Vr´ at´ı jeho n´ avratov´ y k´od. TIME INTEGER FUNCTION time() END FUNCTION time Vrac´ı aktu´ aln´ı ˇcas zak´ odovan´ y v cel´em ˇc´ısle jako u UNIXov´e funkce time. 18
UNLINK INTEGER FUNCTION unlink(file) CHARACTER(LEN=*), INTENT(IN) :: file END FUNCTION unlink Odlinkuje (smaˇze) soubor file. Vrac´ı nenulovou hodnotu v pˇr´ıpadˇe chyby. %VAL() Aplikov´ ana na aktu´ aln´ı argument pˇri vol´ an´ı funkce, zp˚ usob´ı jeho pˇred´an´ı hodnotou. Tato pseudofunkce nen´ı doporuˇcena, a je zahrnuta jen kv˚ uli kompatibilitˇe. F2003 atribut VALUE je standardn´ı mechanismus. %REF() Tot´eˇz, jen zajiˇsˇtuje pˇred´ an´ı odkazem.
G95 rozˇs´ıˇren´e vnitˇrn´ı subrutiny ABORT SUBROUTINE abort() END SUBROUTINE abort Ukonˇc´ı program s v´ ypisem j´ adra zasl´ an´ım sign´alu SIGABORT sobˇe (Unix). CHDIR SUBROUTINE chdir(dir) CHARACTER(LEN=*), INTENT(IN) :: dir END SUBROUTINE Nastv´ı aktu´ aln´ı adres´ aˇr na dir. DTIME SUBROUTINE dtime(tarray, result) REAL, OPTIONAL, INTENT(OUT) :: tarray(2), result END SUBROUTINE dtime viz funkce ETIME. ETIME SUBROUTINE etime(tarray, result) REAL, OPTIONAL, INTENT(OUT) :: tarray(2), result END SUBROUTINE etime viz funkce ETIME. EXIT SUBROUTINE exit(code) INTEGER, OPTIONAL, INTENT(IN) :: code END SUBROUTINE exit Ukonˇc´ı program s v´ ystupn´ım k´ odem code po zavˇren´ı otevˇren´ ych I/O jednotek. Generick´a subrutina. FDATE SUBROUTINE fdate(date) CHARACTER(LEN=*), INTENT(OUT) :: date END SUBROUTINE fdate viz funkce FDATE. FLUSH SUBROUTINE flush(unit) INTEGER, INTENT(IN) :: unit END SUBROUTINE flush Spl´ achne I/O jednotku unit otevˇrenou pro v´ ystup. 19
FSTAT SUBROUTINE FSTAT(unit, sarray, status) INTEGER, INTENT(IN) :: unit INTEGER, INTENT(OUT) :: sarray(13), status END SUBROUTINE fstat viz funkce FSTAT. GETARG SUBROUTINE getarg(pos, value) INTEGER, INTENT(IN) :: pos CHARACTER(LEN=*), INTENT(OUT) :: value END SUBROUTINE Nastav´ı promˇennou value na pos-t´ y arhument pˇr´ıkazov´e ˇr´adky. GETENV SUBROUTINE getenv(variable, value) CHARACTER(LEN=*), INTENT(IN) :: variable CHARACTER(LEN=*), INTENT(OUT) :: value END SUBROUTINE getenv Nastav´ı promˇennou value na hodnotu promˇenn´e prostˇred´ı variable. GETLOG SUBROUTINE getlog(name) CHARACTER(LEN=*), INTENT(OUT) :: name END SUBROUTINE getlog Vrac´ı pˇrihlaˇsovac´ı jm´eno procesu v promˇenn´e name. IDATE SUBROUTINE idate(m, d, y) INTEGER :: m, d, y END SUBROUTINE idate Nastav´ı m na aktu´ aln´ı mˇes´ıc, d na den v mˇes´ıci a y na aktu´aln´ı rok. Tahle subrutine nen´ı pˇr´ıliˇs pˇrenositeln´ a V nov´ ych k´ odech pouˇzijte standardn´ı subrutinu DATE AND TIME. LSTAT SUBROUTINE lstat(file,sarray,status) CHARACTER(LEN=*), INTENT(IN) :: file INTEGER, INTENT(OUT) :: sarray(13), status END SUBROUTINE lstat Viz funkce LSTAT. RENAME SUBROUTINE rename(path1, path2, status) CHARACTER(LEN=*), INTENT(IN) :: path1, path2 INTEGER, OPTIONAL, INTENT(OUT) :: status END SUBROUTINE rename Pˇrejmenuje soubor path1 na path2. Je-li pˇr´ıtomen argument status, je nastaven na nenulovou hodnotu v pˇr´ıpadˇe chyby. SIGNAL SUBROUTINE signal(signal, handler, status) INTEGER, INTENT(IN) :: signal PROCEDURE, INTENT(IN) :: handler INTEGER, INTENT(OUT) :: status END SUBROUTINE signal Viz funkce SIGNAL. 20
SLEEP SUBROUTINE sleep(seconds) INTEGER, INTENT(IN) :: seconds END SUBROUTINE sleep Zp˚ usob´ı ˇcek´ an´ı procesu na seconds sekund. SRAND SUBROUTINE srand(seed) INTEGER, INTENT(IN) :: seed END SUBROUTINE srand Reinicializuje gener´ ator pseudon´ ahodn´ ych ˇc´ısel. Viz C funkce srand(). STAT SUBROUTINE stat(file, sarray, status) CHARACTER(LEN=*), INTENT(IN) :: file INTEGER, INTENT(OUT) :: sarray(13), status END SUBROUTINE Viz funkce FSTAT. SYSTEM SUBROUTINE system(cmd, result) CHARACTER(LEN=*), INTENT(IN) :: cmd INTEGER, OPTIONAL, INTENT(OUT) :: result END SUBROUTINE system Viz funkce SYSTEM. UNLINK SUBROUTINE unlink(file, status) CHARACTER(LEN=*), INTENT(IN) :: file INTEGER, INTENT(OUT) :: status END SUBROUTINE unlink Viz funkce UNLINK.
21