Concepts ILE

BoTTom |    Changer de couleur
                               I L E   
 
La phase traditionnelle d'un compilateur est la traduction de code source
 en instructions machines. Puis, dans un deuxième temps intervient une
 phase de liage, intégrant plusieurs modules déja compilés et gérant les
 liens entre ces modules(appels, points de retour et partage des variables)
 
L'une des particularités de l'AS/400 est (était) de générer en une seule
 phase des pgms directement exécutables et autonomes.
 
Le lien avec d'autres pgms se faisant à l'exécution, c'est à dire :
 
 - recherche du pgm appelé (liste de bibliothèques,
                            contrôle des autorisations,
                            résolution de l'adresse),
 
 - réservation mémoire et chargement, gestion du point de retour
 
 - transmission des paramètres (passage d'adresse)
 
Ce type de pgm est appelé aujourd'hui OPM (Original Program Model),
   les liens générés à l'exécution étant des liens dynamiques


|    Changer de couleur
 
IBM nous propose aujourd'hui le concept ILE :
 
 Integrated Language Environment
 
Environnement commun SAA (compilateurs et CPI communs)
 
Apportant : des liens statiques ET dynamiques
            des routines communes de gestion - d'erreurs
                                             - de messages
                                             - de mémoire
            du débogage avec visualisation de source
            l'optimisation du code généré
            des routines générales           - mathématiques
                                             - dates et heures
                                             - gestion dynamique d'écran
 
en V2R30 par l'intermédiaire de ILE C/400
 
en V3R10 ILE/RPG-IV , ILE/COBOL et CL
         ce sont de nouveaux compilateurs, de nouveaux produits,
         un nouveau type de source (RPGLE par ex.)


|    Changer de couleur
 Quelques particularités des compilateurs ILE :
 
 - optimisation améliorée : + code plus granulaire
 
                            + élimination des sous-expressions communes
                               1 x = B * C
                               2 y = (B * C) + (D * E) ==> B * C éliminé
 
                            + élimination des redondances
                               1 A = B + C
                                  ...
                                  ...  A non utilisé
                               99 A = E + F ==> instruction 1 éliminée
 
      CRTxxxMOD OPTIMIZE(*NONE,*BASIC,*FULL)
 
 - débogage avec visualisation du source
 
      CRTxxxMOD DBGVIEW(*STMT=instructions,
                        *SOURCE=visu du source,
                        *LIST=liste de compil,
                        *NONE (dft) ,*ALL)


|    Changer de couleur
LIEN STATIQUE:
 
unité d'utilisation = procédure  - partie de code à point d'entrée unique
                                 - réalise une fonction, une action
                                 - n'est PAS un objet OS/400
 
                         V3r10     + RPG      : une procédure par source
                         V3r60                : x procédures par source
                                   + COBOL    : x procédures  par source
                                   + C/400    : x procédure(s) par source
 
Appel d'une procédure = "call bound"
                (CALLB en RPG, CALL PROCEDURE en COBOL, CALLPRC en CL)
 
les procédures apparaissent dans la liste d'invocation (DSPJOB/opt 11)
 
unité de compilation = module    - résultat d'une compil.
                                 (base = un membre source)
                                 - contient une ou plusieurs procédures
                                 (code compilé)
                                 - c'est un objet OS/400 *MODULE 
                                 - n'est PAS EXECUTABLE


|    Changer de couleur
 
LIEN STATIQUE:
 
unité d'exécution = programme    - objet de type *PGM
                                 - lien dynamique (appel par CALL)
                                 - OPM = CRTxxxPGM
                                   xxx étant le type de source
                                   ILE = CRTPGM
                                         phase de liage de modules existants
                                         = LIENS STATIQUES (copie de code)
 
AVANTAGES:
 
          - meilleures performances
          - meilleure intégration de langages différents
          - préambule à la POO ? (Programmation Orientée Objet)
 
INCONVENIENTS:
 
          - duplication du code = moins de souplesse, duplication en mémoire
                                = maintenance des applicatifs compliquée !!!
 


|    Changer de couleur
                         CRTxxxMOD           CRTPGM PGM(PROG01) +
                                                    MODULE(A B C)
 ..fichier source............
 : .RPG...................  :
 : :                     :  :   ############### 
 : :        membre A     :  :-> # MODULE A    # --  ####################### 
 : :.....................:  :   ###############  !  # PROG01 : *PGM       # 
 :                          :                    !  ####################### 
 : .COBOL.................  :   ###############  !  #      #       #      # 
 : :        membre B     :  :-> # MODULE B    #   > #      #       # P1   # 
 : :.....................:  :   ###############  !  #  A   #   B   ######## 
 : .C.....................  :                    !  #      #       #      # 
 : : membre C | P1  | P2 :  :-> ###############  !  #      #       # P2   # 
 : :.....................:  :   # MOD.C P1 P2 # --  #      #       #      # 
 :..........................:   ###############     ####################### 
 
la création de PROG02 à partir des modules A,E,F,G entraînerait la
 duplication du module A dans cet autre programme.
 
==> pas de recherche d'adresse,de mémoire,etc.. à l'appel de module A
 
==> si modification du module A : recréation des pgms PROG01 et PROG02.


|    Changer de couleur
 
MAIS: les liens dynamiques (CALL) sont toujours valides
 
      vous pouvez créer des pgms simples ne contenant qu'un seul module
 
      CRTBNDRPG   = CRTRPGMOD
                    +
                    CRTPGM
                    +
                    DLTMOD
 
    Pour diminuer les problèmes de duplication de code pour les procédures
     souvent utilisées, ILE introduit un nouveau type d'objet:  *SRVPGM 
     (programme de service,équivalent des DLL Windows ou OS/2)
 
    Objet contenant un ensemble de modules (donc de procédures)
 
    Le lien est fait par référence (dynamique) à l'appel du pgm principal,
     ensuite l'appel d'une procédure est statique.
 
    (les modules système sont des *SRVPGM = bibliothèques de fonctions)
 


|    Changer de couleur
 
*SRVPGM:
 
                         CRTxxxMOD           CRTSRVPGM SRVPGM(SRV01) +
                                                       MODULE(B C)
                                                       EXPORT(*ALL)
 
 ..fichier source............
 : .RPG...................  :
 : :                     :  :   ############### 
 : :        membre A     :  :-> # MODULE A    #                        
 : :.....................:  :   ############### 
 :                          :                              ################ 
 : .COBOL.................  :   ############### --         #       #      # 
 : :        membre B     :  :-> # MODULE B    #  !         #       # P1   # 
 : :.....................:  :   ###############   >        #   B   ######## 
 : .C.....................  :                    !         #       #      # 
 : : membre C | P1  | P2 :  :-> ###############  !         #       # P2   # 
 : :.....................:  :   # MOD.C P1 P2 # --         #       #      # 
 :..........................:   ###############            ################ 
 
 


|    Changer de couleur
 
*SRVPGM:
 
                         CRTxxxMOD           CRTPGM PGM(PROG01)
                                                    MODULE(A)
                                                    BNDSRVPGM(SRV01)
 
 ..fichier source............                             ################# 
 : .RPG...................  :                             # Prog01        # 
 : :                     :  :   ###############           # (ref : SRV01) # 
 : :        membre A     :  :-> # MODULE A    # ------>   ################# 
 : :.....................:  :   ###############              /
 :                          :                              ################ 
 : .COBOL.................  :   ###############            #       #      # 
 : :        membre B     :  :-> # MODULE B    #            #       # P1   # 
 : :.....................:  :   ###############            #   B   ######## 
 : .C.....................  :                              #       #      # 
 : : membre C | P1  | P2 :  :-> ###############            #       # P2   # 
 : :.....................:  :   # MOD.C P1 P2 #            #       #      # 
 :..........................:   ###############            ################ 
 
 


|    Changer de couleur
 
 On peut modifier un module dans un programme existant sans re-linker :
 
 
    UPDPGM  PGM(PROG01)  MODULE(A)
 
 
 
 On peut modifier un programme de service de la même manière  :
 
 
    UPDSRVPGM  SRVPGM(SRV01) MODULE(B)
 
 
 
 Attention, si l'on ajoute un module dans le programme de service il y a
  alors un contrôle (type level-check) avec les programmes qui utilisent.
 
 il faut recompiler les programmes
 
 
 


|    Changer de couleur
 
 OU, utiliser le langage d'exportation
 
    avec EXPORT(*SRCFILE) et placer dans QSRVSRC des ordres :
 
     STRPGMEXP PGMLVL(*CURRENT) LVLCHK(*NO)
 
 ou  STRPGMEXP PGMLVL(*CURRENT) LVLCHK(*YES) SIGNATURE(xxx)
                                [ici la signature est imposée]
 
     et placer un ordre EXPORT par procédure
 
 
exemple :
 
    ******* début des données **********
    STRPGMEXP PGMLVL(*CURRENT) SIGNATURE(V1)
    EXPORT SYMBOL('B')
    EXPORT SYMBOL('P1')
    EXPORT SYMBOL('P2')
    ENDPGMEXP
    ********* fin des données ***********


|    Changer de couleur
 
Pour faciliter le liage, il existe un nouveau type d'objet *BNDDIR 
(Binding directory) = répertoire de liage
 
Référence un ensemble de modules et de pgms de service dont peut avoir
 besoin une application, évite de lister tous les modules à lier.
 
Le programme de liage ira chercher dans cette "directory" toutes les
 références non résolues. (noms de modules et de fonctions non trouvés)
 
Commandes associées : CRTBNDDIR          ADDBNDDIRE
                      DLT  "             RMV "  "
                      DSP  "             WRK "  "
                      WRK  "
 
 
 
ET ENFIN ILE apporte un nouveau concept : la notion de groupe d'activation 
 
C'est un sous-ensemble de la notion de job permettant un cloisonnement,
 donc une indépendance, des applications.
 


|    Changer de couleur
 
Chaque programme détermine à quel groupe d'activation il appartient:
 
 indiqué à la création CRTPGM      ACTGRP( *NEW > un nouveau groupe est créé
                       CRTSRVPGM           *CALLER > groupe d'activation de
                                                     l'appelant
                                           un_nom  > appartient à ce groupe)
 
 
Un groupe d'activation possède ses propres ressources :
 
          - contrôle de validation (COMMIT/ROLLBACK)
 
          - ODP (ouverture de fichiers)
                - partage (SHARE)                          = OPNSCOPE()
                - utilisation d'un résultat OPNQRYF             "
                - influence d'une commande de substitution = OVRSCOPE()
 
          - option de nettoyage (RCLRSC <> RCLACTGRP)
 
          - établit une frontière pour la gestion des erreurs (messages)
            (influence d'une erreur dans la liste d'invocation)


|    Changer de couleur
 
Tout job possède au moins un groupe d'activation : *DFTACTGRP.
 
Chaque groupe d'activation possède un identifiant numérique unique
 
Résumé :
 
       création du groupe d'activation lors de l'appel du premier pgm
        de ce groupe.(les pgms OPM ont le même groupe d'activation)
 
       détruit par :  - un ordre de fin sur le programme, si *NEW.
                         (SETON LR en RPG, STOP RUN en COBOL, ...)
 
                      - la commande RCLACTGRP ou SIGNOFF.
 
                      - tant que le groupe d'activation existe,
 
                          la mémoire associée aux programmes (même terminés)
                          n'est pas récupérée (appels suivants plus rapides)
 
                          les programmes de services restent chargés
 





©AF400