The scientific activity of APR mainly develops around Algorithms and Languages and several projects exist, with many collaborations. We follow a dual approach to achieving safe and efficient applications by combining programming languages (design, implementation and program analysis tools) and algorithms (modeling, complexity analysis,random generation) through theory (formal approach in semantics and combinatorics) and practice (concrete objectives producing prototyping softwares and industrial applications).
The APR team is based on three axes following a common research theme around concurrency:
Combinatorics and Analysis of algorithmsIn the APR team, we develop combinatorial me- thods for analysing the performances of algorithms and randomly sampling complex structures. Our methods allow to quantify the complexity of algorithms and efficiently generate combinatorial objects. Our research both aims at extending the expressiveness of the models, and adapting the methods to real application domains : information retrieval in massive data, robustness tests or software validation, modeling of graphs, quantita- tive study of concurrency. We lead several ambitious projects such as non-uniform sampling, sampling with multi-parameter specifications, graph computing with GPU programming as well as quantitative analysis of programming languages.
Languages and tools for Critical Softwares and Web Applications
The APR team works also on design and implementation of programming languages from the point of view of expressiveness, reliability and efficiency. We aim at building a complete chain from computation models (processes calculus, type systems, static analysis, …) to actual implementations. Theses works focus on two different application domains. On the one hand we are interested in the development of tools for the certification of critical systems (tests and static analysis by abstract interpretation). On the other hand, web-based technologies offers an excellent laboratory for new ideas, such as computational migration and synchronous-reactive programming for multi-tier applications. Both domains revolve around component-based systems which strongly benefit from a top-down vision (global control, type system, monitors, multi-tier design)
Algorithms and Languages for Multicore Processors
A real need for abstraction arose out of the democratization of parallelism and concurrency. These abstractions should facilitate parallel composition while allowing a compiler to generate efficient code for a given target architecture. These abstractions must also be clearly specified and allow the static analysis of a number of properties to ensure the safe execution of the programs created. The great strength of our team on this research theme is the complementarity of the work we have carried out in recent years. On the one hand, we have a recognized expertise concerning advanced algorithmics and parallel programming techniques, particularly in the shared memory model and data-parallelism. This concerns, on the one hand, the abstraction of the hardware, CPU and GPU, and the algorithms adaptation for these specific hardware and on the other hand the tools of static analysis by abstract interpretation for concurrent programs for shared memory models as well as for communicating processes. In a complementary way, we have studied concurrency and mobility based on π-calculus.
Projects in collaboration
Seminars and working groups