Interface entre Ada et Java

publicité
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++
Téléchargement