Parcours

  • 2018 2017

    Post-doctorant

    Université de Montréal, DIRO, LTP

  • 2017 2016

    ATER

    Université de Strasbourg, ICube, équipe ICPS/CAMUS

  • 2016 2013

    Doctorant

    Université de Montpellier, LIRMM, équipe MaREL

  • 2016 2013

    Moniteur

    Université de Montpellier, faculté des sciences

  • 2013 2011

    Master recherche en informatique

    Université de Montpellier

  • 2011 2010

    Licence informatique

    Université de Montpellier

  • 2011 2010

    DUT informatique

    Université de Grenoble, IUT de Valence

Projets de recherche

  • Postdoc : machine virtuelle pour les langages dynamiques et parallèles

    Mots-clés : Machine virtuelle, typage dynamique, compilation à la volée, optimisations.

    Postdoc à l'université de Montréal dans l'équipe de Marc Feeley

  • Parallélisation automatique de code Javascript

    Mots-clés : Machine virtuelle, modèle polyhédrique, parallélisation automatique, LLVM, Javascript, compilation à la volée.

    Ce projet est réalisé au sein de l'équipe INRIA CAMUS qui travaille sur divers aspects de la parallélisation automatique de code. L'objectif de ce projet est de paralléliser automatiquement du code Javascript exécuté par une machine virtuelle à la volée. Étant donné que de nombreux outils de parallélisation qui utilisent le modèle polyhérique travaillent sur de l'IR LLVM, nous avons choisi d'utiliser la machine virtuelle JSC intégrée à Webkit. Cette machine virtuelle possède plusieurs niveaux de compilation à la volée et le dernier d'entre eux produit du code LLVM.

  • Thèse : une machine virtuelle en héritage multiple basée sur le hachage parfait

    Mots-clés : Machine virtuelle, langage à objet, héritage multiple, compilation à la volée, chargement dynamique, optimisations.

    Réalisée sous la direction de Roland Ducournau au sein du laboratoire LIRMM de l'université de Montpellier. Cette thèse traite des langages à objets en héritage multiple et typage statique exécutés avec des machines virtuelles. Des analogies sont à faire avec Java bien que ce langage ne soit pas en héritage multiple. Une machine virtuelle est un système d’exécution d’un programme qui se différencie des classiques compilateurs et interpréteurs par une carac- téristique fondamentale : le chargement dynamique. Les classes sont alors découvertes au fil de l’exécution. Le but de la thèse est d’étudier et de spécifier une machine virtuelle pour un lan- gage à objets en héritage multiple, pour ensuite spécifier et implémenter des protocoles de compilation/recompilation. Ces derniers devront mettre en place les optimisations et les inévitables mécanismes de réparations associés. Nous présenterons d’abord l’archi- tecture et les choix réalisés pour implémenter la machine virtuelle : ceux-ci utilisent le langage Nit en tant que langage source ainsi que le hachage parfait, une technique d’im- plémentation de l’héritage multiple. Ensuite nous présenterons les spécifications pour implémenter des protocoles de compilation/recompilation ainsi que les expérimentations associées. Dans ce cadre, nous avons présenté une extension des analyses de préexistence et de types concrets, pour augmenter les opportunités d’optimisations sans risque. Cette contribution dépasse la problématique de l’héritage multiple.

  • Master recherche

    Mots-clés : Machine virtuelle, Java, langage à objet, héritage multiple, VMKit, compilation à la volée.

Filter by type:

Sort by year:

Une machine virtuelle en héritage multiple basée sur le hachage parfait

Julien Pagès sour la direction de Roland Ducournau
Thèse de doctorat LIRMM - Université de Montpellier, 2016

Abstract

Cette thèse traite des langages à objets en héritage multiple et typage statique exécutés avec des machines virtuelles. Des analogies sont à faire avec Java bien que ce langage ne soit pas en héritage multiple. Une machine virtuelle est un système d’exécution d’un programme qui se différencie des classiques compilateurs et interpréteurs par une caractéristique fondamentale : le chargement dynamique. Les classes sont alors découvertes au fil de l’exécution. Le but de la thèse est d’étudier et de spécifier une machine virtuelle pour un langage à objets en héritage multiple, pour ensuite spécifier et implémenter des protocoles de compilation/recompilation. Ces derniers devront mettre en place les optimisations et les inévitables mécanismes de réparations associés. Nous présenterons d’abord l’architecture et les choix réalisés pour implémenter la machine virtuelle : ceux-ci utilisent le langage Nit en tant que langage source ainsi que le hachage parfait, une technique d’implémentation de l’héritage multiple. Ensuite nous présenterons les spécifications pour implémenter des protocoles de compilation/recompilation ainsi que les expérimentations associées. Dans ce cadre, nous avons présenté une extension des analyses de préexistence et de types concrets, pour augmenter les opportunités d’optimisations sans risque. Cette contribution dépasse la problématique de l’héritage multiple.

Mots clés : Machine virtuelle, langage à objet, héritage multiple, chargement dynamique, optimisations, inlining

Preexistence and Concrete Type Analysis in the Context of Multiple Inheritance

Julien Pagès, Roland Ducournau, Jean Privat
Conference Paper PPPJ 2016, International Conference on Principles and Practices of Programming on the Java Platform: virtual machines, languages, and tools, Lugano

Abstract

