ILE RPG – parametry kompilacji i dyrektywy kompilatora
Odpowiednie wykorzystanie mechanizmów kompilatora oraz parametrów kompilacji może znacznie uÅ‚atwić tworzenie kodu programu i peÅ‚nić znaczÄ…cÄ… rolÄ™ w „utrzymywaniu” dobrze napisanego kodu, szczególnie tego stworzonego w ILE RPG.
Parametry kompilacji
Zacznijmy od kompilacji i parametru najważniejszego z „developerskiego” punktu widzenia.
Parametr „Debugging View” :
- *SOURCE – brak fragmentów kodu wstawianych za pomocÄ… dyrektywy /COPY, brak zmiennych watch, operacja wejÅ›cia/wyjÅ›cia powoduje zatrzymanie na definicji pliku
- *COPY – tak samo jak *SOURCE lecz bloki kodu wstawione za pomoca /COPY sÄ… widoczne
- *LIST – wszystkie ograniczenia z *SOURCE znikajÄ… (copysource’y sÄ… widoczne, można definiować zmienne do „Å›ledzenia”, operacja I/O nie zatrzymuje procesu)
- *ALL – podobnie jak dla *LIST ale w zależnoÅ›ci od innego parametru – Compiler option (OPTION)
- *NONE – wykorzystywana do tworzenia wersji „produkcyjnych” – żadne widoki nie sÄ… doÅ‚Ä…czane do kompilowanego obiektu;
Wnioski praktyczne:
- dobrą metodą na zapobieżenie zatrzymywania się na operacjach wejścia/wyjścia jest zdefiniowanie parametru *NODEBUGIO w sekcji H źródła programu;
- równie dobrÄ… praktykÄ… jest ustawienie parametru *SRCSTMT, co pozwala na numerowanie linii programu w widoku debuger’a tak samo jak w źródÅ‚ach programu; innymi sÅ‚owy zapobiega przenumerowaniu linii przez debuger.
Konkluzja jest następująca: domyślne parametry kompilacji w przypadku prac developerskich powinny być ustawiane na *LIST lub *ALL (w przypadku parametru Debugging View), ale należy pamiętać że parametry wprowadzone w źródle programu w sekcji H będą miały zawsze pierwszeństwo przed tymi podawanymi podczas kompilacji.
Dyrektywy kompilatora
Jak sama nazwa wskazuje dyrektywy kompilatora to instrukcje wykonywane podczas kompilacji źródła programu. Te najbardziej znane to /COPY oraz /INCLUDE, ale poza nimi istnieje cały szereg innych nie mniej pomocnych.
Przykładowe źródło programu z wprowadzonymi dyrektywami kompilacji mogłoby wyglądać następująco:
H Debug DatEdit(*MDY/) H Option(*SrcStmt:*NoDebugIO) /If Defined(*CRTBNDRPG) H DftActGrp(*No) ActGrp('NEWGRP') BndDir('NEWBNDDIR') /EndIf
Dyrektywa /IF DEFINED(*CRTBNDRPG) pozwala na rozpoznanie czy źródło programu będzie skompilowane za pomocą komendy Create Bound RPG program (CRTBNDRPG). *CRTBNDRPG jest nazwą predefiniowaną. Jeśli do kompilacji zostanie użyta komenda CRTBNDRPG to można podać kolejne parametry kompilacji związane z ta komendą, a więc: grupy aktywacji oraz tzw. binding directory (katalogi wykorzystywane do określenia modułów oraz tzw. programów serwisowych które należy dołączyć do skompilowanego obiektu). W przypadku kompilacji za pomocą komendy CRTRPGMOD parametry te byłyby błędne.
Wykorzystując powyższe mechanizmy możemy stworzyć szablony z definicjami dla kompilatora, które w zależności od wykonywanej kompilacji odpowiednio przygotują nasze obiekty. Niewątpliwie pozwala to uprościć i w pewien sposób zautomatyzować proces przygotowania obiektów składających się na nasze aplikacje.