Interfaçage entre Ada et d'autres langages de programmation Pierre-Marc Fournier, étudiant M.Sc.A. Laboratoire CASI École Polytechnique de Montréal Cours INF6300 2008/04/03 Introduction – mise en situation ● ● ● Ada en déclin Transition progressive = besoin d'interaction avec les autres langages Autres raisons d'interagir ● Performance ● Limites du langage Introduction – types d'interaction ● ● Appel d'un programme écrit dans un autre langage ● Envoi de données en entrée ● Lecture de la sortie Communication interprocessus ● ● Pipes, sockets (réseau), SYSV IPC, mémoire partagée Programmes hybrides contenant du code de plusieurs langages Programme de la présentation ● Interface Ada / C ● Interface Ada / Assembleur ● Interface Ada / Java ● Autres interfaces Interface entre Ada et C ● Code Ada appelle fonction C ● Code C appelle fonction Ada ● Problématiques: ● Visibilité des fonctions ● Équivalence des types ● Conventions d'appel Équivalence de types Ada/C Type C int short signed char long long long float float double Type Ada Integer Short_Integer Short_Short_Integer Long_Integer Long_Long_Integer Short_Float Float Long_Float Équivalence de types Ada / C ● Package Interfaces.C ● Types équivalents, incluant les unsigned ● Fonctions de conversion de strings Ada / C ● ● To_C() et To_Ada() Package Interfaces.C.Strings ● Fonctions d'allocation de strings C ● Strlen(), ... Équivalence de types Ada / C ● Package Interfaces.C.Pointers ● ● Package générique permettant la manipulation de pointeurs Définit des opérateurs pour l'arithmétique de pointeurs Ada appelle fonction C Ada appelle fonction C Ada appelle fonction C Ada appelle fonction C C appelle fonction Ada C appelle fonction Ada Ada appelle fonction C C appelle fonction Ada C appelle fonction Ada C appelle fonction Ada Interface entre Ada et l'assembleur ● Pourquoi interfacer Ada avec l'assembleur? ● Entrées/sorties => Ada n'en a pas ● Performance ● Utilisation de fonctionalités précises du matériel Interface entre Ada et l'assembleur ● Comment interfacer Ada avec l'assembleur? ● Fichiers assembleur distincts ● ● On les compile et on les interface exactement comme le C ● Utilisation nécessaire de l'ABI C ● Appels dans les deux directions Assembleur en ligne Interface entre Ada et l'assembleur Interface entre Ada et l'assembleur Interface entre Ada et Java - Introduction ● Java est un langage mais aussi un environnement d'exécution ● Java bytecode != instructions natives ● Utilisation de machine virtuelle ● Ada est compilé en instructions natives ● Impossible de linker directement les modules Ada et java ensemble Interface entre Ada et Java - Approches ● Compilation de Ada en bytecode Java ● ● ● ● JGNAT, AppletMagic Permet aux classes Java de voir les classes Ada et réciproquement Exige que le code Ada soit conçu dès le départ pour respecter les conventions Java Utilisation de la Java Native Interface Compilation de Ada en JCode Exemple de classe Java Compilation de Ada en JCode Package équivalent en Ada Appel de Ada à partir de Java Appel de Ada à partir de Java Appel de Ada à partir de Java Appel de Ada à partir de Java Appel de Ada à partir de Java Appel de Ada à partir de Java Appel de Java à partir de Ada Appel de Java à partir de Ada Appel de Java à partir de Ada Appel de Java à partir de Ada Appel de Java à partir de Ada Appel de Java à partir de Ada Autres interfaces existantes ● ● Interfaces vers COBOL et FORTRAN définies dans le standard Ada Interface vers C++ ● ● ● Essentiellement comme C Pragmas pour s'assurer que des types record sont organisés de la même façon qu'une classe Pragmas pour accéder à la vtable des classes C++