Aktualności i artykuły

Opublikowano: 14 listopada 2012
Kategoria wpisu: poradnikiprogramowanie

ILE RPG – parametry kompilacji i dyrektywy kompilatora

Parametry kompilacji ILE RPGOdpowiednie 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.

^