Le sujet proposé porte sur la programmation à objets parallèle et distribuée dans la cadre du langage Java. L'objectif est de définir et de développer des techniques et outils permettant cette programmation. A plus long terme, un des buts est la définition de standards sous la forme de bibliothèques ou d'API.
Depuis environ un an, le projet SLOOP est très fortement impliqué dans un groupe de travail européen: Europa Working Group on Parallel C++ (Esprit Reference Number 9502). Proposer et définir un standard pour la programmation parallèle en C++ constitue le but principal de ce projet européen. Des résultats très encourageants ont été obtenus; une proposition préliminaire est diffusée (http://www.lpac.ac.uk/europa), et une version synthétique a été publiée dans une conférence internationale dédiée à la programmation parallèle et distribuée [4]. Le langage C++// [3] actuellement développé par le projet SLOOP est conforme au standard proposé par Europa.
Le sujet de DEA proposé correspond à une action parallèle et coordonnée avec l'effort de standardisation mené sur C++. Il s'agit d'étudier comment le standard proposé par Europa peut être adapté à Java. Le but étant bien sûr de disposer de standards de programmation parallèle similaires pour les deux langages, et d'augmenter ainsi leur diffusion. Europa est structuré en quatre parties (Level 0, Level 1, Hardware Models, et Application Libraries). C'est principalement Level 0, le coeur du standard, indépendant de tout modèle de programmation parallèle, qu'il faudra étudier et adapter à Java. Level 1, un ensemble de bibliothèques standards pour la programmation parallèle, construit au dessus de Level 0, sera également concerné par cette étude -- en particulier C++// qui est en fait une bibliothèque construite au dessus d'Europa Level 0.
Des études préliminaires nous laissent penser que l'adaptation d'Europa à Java, d'une certaine manière sa généralisation, préfigure toutes les chances de succès. Les mécanismes mis en oeuvre dans Europa sont relativement généraux, spécifiques à la programmation à objets, mais très peu spécifiques à C++. Il est donc tout à fait envisageable d'utiliser des mécanismes similaires en Java. D'autre part, une des caractéristiques d'Europa étant de simplifier la construction d'applications distribuées, en particulier par la réutilisation de code initialement séquentiel, l'application de ces techniques à Java semble des plus pertinentes, en particulier dans le contexte de projets de calculs distribués sur des réseaux internationaux.
Cependant, il ne s'agit pas de réaliser une simple traduction du standard de C++ vers Java: des problèmes nouveaux, ainsi que de nouvelles opportunités techniques apparaissent de par certaines caractéristiques du langage.
Par exemple, le mécanisme d'implantation d'Europa C++ met en oeuvre des techniques de pré-processeur. La présence du byte code et d'une machine virtuelle laisse entrevoir la possibilité d'utiliser des techniques moins statiques où le code nécessaire est généré dynamiquement; ainsi, la plateforme matérielle sur laquelle s'exécute une application n'est pas figée statiquement lors de la compilation. Cette méthode pourrait d'ailleurs coexister avec la technique classique utilisée pour C++ qui est bien sur moins coûteuse lors de l'exécution.
Au registre des problèmes à résoudre, citons tout d'abord celui de la sécurité. Java et sa machine virtuelle incorporent des contrôles qui permettent d'assurer une (certaine) sûreté de fonctionnement, en particulier lors de son utilisation sur des réseaux tel qu'Internet. Europa, quant à lui, apporte une grande flexibilité, par exemple en permettant de programmer d'une façon transparente pour l'utilisateur des appels à distance. Le problème sera de réussir à donner cette flexibilité tout en conservant la validité des contrôles standards.
D'autre part, contrairement à C++, Java incorpore directement dans la définition du langage ou des bibliothèques de base des mécanismes d'exécutions parallèles (e.g. la possibilité de créer et contrôler des threads par la classe Thread et l'interface Runnable, la synchronisation de routines par le mot-clé synchronized). La difficulté sera de proposer pour le standard de Java des mécanismes qui sont complémentaires et cohérents avec les primitives de base. A priori, cette difficulté interviendra plutôt lors de la définition des bibliothèques standards (Europa Level 1), Level 0 étant complètement indépendant de tout parallélisme.
Les recherches et propositions seront validées par une implémentation. L'étudiant s'intégrera au projet SLOOP (projet commun Inria Sophia Antipolis - Université de Nice - CNRS). Une formation en programmation à objets (e.g. C++) est indispensable pour ce sujet, par contre, la connaissance du langage Java ne l'est pas forcément -- son apprentissage est relativement simple.
Notes importantes:
Ce sujet rentre dans le cadre d'une collaboration avec une société américaine. A la suite du DEA, de Juillet à Septembre 1997, il est prévu et souhaitable que l'étudiant qui réalisera ce sujet parte en stage rémunéré dans cette société, dans la région de Palo Alto/San José (Californie), afin de poursuivre les travaux.
La collaboration avec la société devrait se poursuivre dans le cadre d'une thèse, il est donc important que l'étudiant soit a priori motivé pour poursuivre les travaux par une thèse de Doctorat.
Bibliographie:
[1] F. Baude, F. Belloncle, D. Caromel,
N. Furmento, P. Mussi, Y. Roudier, G. Siegel,
``Parallel Object-Oriented Programming for Parallel Simulations''.
To appear in Information Sciences Journal, Informatics and
Computer Science, Special issue on ``Object-Oriented Programming'',
North-Holland, Elsevier Publishing Co., 1996.
[2] D. Caromel,
``Towards a Method of Object-Oriented Concurrent Programming", CACM,
Communications of the ACM, September 1993, Volume 36, Number 9, pp. 90-102.
[3] D. Caromel, F. Belloncle, Y. Roudier,
``The C++// System",
to appear in G. Wilson and P. Lu editors,
``Parallel Programming Using C++", MIT Press, 1996.
[4]
Caromel D., Dzwig P., Kauffman R., Liddell H., McEwan A.,
Mussi P., Poole J., Rigg M., Winder R.,
``EC++ - EUROPA Parallel C++ : A Draft Definition'',
proceedings High-Performance Computing and Networking (HPCN'96),
pp. 848-857, Brussels, Belgium, April 1996,
Springer, Lectures Notes in Computer Science (LNCS), No 1067,
ISBN 3-540-61142-8.
[5] D. Caromel, Y. Roudier,
``Reactive programming in Eiffel//",
To appear in ``Object Based Parallel and Distributed Computing'',
Springer Verlag, Lectures Notes in Computer Science (LNCS), 1996.
[6]
Attali I., Caromel D., Ehmety S. O., Lippi S.
``Semantic-based visualization for parallel object-oriented programming'',
in Object-Oriented Programming: Systems, Languages, and Applications
(OOPSLA'96), ACM Press, Sigplan Notices,
Vol. 31, Number 10.