Les opérations réflexives sont des API (interfaces de programmation d’applications) qui permettent aux developpeur·euse·s de construire des outils avancés et de modifier l’architecture d’un langage. Elles permettent de créer des outils pour les environnements de développement (compilateurs, débogueurs, inspecteurs) ou de concevoir de nouvelles fonctionnalités dans un langage (systèmes distribués, exceptions, proxies). Les langages de programmation évoluent, introduisant de meilleurs concepts et mettant à jour les pratiques et les API. À l’origine proche de Squeak, Pharo a évolué depuis 2008 et ses API réflexives ont divergé de celles d’origine de Smalltalk. Avec plus de 500 méthodes réflexives identifiées, Pharo possède un large panel de fonctionnalités réflexives. Cette thèse présente trois travaux principaux : • Un inventaire et une classification des opérations réflexives; • Analyser les dépendances à la réflexion; • Les modificateurs de visibilité et leur applicabilité aux infrastructures réflexives; Inventaire et classification : Il est nécessaire d’analyser les API réflexives actuelles afin de comprendre leurs usages, leurs dépendances et si certaines pour- raient être limitées ou optionnelles. Cette analyse est rendue complexe par l’ajout de nouveaux métaobjets dans Pharo, tels que les variables d’instance de première classe et par leur mélange avec les API non-réflexives. Nous proposons un inventaire et une classification sémantique de ces opérations réflexives. Nous analysons leurs interdépendances et identifions un ensemble de problèmes liés à l’implémentation actuelle. Cette analyse pourra informer les prochaines évolutions de la couche réflexive. Analyser la dépendance à la réflexion: La réflexion est un outil puissant qui peut contourner l’encapsulation des données et les modificateurs de visibilité. Il est donc important de pouvoir évaluer dans quelle mesure une application repose sur la réflexion. Puisque la réflexion dépend d’informations dynamiques, l’analyse statique est limitée. Ces problèmes sont accrus dans les langages dynamiquement typés en raison du polymorphisme. Nous proposons donc RAPIM, une approche pour évaluer l’utilisation de la réflexion. Celle-ci utilise l’analyse de mutation avec un nouvel opérateur de mutation pour traiter les méthodes réflexives du noyau. Nous comparons les performances de notre approche à celles de l’analyse statique sur une sélection de cinq projets. Pour quatre projets, RAPIM désambiguïse plus d’appels potentiellement réflexifs que l’analyse statique. Lorsque la couverture du code est élevée, le pourcentage de désambiguïsassions est trois fois plus élevé. Enfin, nous questionnons la pertinence du polymorphisme entre les API réflexives et non-réflexives. Modificateurs de visibilité: Dans notre exploration des moyens de contrôler la réflexion, nous avons examiné la visibilité des méthodes pour séparer les méthodes internes de l’API publique. Les modificateurs de visibilité (protected) permettent de cacher les méthodes aux objets externes tout en autorisant l’utilisation interne et la surcharge dans les sous-classes. Bien qu’ils soient présents dans les principaux langages statiquement typés, ce type de modificateur n’est pas aussi courant ou mature dans les langages dynamiquement typés. En Pharo, toutes les méthodes sont publiques. Bien que peu de méthodes réflexives puissent être protégées en raison de leur utilisation, de nombreux métaobjets réflexifs bénéficieraient d’un modificateur pour les méthodes internes. Nous présentons PROTDYN, un modèle de visibilité pour les langages dynamiques calculé à la compilation et s’appuyant sur la distinction syntaxique de l’usage (ou non) de self. Son implémentation Pharo est rétro-compatible. Nous évaluons ses performances, son utilisation de la mémoire et sa compatibilité avec les optimisations existantes. Bien que cette thèse se concentre sur Pharo, les résultats peuvent être appliqués à d’autres langages dynamiquement typés.
M. Stéphane DUCASSE Université de Lille Directeur de thèse, M. Pablo TESONE Université de Lille Examinateur, M. Christophe DONY Université de Montpellier Rapporteur, Mme Mireille BLAY-FORNARINO Université Côte d'Azur Examinatrice, M. Alain PLANTEC Université de Bretagne Occidentale Rapporteur, M. Guillermo POLITO Université de Lille Invité.
Thèse de l'équipe EVREF soutenue le 07/11/2024