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) |