Xavier Leroy

dblp:03/352 · DBLP profile ↗
← Back
63ranked-venue papers
30as first author
3since 2021 · last 2026
0000-0002-8971-9171ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 49 · 24 first-author · 2 since 2021Theory of computation · 13 · 7 first-authorArtificial intelligence and machine learning · 9 · 3 first-author · 1 since 2021Systems, architecture and hardware · 1 · 1 first-author
YearPublicationVenuePosition
2026 A Lazy, Concurrent Convertibility Checker
abstract
Convertibility checking — determining whether two lambda-terms are equal up to reductions — is a crucial component of proof assistants and dependently-typed languages. Practical implementations often use heuristics to quickly conclude that two terms are convertible, or are not convertible, without reducing them to normal form. However, these heuristics can backfire, triggering huge amounts of unnecessary computation. This paper presents a novel convertibility-checking algorithm that relies crucially on laziness and concurrency . Laziness is used to share computations, while concurrency is used to explore multiple convertibility subproblems in parallel or via fair interleaving. Unlike heuristics-based approaches, our algorithm always finds an easy solution to the convertibility problem, if one exists. The paper describes the algorithm in process calculus style, discusses its complexity, and reports on its mechanized proof of partial correctness and its lightweight experimental evaluation.
Nathanaëlle Courant, Xavier Leroy
Proc. ACM Program. Lang.2
2023 Efficient Extensional Binary Tries
Andrew W. Appel, Xavier Leroy
J. Autom. Reason.2
2021 Verified code generation for the polyhedral model
abstract
The polyhedral model is a high-level intermediate representation for loop nests that supports elegantly a great many loop optimizations. In a compiler, after polyhedral loop optimizations have been performed, it is necessary and difficult to regenerate sequential or parallel loop nests before continuing compilation. This paper reports on the formalization and proof of semantic preservation of such a code generator that produces sequential code from a polyhedral representation. The formalization and proofs are mechanized using the Coq proof assistant.
Nathanaël Courant, Xavier Leroy
Proc. ACM Program. Lang.2
2017 A formally verified compiler for Lustre
abstract
The correct compilation of block diagram languages like Lustre, Scade, and a discrete subset of Simulink is important since they are used to program critical embedded control software. We describe the specification and verification in an Interactive Theorem Prover of a compilation chain that treats the key aspects of Lustre: sampling, nodes, and delays. Building on CompCert, we show that repeated execution of the generated assembly code faithfully implements the dataflow semantics of source programs.
Timothy Bourke, Lélio Brun, Pierre-Évariste Dagand, Xavier Leroy, Marc Pouzet, Lionel Rieg
PLDI4
2016 Formally Verifying a Compiler: What Does It Mean, Exactly?
abstract
Compilers, and especially optimizing compilers, are complicated programs. Bugs in compilers happen, and can lead to miscompilation: the production of wrong executable code from a correct source program. Miscompilation is documented in the literature and a concern for high-assurance software, as it endangers the guarantees obtained by source-level formal verification of programs. Compiler verification is a radical solution to the miscompilation problem: by applying program proof to the compiler itself, we can obtain mathematically strong guarantees that the generated executable code is faithful to the semantics of the source program. The state of the art in this line of research is arguably the CompCert verified compiler. This talk will give an overview of this optimizing C compiler and of its formal verification, conducted with the Coq proof assistant. A formal verification is as good as the specifications it uses. In other words, verification reduces the problem of trusting a large implementation to that of ensuring that its formal specification enforce the intended correctness properties. In the case of CompCert, the correctness statement that is proved is rather complex, as it involves large operational semantics (for the C language and for the assembly languages of the target architectures) and simulations between these semantics that support both choice refinement and behavior refinement. The talk will review and discuss these elements of the specification, along with some of the accompanying proof principles.
Xavier Leroy
ICALP1
2015 A Formally-Verified C Static Analyzer
abstract
This paper reports on the design and soundness proof, using the Coq proof assistant, of Verasco, a static analyzer based on abstract interpretation for most of the ISO C 1999 language (excluding recursion and dynamic allocation). Verasco establishes the absence of run-time errors in the analyzed programs. It enjoys a modular architecture that supports the extensible combination of multiple abstract domains, both relational and non-relational. Verasco integrates with the CompCert formally-verified C compiler so that not only the soundness of the analysis results is guaranteed with mathematical certitude, but also the fact that these guarantees carry over to the compiled code.
Jacques-Henri Jourdan, Vincent Laporte, Sandrine Blazy, Xavier Leroy, David Pichardie
POPL4
2015 Verified Compilation of Floating-Point Computations
Sylvie Boldo, Jacques-Henri Jourdan, Xavier Leroy, Guillaume Melquiond
J. Autom. Reason.3
2014 Compiler verification for fun and profit
abstract
Summary form only given. Formal verification of software or hardware systems - be it by model checking, deductive verification, abstract interpretation, type checking, or any other kind of static analysis - is generally conducted over high-level programming or description languages, quite remote from the actual machine code and circuits that execute in the system. To bridge this particular gap, we all rely on compilers and other code generators to automatically produce the executable artifact. Compilers are, however, vulnerable to miscompilation: bugs in the compiler that cause incorrect code to be generated from a correct source code, possibly invalidating the guarantees so painfully obtained by source-level formal verification. Recent experimental studies [1] show that many widely-used production-quality compilers suffer from miscompilation. The formal verification of compilers and related code generators is a radical, mathematically-grounded answer to the miscompilation issue. By applying formal verification (typically, interactive theorem proving) to the compiler itself, it is possible to guarantee that the compiler preserves the semantics of the source programs it transforms, or at least preserves the properties of interest that were formally verified over the source programs. Proving the correctness of compilers is an old idea [2], [3] that took a long time to scale all the way to realistic compilers. In the talk, I give an overview of CompCert C [4], a moderately-optimizing compiler for almost all of the ISO C 99 language that has been formally verified using the Coq proof assistant [5]. The CompCert project is one point in a space of code generators whose verification deserves attention. For example, functional languages and object-oriented languages raise the issue of jointly verifying the compiler and the run-time system (memory management, exception handling, etc) that the generated code depends on. At the other end of the expressiveness spectrum, synchronous languages and hardware description languages also raise interesting verified generation issues, as exemplified by Pnueli's seminal work on translation validation for Signal [6] and Braibant and Chlipala's recent work on verified hardware synthesis [7]. Orthogonally, the integration of verification tools and compilers that are both verified against a shared formal semantics opens fascinating opportunities for "super-optimizations" that generate better code by exploiting the properties of the source code that were formally verified.
Xavier Leroy
FMCAD1
2014 Formal C Semantics: CompCert and the C Standard
Robbert Krebbers, Xavier Leroy, Freek Wiedijk
ITP2
2014 Formal Proofs of Code Generation and Verification Tools
Xavier Leroy
SEFM1
2013 A Formally-Verified C Compiler Supporting Floating-Point Arithmetic
abstract
Floating-point arithmetic is known to be tricky: roundings, formats, exceptional values. The IEEE-754 standard was a push towards straightening the field and made formal reasoning about floating-point computations easier and flourishing. Unfortunately, this is not sufficient to guarantee the final result of a program, as several other actors are involved: programming language, compiler, architecture. The Comp Certformally-verified compiler provides a solution to this problem: this compiler comes with a mathematical specification of the semantics of its source language (a large subset of ISO C90) and target platforms (ARM, PowerPC, x86-SSE2), and with a proof that compilation preserves semantics. In this paper, we report on our recent success in formally specifying and proving correct Comp Cert's compilation of floating-point arithmetic. Since CompCert is verified using the Coq proof assistant, this effort required a suitable Coq formalization of the IEEE-754 standard, we extended the Flocq library for this purpose. As a result, we obtain the first formally verified compiler that provably preserves the semantics of floating-point programs.
Sylvie Boldo, Jacques-Henri Jourdan, Xavier Leroy, Guillaume Melquiond
IEEE Symposium on Computer Arithmetic3
2012 Mechanized Semantics for Compiler Verification
Xavier Leroy
APLAS1
2012 Mechanized Semantics for Compiler Verification
Xavier Leroy
CPP1
2012 A Formally-Verified Alias Analysis
Valentin Robert, Xavier Leroy
CPP2
2012 Validating LR(1) Parsers
Jacques-Henri Jourdan, François Pottier, Xavier Leroy
ESOP3
2012 A mechanized semantics for C++ object construction and destruction, with applications to resource management
abstract
We present a formal operational semantics and its Coq mechanization for the C++ object model, featuring object construction and destruction, shared and repeated multiple inheritance, and virtual function call dispatch. These are key C++ language features for high-level system programming, in particular for predictable and reliable resource management. This paper is the first to present a formal mechanized account of the metatheory of construction and destruction in C++, and applications to popular programming techniques such as "resource acquisition is initialization". We also report on irregularities and apparent contradictions in the ISO C++03 and C++11 standards.
Tahina Ramananandro, Gabriel Dos Reis, Xavier Leroy
POPL3
2012 A List-Machine Benchmark for Mechanized Metatheory
Andrew W. Appel, Robert Dockins, Xavier Leroy
J. Autom. Reason.3
2011 Formally verifying a compiler: Why? How? How far?
abstract
Given the complexity and sophistication of code generation and optimization algorithms, and the difficulty of systematically testing a compiler, it is unsurprising that bugs occur in compilers and cause miscompilation: incorrect executable code is silently generated from a correct source program. The formal verification of a compiler is a radical solution to the miscompilation issue. By applying formal methods (program proof) to the compiler itself, compiler verification proves, with mathematical certainty, that the generated executable code behaves exactly as prescribed by the semantics of the source program.
Xavier Leroy
CGO1
2011 Verified squared: does critical software deserve verified tools?
abstract
The formal verification of programs has progressed tremendously in the last decade. In this talk, I review some of the obstacles that [6, 8, 15, 18] remain to be lifted before source-level verification tools can be taken really seriously in the critical software industry. A direction I advocate is the systematic formal verification of the development tools that participate in the production and verification of critical software.
Xavier Leroy
POPL1
2011 Formal verification of object layout for c++ multiple inheritance
abstract
Object layout - the concrete in-memory representation of objects - raises many delicate issues in the case of the C++ language, owing in particular to multiple inheritance, C compatibility and separate compilation. This paper formalizes a family of C++ object layout schemes and mechanically proves their correctness against the operational semantics for multiple inheritance of Wasserrab et al. This formalization is flexible enough to account for space-saving techniques such as empty base class optimization and tail-padding optimization. As an application, we obtain the first formal correctness proofs for realistic, optimized object layout algorithms, including one based on the popular "common vendor" Itanium C++ application binary interface. This work provides semantic foundations to discover and justify new layout optimizations; it is also a first step towards the verification of a C++ compiler front-end.
Tahina Ramananandro, Gabriel Dos Reis, Xavier Leroy
POPL3
2011 Special Issue Dedicated to ICFP 2009 Editorial
abstract
The 14th ACM SIGPLAN International Conference on Functional Programming (ICFP) took place on August 31–September 2, 2009 in Edinburgh, Scotland; Andrew Tolmach chaired the program committee. Following the conference, the authors of selected papers were invited to submit extended versions for this special issue of JFP. After review and revision, four papers were accepted for inclusion in this volume. Each paper contains substantial new material beyond the original conference version. The papers are representative of the wide range of topics and methodology that characterize ICFP.
Andrew P. Tolmach, Xavier Leroy
J. Funct. Program.2
2010 Validating Register Allocation and Spilling
Silvain Rideau, Xavier Leroy
CC2
2010 A simple, verified validator for software pipelining
abstract
Software pipelining is a loop optimization that overlaps the execution of several iterations of a loop to expose more instruction-level parallelism. It can result in first-class performance characteristics, but at the cost of significant obfuscation of the code, making this optimization difficult to test and debug. In this paper, we present a translation validation algorithm that uses symbolic evaluation to detect semantics discrepancies between a loop and its pipelined version. Our algorithm can be implemented simply and efficiently, is provably sound, and appears to be complete with respect to most modulo scheduling algorithms. A conclusion of this case study is that it is possible and effective to use symbolic evaluation to reason about loop transformations.
Jean-Baptiste Tristan, Xavier Leroy
POPL2
2009 Verified validation of lazy code motion
abstract
Translation validation establishes a posteriori the correctness of a run of a compilation pass or other program transformation. In this paper, we develop an efficient translation validation algorithm for the Lazy Code Motion (LCM) optimization. LCM is an interesting challenge for validation because it is a global optimization that moves code across loops. Consequently, care must be taken not to move computations that may fail before loops that may not terminate. Our validator includes a specific check for anticipability to rule out such incorrect moves. We present a mechanically-checked proof of correctness of the validation algorithm, using the Coq proof assistant. Combining our validator with an unverified implementation of LCM, we obtain a LCM pass that is provably semantics-preserving and was integrated in the CompCert formally verified compiler.
Jean-Baptiste Tristan, Xavier Leroy
PLDI2
2009 Coinductive big-step operational semantics
Xavier Leroy, Hervé Grall
Inf. Comput.1
2009 Mechanized Semantics for the Clight Subset of the C Language
Sandrine Blazy, Xavier Leroy
J. Autom. Reason.2
2009 A Formally Verified Compiler Back-end
Xavier Leroy
J. Autom. Reason.1
2009 Editorial
abstract
This issue of the Journal of Functional Programming (JFP) marks a point of transition. After serving since 1991 as Editor, then since 2004 as co-Editor in Chief (along with Greg Morrisett from 2004 to 2006 and Xavier Leroy since 2007), Paul Hudak is stepping down.
Xavier Leroy
J. Funct. Program.1
2009 Editorial
abstract
Eighteen years ago Richard Bird joined the editorial team of the Journal of Functional Programming . As Richard mentions in his recollections (Bird, 2006), the founding editors of the Journal , Simon Peyton Jones and Philip Wadler, had asked him to contribute a regular column to be called Functional Pearls , roughly modeled on the Programming Pearls that Jon Bentley had run for the Communications of the ACM in the 1980s. Richard agreed to the suggestion, but only under the proviso that he would seek other contributors to the column.
Xavier Leroy, Matthias Felleisen
J. Funct. Program.1
2008 Formal verification of translation validators: a case study on instruction scheduling optimizations
abstract
Translation validation consists of transforming a program and a posteriori validating it in order to detect a modification of itssemantics. This approach can be used in a verified compiler, provided that validation is formally proved to be correct. We present two such validators and their Coq proofs of correctness. The validators are designed for two instruction scheduling optimizations: list scheduling and trace scheduling.
Jean-Baptiste Tristan, Xavier Leroy
POPL2
2008 Formal Verification of a C-like Memory Model and Its Uses for Verifying Program Transformations
Xavier Leroy, Sandrine Blazy
J. Autom. Reason.1
2008 Tilting at Windmills with Coq: Formal Verification of a Compilation Algorithm for Parallel Moves
Laurence Rideau, Bernard P. Serpette, Xavier Leroy
J. Autom. Reason.3
2007 Mechanized Verification of CPS Transformations
Zaynah Dargaye, Xavier Leroy
LPAR2
2007 Formal verification of an optimizing compiler
abstract
Programmers naturally expect that compilers and other code generation tools produce executable code that behaves as prescribed by source programs. However, compilers are complex programs that perform many subtle transformations. Bugs in compilers do happen and can lead to silently producing incorrect executable code from a correct source program. This is a significant concern in the context of high-assurance software that has been verified (at the source level) using formal methods (static analysis, model checking, program proof, etc): any bug in the compiler can potentially invalidate the guarantees so painfully established by the use of formal methods. There are several ways to generate confidence in the compilation process, including translation validation and proof-carrying code. This talk focuses on applying program proof technology to the compiler itself, in order to prove a semantic preservation theorem for every pass of the compiler. We present preliminary results from the Compcert experiment: the development and proof of correctness of a moderately-optimizing compiler for a large subset of the C language. The proof of correctness is mechanized using the Coq proof assistant. Moreover, most of the compiler itself is written directly in the functional subset of the Coq specification language, from which executable Caml code is automatically extracted.
Xavier Leroy
MEMOCODE1
2007 Formal Verification of an Optimizing Compiler
Xavier Leroy
RTA1
2006 Coinductive Big-Step Operational Semantics
Xavier Leroy
ESOP1
2006 Formal Verification of a C Compiler Front-End
Sandrine Blazy, Zaynah Dargaye, Xavier Leroy
FM3
2006 Managing the Complexity of Large Free and Open Source Package-Based Software Distributions
abstract
The widespread adoption of free and open source software (FOSS) in many strategic contexts of the information technology society has drawn the attention on the issues regarding how to handle the complexity of assembling and managing a huge number of (packaged) components in a consistent and effective way. FOSS distributions (and in particular GNU/Linux-based ones) have always provided tools for managing the tasks of installing, removing and upgrading the (packaged) components they were made of While these tools provide a (not always effective) way to handle these tasks on the client side, there is still a lack of tools that could help the distribution editors to maintain, on the server side, large and high-quality distributions. In this paper we present our research whose main goal is to fill this gap: we show our approach, the tools we have developed and their application with experimental results. Our contribution provides an effective and automatic way to support distribution editors in handling those issues that were, until now, mostly addressed using ad-hoc tools and manual techniques
Fabio Mancinelli, Jaap Boender, Roberto Di Cosmo, Jérôme Vouillon, Berke Durak, Xavier Leroy, Ralf Treinen
ASE6
2006 Formal certification of a compiler back-end or: programming a compiler with a proof assistant
abstract
This paper reports on the development and formal certification (proof of semantic preservation) of a compiler from Cminor (a C-like imperative language) to PowerPC assembly code, using the Coq proof assistant both for programming the compiler and for proving its correctness. Such a certified compiler is useful in the context of formal methods applied to the certification of critical software: the certification of the compiler guarantees that the safety properties proved on the source code hold for the executable compiled code as well.
Xavier Leroy
POPL1
2005 Formal Verification of a Memory Model for C-Like Imperative Languages
Sandrine Blazy, Xavier Leroy
ICFEM2
2005 Mixin modules in a call-by-value setting
abstract
The ML module system provides powerful parameterization facilities, but lacks the ability to split mutually recursive definitions across modules and provides insufficient support for incremental programming. A promising approach to solve these issues is Ancona and Zucca's mixin module calculus CMS . However, the straightforward way to adapt it to ML fails, because it allows arbitrary recursive definitions to appear at any time, which ML does not otherwise support. In this article, we enrich CMS with a refined type system that controls recursive definitions through the use of dependency graphs. We then develop and prove sound a separate compilation scheme, directed by dependency graphs, that translates mixin modules down to a call-by-value λ-calculus extended with a nonstandard let rec construct.
Tom Hirschowitz, Xavier Leroy
ACM Trans. Program. Lang. Syst.2
2004 Call-by-Value Mixin Modules: Reduction Semantics, Side Effects, Types
Tom Hirschowitz, Xavier Leroy, Joe B. Wells
ESOP2
2003 Computer Security from a Programming Language and Static Analysis Perspective
Xavier Leroy
ESOP1
2003 Implementing Multi-stage Languages Using ASTs, Gensym, and Reflection
Cristiano Calcagno, Walid Taha, Liwen Huang, Xavier Leroy
GPCE4
2003 Compilation of extended recursion in call-by-value functional languages
abstract
This paper formalizes and proves correct a compilation scheme for mutually-recursive definitions in call-by-value functional languages. This scheme supports a wider range of recursive definitions than standard call-by-value recursive definitions. We formalize our technique as a translation scheme to a lambda-calculus featuring in-place update of memory blocks, and prove the translation to be faithful.
Tom Hirschowitz, Xavier Leroy, Joe B. Wells
PPDP2
2003 Java Bytecode Verification: Algorithms and Formalizations
Xavier Leroy
J. Autom. Reason.1
2002 Mixin Modules in a Call-by-Value Setting
Tom Hirschowitz, Xavier Leroy
ESOP2
2002 A compiled implementation of strong reduction
abstract
Motivated by applications to proof assistants based on dependent types, we develop and prove correct a strong reducer and ß-equivalence checker for the λ-calculus with products, sums, and guarded fixpoints. Our approach is based on compilation to the bytecode of an abstract machine performing weak reductions on non-closed terms, derived with minimal modifications from the ZAM machine used in the Objective Caml bytecode interpreter, and complemented by a recursive "read back" procedure. An implementation in the Coq proof assistant demonstrates important speed-ups compared with the original interpreter-based implementation of strong reduction in Coq.
Benjamin Grégoire, Xavier Leroy
ICFP2
2002 Bytecode verification on Java smart cards
abstract
Abstract This article presents a novel approach to the problem of bytecode verification for Java Card applets. By relying on prior off‐card bytecode transformations, we simplify the bytecode verifier and reduce its memory requirements to the point where it can be embedded on a smart card, thus increasing significantly the security of post‐issuance downloading of applets on Java Cards. This article describes the on‐card verification algorithm and the off‐card code transformations, and evaluates experimentally their impact on applet code size. Copyright © 2002 John Wiley & Sons, Ltd.
Xavier Leroy
Softw. Pract. Exp.1
2001 Java Bytecode Verification: An Overview
Xavier Leroy
CAV1
2000 A modular module system
abstract
A simple implementation of an SML-like module system is presented as a module parameterized by a base language and its type-checker. This implementation is useful both as a detailed tutorial on the Harper–Lillibridge–Leroy module system and its implementation, and as a constructive demonstration of the applicability of that module system to a wide range of programming languages.
Xavier Leroy
J. Funct. Program.1
2000 Type-based analysis of uncaught exceptions
abstract
This article presents a program analysis to estimate uncaught exceptions in ML programs. This analysis relies on unification-based type inference in a nonstandard type system, using rows to approximate both the flow of escaping exceptions (a la effect systems) and the flow of result values (a la control-flow analyses). The resulting analysis is efficient and precise; in particular, arguments carried by exceptions are accurately handled.
Xavier Leroy, François Pessaux
ACM Trans. Program. Lang. Syst.1
1999 Type-Based Analysis of Uncaught Exceptions
abstract
This paper presents a program analysis to estimate uncaught exceptions in ML programs. This analysis relies on unification-based type inference in a non-standard type system, using rows to approximate both the flow of escaping exceptions (a la effect systems) and the flow of result values (a la control-flow analyses). The resulting analysis is efficient and precise; in particular, arguments carried by exceptions are accurately handled.
François Pessaux, Xavier Leroy
POPL2
1998 Security Properties of Typed Applets
abstract
This paper formalizes the folklore result that strongly-typed applets are more secure than untyped ones. We formulate and prove several security properties that all well-typed applets possess, and identify sufficient conditions for the applet execution environment to be safe, such as procedural encapsulation, type abstraction, and systematic type-based placement of run-time checks. These results are a first step towards formal techniques for developing and validating safe execution environments for applets.
Xavier Leroy, François Rouaix
POPL1
1996 Benchmarking Implementations of Functional Languages with 'Pseudoknot', a Float-Intensive Benchmark
abstract
Abstract Over 25 implementations of different functional languages are benchmarked using the same program, a floating-point intensive application taken from molecular biology. The principal aspects studied are compile time and execution time for the various implementations that were benchmarked. An important consideration is how the program can be modified and tuned to obtain maximal performance on each language implementation. With few exceptions, the compilers take a significant amount of time to compile this program, though most compilers were faster than the then current GNU C compiler (GCC version 2.5.8). Compilers that generate C or Lisp are often slower than those that generate native code directly: the cost of compiling the intermediate form is normally a large fraction of the total compilation time. There is no clear distinction between the runtime performance of eager and lazy implementations when appropriate annotations are used: lazy implementations have clearly come of age when it comes to implementing largely strict applications, such as the Pseudoknot program. The speed of C can be approached by some implementations, but to achieve this performance, special measures such as strictness annotations are required by non-strict implementations. The benchmark results have to be interpreted with care. Firstly, a benchmark based on a single program cannot cover a wide spectrum of ‘typical’ applications. Secondly, the compilers vary in the kind and level of optimisations offered, so the effort required to obtain an optimal version of the program is similarly varied.
Pieter H. Hartel, Marc Feeley, Martin Helmut Alt, Lennart Augustsson, Marcel Beemster, Emmanuel Chailloux, Christine H. Flood, Wolfgang Grieskamp, John H. G. van Groningen, Kevin Hammond, Bogumil Hausman, Melody Y. Ivory, Richard E. Jones, Jasper Kamperman, Peter Lee 0001, Xavier Leroy, Rafael Dueire Lins, Sandra Loosemore, Niklas Röjemo, Manuel Serrano, Jean-Pierre Talpin, Jon Thackray, Pum Walters, Pierre Weis, Peter Wentworth
J. Funct. Program.17
1996 A Syntactic Theory of Type Generativity and Sharing
abstract
Abstract This paper presents a purely syntactic account of type generativity and sharing – two key mechanisms in the SML module system – and shows its equivalence with the traditional stamp-based description of these mechanisms. This syntactic description recasts the SML module system in a more abstract, type-theoretic framework.
Xavier Leroy
J. Funct. Program.1
1995 Applicative Functors and Fully Transparent Higher-Order Modules
abstract
we present a variety of the Standard ML module system where parameterized abstract types (i.e. functors returning generative types) map provably equal arguments to compatible abstract types, instead of generating distinct types at each applications as in Standard ML. This extension solves the full transparency problem (how to give syntactic signatures for higher-order functors that express exactly their propagation of type equations), and also provides better support for non-closed code fragments.
Xavier Leroy
POPL1
1994 Manifest Types, Modules, and Separate Compilation
abstract
International audience
Xavier Leroy
POPL1
1993 A Concurrent, Generational Garbage Collector for a Multithreaded Implementation of ML
abstract
This paper presents the design and implementation of a “quasi real-time” garbage collector for Concurrent Caml Light, an implementation of ML with threads. This two-generation system combines a fast, asynchronous copying collector on the young generation with a non-disruptive concurrent marking collector on the old generation. This design crucially relies on the ML compile-time distinction between mutable and immutable objects.
Damien Doligez, Xavier Leroy
POPL2
1993 Polymorphism by Name for References and Continuations
abstract
This article investigates an ML-like language with byname semantics for polymorphism: polymorphic objects are not evaluated once for all at generalization time, but re-evaluated at each specialization. Unlike the standard ML semantics, the by-name semantics works well with polymorphic references and polymorphic continuations: the naive typing rules for references and for continuations are sound with respect to this semantics. Polymorphism by name leads to a better integration of these imperative features into the ML type discipline. Practical experience shows that it retains most of the efficiency and predictability of polymorphism by value.
Xavier Leroy
POPL1
1993 Dynamics in ML
abstract
Abstract Objects with dynamic types allow the integration of operations that essentially require runtime type-checking into statically-typed languages. This paper presents two extensions of the ML language with dynamics, based on our work on the CAML implementation of ML, and discusses their usefulness. The main novelty of this work is the combination of dynamics with polymorphism.
Xavier Leroy, Michel Mauny
J. Funct. Program.1
1992 Unboxed Objects and Polymorphic Typing
abstract
This paper presents a program transformation that allows languages with polymorphic typing (e.g. ML) to be implemented with unboxed, multi-word data representations. The transformation introduces coercions between various representations, based on a typing derivation. A prototype ML compiler utilizing this transformation demonstrates important speedups.
Xavier Leroy
POPL1
1991 Polymorphic Type Inference and Assignment
abstract
We present a new approach to the polymorphic typing of data accepting in-place modification in ML-like languages.This approach is based on restrictions over type generalization, and a refined typing of functions.The type system given here leads to a better integration of imperative programming style with the purely applicative kernel of ML.In particular, generic functions that allocate mutable data can safely be given fully polymorphic types.We show the soundness of this type system, and give a type reconstruction algorithm.
Xavier Leroy, Pierre Weis
POPL1