Concepts ILE

BoTTom |   
                               I L E   
La phase traditionnelle d'un compilateur est la traduction de code source
 en instructions machines.Puis dans un deuxiemème temps intervient une
 phase de liage,intégrants 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 directements exécutables et autonomes.
 
Le lien avec d'autres pgms se faisant à l'exécution; c'est à dire.
 
 recherche du pgm appellé (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 appellé aujourd'hui OPM (original Program Modele)
 
   les liens générés à l'exécution étant des liens dynamiques


|   
 
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
            optimisation du code généré
            des routines générales           - mathématiques
                                             - dates et heures
                                             - gestion dynamique d'écran
 
Aujourd'hui par l'intermédiaire de ILE C/400
 
Demain (lettres d'intention) ILE/RPG et ILE/COBOL et CL de la V3R10.
                             ce sont de nouveaux compilateurs
                                     de nouveaux produits


|   
 
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
 
                                   + RPG , COBOL : une procédure par source
                                                                 par compil
                                   + C/400       : x procédure(s) par compil
 
Appel d'une procédure = "call bound"
                      ("CALLB" en RPG, CALL LINK en COBOL ????)
 
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


|   
 
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
                                = maintenance des applicatifs !!!
 


|   
                         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 entrainerait la
 duplication du module A dans ce programme.
 
==> pas de recherche d'adresse,de mémoire,etc.. à l'appel de module A
 
==> en cas de modif du module A : recréation des pgms PROG01 et PROG02.


|   
 
MAIS: les liens dynamiques (CALL) sont toujours valides
 
      vous pouvez créer des pgms simples ne contenant qu'un seul module
 
      CRTBNDxxx   = CRTXXXMOD
                    +
                    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,
      ensuite l'appel d'une procédure est statique.
 
    (les modules systèmes sont des *SRVPGM = bibliothèques de fonctions)
 


|   
*SRVPGM:
     voir QSNAPI   DSM (Dynamic Screen Manager).
 
                      gestion dynamique d'écrans
                                        de sessions
                                        de fenètrage
                      (parfaite connaissance du 5250 nécessaire)
 
          QLE...   fournissant des fonctions
                             - soit communes aux compilateurs ILE / SAA
                               (procédures CEE......)
                             - soit spécifiques à l'AS/400
                               (procédures CEE4...)
 
                             + gestion des groupes d'activation
                             + gestion des erreurs
                             + fonctions date et heure
                             + fonctions mathématiques
                             + gestion mémoire et tas (heap)
 
          QC2...   fonctions destinées au compilateur ILE C/400
 


|   
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. (nom 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.
 
chaque programme détermine à quel groupe d'application 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
 
          ° visibilité (partage) des variables
 
          ° contrôle de validation (COMMIT/ROLLBACK)
 
          ° ODP (ouverture de fichiers)
                - partage (SHARE)
                - 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)
 


|   
 
Tout programme du groupe peut arreter le groupe d'activation.
 
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, STOP en RPG
                                         STOP RUN en COBOL
                                         EXIT en C
 
                      - une condition d'exeption (message) non traitée
 
                      - la cde RCLRSC
                           ou  RCLACTGRP
 
 


|   
 
 Autres 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
 
   (indépendant du type de terminal)
 
CRTxxxMOD DBGVIEW(*STMT=instructions,*SOURCE=visu du source,
                  *LIST=liste de compil,*NONE,*ALL)





©AF400