Description
Date depot: 9 avril 2021
Titre: Refactoring pour la parallélisation
Directeur de thèse:
Yann THIERRY-MIEG (LIP6)
Domaine scientifique: Sciences et technologies de l'information et de la communication
Thématique CNRS : Non defini
Resumé: Le parallélisme des architectures matérielles modernes nécessite une évolution des langages de programmation et
des méthodes de développement pour démocratiser l'accès à la puissance complète des machines. Dans ce sens les évolutions de langages généralistes comme Java qui intègrent des primitives facilitant une programmation structurée qui puisse passer à l'échelle sur des architectures massivement multi-coeur est un net progrès, mais ces API sont actuellement sous-utilisées et souvent mal comprises ou considérées simplement idiomatiques/stylistiques.
Le paradigme fonctionnel de la programmation offre de nombreux avantages comme l'isolation des traitements permettant une parallélisation plus facile mais reste difficile à appréhender pour des programmeurs habitués à des paradigmes plus répandus comme l'objet.
L'objectif du PRD est de développer une approche basée sur le refactoring, ou modification de la structure du code à sémantique constante pour introduire du parallélisme à un faible coût de développement dans les applications.
Les principales forces d'un outil capable de restructurer du code pour introduire du parallélisme par refactoring~:
\begin{itemize}
\item L'outil agit directement sur du code e.g. Java arbitraire, et produit du code Java standard. Il n'introduit pas de dépendances sur une librairie tierce pour le parallélisme.
On peut donc essayer l'outil sur une base de code, sans que ça n'engage l'utilisateur à en dépendre dans le futur.
\item Le refactoring est naturellement auditable et inspectable, vu que le résultat est un code Java homogène à l'entrée, le développeur utilisant l'outil n'a pas besoin de nouvelles compétences particulières. Le coût d'entrée pour utiliser l'outil est donc particulièrement bas, c'est un outil "grand public".
\item Il existe une quantité particulièrement importante de codes Java historiques qui n'exploitent pas le parallélisme, mais qui pourraient être significativement accélérés en temps d'exécution perçu sur une machine multi-coeur moderne
\item L'introduction du parallélisme peut être délicate (synchronisations, race condition) une aide qui teste systématiquement si les conditions sont réunies et propose une réécriture légitime est précieuse pour les développeurs de tout niveau.
\end{itemize}