Mots clés : programmation à objets
répartie, analyses de programmes, code mobile, collecticiels,
communication de groupe, concurrence, distribution,
synchronisation, sécurité .
Participants : Isabelle Attali,
FranÇoise Baude, Alexandre Bergel, Denis Caromel, Florian
Doyon, Romain Guider, Fabrice Huet, Francis Montagnac,
Olivier Nano, Emmanuel Reuter, David Sagnol, Bernard
Serpette, Julien Vayssière.
Le paradigme objet, même s'il date des années 70, reste un
des aspects des langages de programmation les plus étudiés de
nos jours. Ces dernières années, avec l'apparition du langage
Java, on a pu observer une recrudescence de l'activité autour
de la méthodologie objet. Autant le concept se veut
universel, autant les variations des modèles et leurs
implémentations possèdent des propriétés spécifiques souvent
mal définies : sous la même terminologie objet, se
retrouvent des thèmes particuliers, comme l'héritage (simple
ou multiple), le sous-typage, la surcharge, etc.
D'autre part, les aspects programmation concurrente (en
particulier, multi-threading, accès concurrents) viennent
apporter un degré supplémentaire de complexité. Le mélange de
l'ensemble de ces traits peut faire apparaître des cas où la
spécification du langage reste floue et pour lesquels la
construction d'applications et leur mise au point restent
délicates.
Le langage Java peut être également abordé comme un
langage très prometteur pour la programmation distribuée sur
un réseau ; l'arrivée de Java a laissé espérer que l'on
pourrait distribuer des applications haute performance sur le
réseau Internet, premier pas vers le méta-computing.
Malheureusement, les composants Java standards tels que RMI
(Remote Method Invocation) n'aident en fait pas à construire
de manière transparente des applications séquentielles,
multi-threadées, ou distribuées, en permettant l'exécution
d'une même application sur une architecture multi-processeurs
à mémoire partagée aussi bien que sur un réseau de stations
de travail (intranet, Internet), ou encore sur n'importe
quelle combinaison hiérarchique des deux.
La question est donc : comment construire, à partir des
outils standards (par exemple threads, RMI, etc), des modèles
et bibliothèques facilitant la programmation distribuée?
Nous avons développé des compétences en programmation
concurrente, répartie et parallèle dans le cadre des langages
à objets ; ces recherches sont menées aussi bien sur des
aspects théoriques comme les sémantiques formelles, ou les
analyses statiques et transformations pour la répartition
automatique ou semi-automatique, que sur des aspects
pragmatiques comme la conception de langages et de méthodes
de programmation [6], ou la construction de bibliothèques
pour le parallélisme [4,5].
Nous avons également étudié les problèmes des supports
d'exécution de ces bibliothèques [33] (mise
en oeuvre portable, optimisations, etc).