In the framework of just-in-time compilation, preexistence is a property which asserts that the receiver of a given call site has been instantiated before the current invocation of the considered method. Hence, preexistence is a mean to avoid such low-level repair techniques as on-stack replacement or code patching, when a method must be recompiled during its own activation, because a previous optimization such as devirtualization or inlining has been invalidated by a new class loading. In the original proposition, preexistence considers only values, its analysis is purely intra-procedural, and its result is immutable. In this paper, we reconsider all three aspects: we focus on types instead of values, especially on concrete types, and we accept a limited form of interprocedural analysis, whose results can be, marginally, mutable. Moreover, while the original proposition considered only method invocation, we place ourselves in the context of full multiple-inheritance, where attribute accesses need to be optimized, too. Overall, we propose a static analysis at runtime, combining concrete types and preexistence. The former allow for more optimizations, while the latter provides the condition for applying these optimizations without any need for repair. We experimented the approach in the prototype of a virtual machine for the Nit language, and the results are really encouraging. In spite of the focus on multiple inheritance, and the experiment setting, this proposal could be applied to most languages with static typing and runtime systems like the Java virtual machine.

Preexistence revisited

Roland Ducournau, Julien Pagès, Jean Privat, Colin Vidal
Workshop paper ICOOOLPS@ECOOP 2015, Prague

Abstract

Preexistence is a property which asserts that the receiver of a given call site has been instantiated before the current invocation of the considered method [Detlefs and Agesen, 1999]. Hence, preexistence is a mean to avoid on-stack replacement when a method must be recompiled during its own activation. In the original proposition, preexistence is an immutable property, its analysis is purely intra-procedural, and it considers only values. In this paper, we propose to extend it to a simple inter-procedural static analysis that considers types too, not only values. A consequence of this extension is that preexistence is no longer immutable, hence the analysis is not monotonous.

A virtual machine for testing compilation/recompilation protocols in multiple inheritance

Julien Pagès
Workshop paper Ecoop Doctoral Symposium 2015, Prague

Abstract

We present a virtual machine with dynamic loading for a full multiple inheritance language in static typing: Nit. The virtual machine has been designed to be a platform for testing various protocols of compilation/recompilation. Indeed, the runtime efficiency of virtual machine are based on dynamic optimizations, and these protocols, which are generally hidden, are the key factor to their efficiency.

Genericity and (Co)variance, an Empirical Study.

Roland Ducournau, Julien Pagès, Jean Privat, Colin Vidal
Research report Research report 2014, LIRMM, Université de Montpellier

Abstract

Since its first introduction in an object-oriented programming language, genericity has kept complex relationship with variance, especially covariance. For instance, current languages like Java, C , Scala, Eiffel, Dart and Nit, offer different forms of variance, either unsafe (eg array covariance) or safe (definition- or use-site variance). This paper presents an empirical study analyzing the different uses of variance in actual programs, principally in Java, and secondarily in Nit. This study tries to quantify (i) the usages of unsafe covariance and its transformation into safe variance; (ii) the usages of use-site variance, its effective usefulness in a polymorphic type flow, and its possible tranformation into definition-site variance. The results provide concrete arguments in favor of a modification of the specifications of gener- icity in these object-oriented languages, by reinforcing both the safety and the flexibility of their type systems.

Étude de machines virtuelles Java existantes et adaptation au hachage parfait

Julien Pagès
Mémoire de master 2 recherche LIRMM - Université de Montpellier

Abstract

Cette étude traite des langages de programmation à objets et plus particulièrement des systèmes d’exécution modernes : les machines virtuelles. Nous nous intéressons particulièrement au cas précis du langage Java et à sa machine virtuelle. Nous présentons dans un premier temps l’architecture abstraite et les grands principes des machines virtuelles Java. Puis sont présentées quelques machines virtuelles Java de recherches. L’état de l’art présente les grandes tendances d’implémentation. Nous nous intéressons particulièrement aux technique d’implémentation du test de sous-typage et de la sélection des méthodes des interfaces. Les techniques généralement employées sont très souvent perfectibles et aucune ne fait pour l’instant consensus. Enfin, nous présentons une implémentation dans une machine virtuelle d’une alternative aux techniques existantes. Celle-ci repose sur le hachage parfait, qui peut être utilisé pour implémenter ces deux mécanismes. L’implémentation est intégrée à la machine virtuelle Java J3. Nous présentons le déroulement de l’implémentation puis les résultats obtenus et les perspectives. Nous étudions également l’adaptation d’un langage à héritage multiple dans une machine virtuelle Java.

ATER Université de Strasbourg, IUT Robert Schuman

  • 2017 2016
    • P11 : Introduction à l’algorithmique et à la programmation

      IUT 1 : TP (56 heures)

    • D11 : Introduction aux bases de données

      IUT 1 : TD, TP (38 heures)

    • S32 : Services réseaux (programmation réseau)

      IUT 2 : TD, TP (34 heures)

    • S22 : Architecture des réseaux

      IUT 1 : TD, TP (34 heures)

Moniteur

Université de Montpellier, faculté des sciences

  • 2016 2015
    • HLIN101 : Introduction à l'algorithmique et à la programmation

      licence 1 : TD, TP (51 heures)

    • HLIN406 : Modélisation et programmation par objet 1

      licence 2 : TD, TP (18 heures)

    • HLIN603 : Objets avancés (C++)

      licence 3 : TD, TP (3 heures)

  • 2015 2014
    • HLIN406 : Modélisation et programmation par objet 1

      licence 2 : TD, TP (36 heures)

    • HLIN603 : Objets avancés (C++)

      licence 3 : Cours, TD, TP (18 heures)

  • 2014 2013
    • Concepts de base en informatique

      licence 1 : TP (21 heures)

    • Programmation impérative (C)

      licence 1 : TD, TP (54 heures)

Vacataire

Université de Montpellier, faculté des sciences

  • 2013 2012
      • Concepts de base en informatique

        licence 1 : TP (27 heures)

      • Programmation impérative (C)

        licence 1 : TP (16,5 heures)

Université de Montréal

  • Pavillon André-Aisenstadt
  • 2920 Ch de la Tour
  • Montréal, Québec H3T 1N8