Publications available online |
| Ma Qin and Luc Maranget, "Expressive Synchronization Types for Inheritance in the Join Calculus" |
In prior work, Fournet et al. proposed an extension of the join calculus with class-based inheritance, aiming to provide a precise semantics for concurrent objects. However, as we show here, their system suffers from several limitations, which make it inadequate to form the basis of a practical implementation. |
| Cédric Fournet, Cosimo Laneve, Luc Maranget and Didier Rémy, "Inheritance in the Join Calculus", Conference Foundations of Software Technology and Theoretical Computer Science, 2000 |
We propose an object-oriented calculus with internal concurrency and class-based inheritance that is built upon the join calculus. Method calls, locks,
and states are handled in a uniform manner, using labeled messages. Classes are partial message definitions that can be combined and transformed. We
design operators for behavioral and synchronization inheritance. We also give a type system that statically enforces basic safety properties. Our model
is compatible with the JoCaml implementation of the join calculus.
|
| Ma Qin and Luc Maranget, "Compiling Pattern-Matching in Join-Patterns", 15th International Conference on Concurrency Theory (CONCUR 2004) |
We propose an extension of the join-calculus with pattern matching
on algebraic data types. Our initial motivation is twofold: to
provide an intuitive semantics of the interaction between
concurrency and pattern matching; to define a practical compilation
scheme from extended join-definitions into ordinary ones plus ML
pattern matching. To assess the correctness of our compilation
scheme, we develop a theory of the applied join-calculus, a calculus
with value-passing and value matching.
|
| Cédric Fournet, Fabrice Le Fessant, Luc Maranget and Alain Schmitt, "JoCaml: a Language for Concurrent Distributed and Mobile Programming" |
In these lecture notes, we give an overview of concurrent, distributed, and mobile programming using JoCaml. JoCaml is an extension of the Objective Caml language. It extends OCaml with support for concurrency and synchronization, the distributed execution of programs, and the dynamic relocation of active program fragments during execution.
|
| Fabrice Le Fessant and Luc Maranget, "Compiling Join-Patterns", Workshop HLCL’98. |
The join-calculus is both a name passing calculus and a core language
for concurrent and distributed programming. An essential part of its
implementation is the compilation of join-patterns.
Join-patterns define new channels and all the synchronizations they
take part to at the same time. In this paper, we study the compilation
of join-patterns into deterministic finite-state automata, from both
the semantical and practical point of view. In particular, we discuss
the compilation choices made in our two implementations, the join
compiler and the jocaml system. We also describe some optimizations,
related technical problems, and a useful simplification addressing
these problems.
|
| Cédric Fournet, Cosimo Laneve, Luc Maranget and Didier Rémy, "Implicit Typing à la ML for the join-calculus", Conference CONCUR’97. |
We adapt the Damas-Milner typing discipline to the join-calculus. The
main result is a new generalization criterion that extends the
polymorphism of ML to join-definitions. We prove the correctness of
our typing rules with regards to a chemical semantics. We also relate
typed extensions of the core join-calculus to functional languages.
|
| Cédric Fournet and Georges Gonthier and Jean-Jacques Lévy and Luc Maranget and Didier Rémy, "A Calculus of Mobile Agents", Conference CONCUR’96 |
We introduce a calculus for mobile agents and give its chemical
semantics, with a precise definition for migration, failure, and
failure detection. Various examples written in our calculus illustrate
how to express remote executions, dynamic loading of remote resources
and protocols with mobile agents. We give the encoding of our
distributed calculus into the join-calculus.
|
| Luc Maranget, "Compiling Pattern Matching to Good Decisions Trees", ML’2008 |
We address the issue of compiling ML pattern matching
to compact and efficient decisions trees.
Traditionally, compilation to decision trees is optimized
by (1) implementing decision trees as dags with maximal sharing;
(2) guiding a simple compiler with heuristics.
We first design new heuristics
that are inspired by necessity,
a concept from lazy pattern matching that we rephrase
in terms of decision tree semantics.
Thereby, we simplify previous semantic frameworks
and demonstrate a straightforward connection between necessity and
decision tree runtime efficiency.
We complete our study by experiments, showing that optimizing compilation
to decision trees is competitive with the optimizing match compiler
of Maranget & Le Fessant (2001)
|
| Luc Maranget, "Warnings for pattern matching", JFP’07 |
We examine the ML pattern-matching anomalies of useless clauses and
non-exhaustive matches. We state the definition of these anomalies,
building upon pattern matching semantics, and propose a simple
algorithm to detect them. We have integrated the algorithm in the
Objective Caml compiler, but we show that the same algorithm is also
usable in a non-strict language such as Haskell. Or-patterns are
considered for both strict and non-strict languages.
|
| Luc Maranget, "Les avertissements du filtrage", JFLA’03 |
Cet article propose une définition intrinsèque des anomalies de
filtrage de ML que sont la clause inutile et le filtrage non-exhaustif,
ainsi qu’un algorithme permettant de les signaler au programmeur.
|
| Fabrice Le Fessant and Luc Maranget, "Optimizing Pattern-Matching", ICFP’2001 |
We present improvements to the backtracking technique of
pattern-matching compilation. Several optimizations are
introduced, such as commutation of patterns, use of exhaustiveness
information, and control flow optimization through the use of
labeled static exceptions and context information. These
optimizations have been integrated in the Objective-Caml
compiler. They have shown good results in increasing the speed of
pattern-matching intensive programs, without increasing final code
size.
|
| Luc Maranget, "Two techniques for Compiling Lazy Pattern Matching" Research report 2385, INRIA, 1994. |
In ML style pattern matching, pattern size is not constrained and
ambiguous patterns are allowed. This generality leads to a clear and
concise programming style but is challenging in the context of lazy
evaluation. A first challenge concerns language designers: in lazy ML,
the evaluation order of expressions follows actual data dependencies.
That is, only the computations that are needed to produce the final
result are performed. Once given a proper (that is, non-ambiguous)
semantics, pattern matching should be compiled in a similar spirit:
any value matching a given pattern should be recognized by performing
only the minimal number of elementary tests needed to do so. This
challenge was first met by A. Laville. A second challenge concerns
compiler designers. As it stands, Laville’s compilation algorithm
cannot be incorporated in an actual lazy ML compiler for efficiency
and completeness reasons. As a matter of fact, Laville’s original
algorithm did not fully treat the case of integers in patterns and can
lead to explosions both in compilation time and generated code size.
This paper provides a complete solution to that second challenge. In
particular, the well-known (and size-efficient) pattern matching
compilation technique using backtracking automata is here introduced
for the first time into the world of lazy pattern matching. (If you
are a specialist,
see
also a slightly improved, unpublished, version of this work)
|
| Luc Maranget, "Compiling Lazy Pattern Matching". Proceedings L&FP 92. |
In ML style pattern matching, pattern size is not constrained and
ambiguous patterns are allowed. This generality leads to a clear and
concise programming style but is challenging in the context of lazy
evaluation. In lazy ML,
the evaluation order of expressions follows actual data dependencies.
That is, only the computations that are needed to produce the final
result are performed. Once given a proper (that is, non-ambiguous)
semantics, pattern matching should be compiled in a similar spirit:
any value matching a given pattern should be recognized by performing
only the minimal number of elementary tests needed to do so.
Starting from the A. Laville’s seminal work on the question, this
paper gives a simple theoretical presentation of lazy pattern
matching. It then introduces and proves a realistic compilation algorithm.
|
| Jean-Jacques Lévy and Luc Maranget, "Explicit Substitutions and Programming Languages", Invited paper Foundations of Software Technology and Theoretical Computer Science, 1999 |
In this paper, we stress on the sub-theory of weak substitutions, which is sufficient to analyze most of the properties of programming languages, and which preserves many of the nice theorems of the lambda-calculus. |
| Thérèse Hardin, Luc Maranget and Bruno Pagano, "Functional Back-Ends within the Lambda-Sigma Calculus", INRIA Research Report No 3034, 1996. |
This research report is a more thorough version of our homonymous
ICFP’96 paper (see below).
More specifically,
the report proves the correctness of four abstract machines in great
detail, whereas the article copes with two machines only. Please note
that the report growed into a journal article:
“Functional runtime systems within the lambda-sigma calculus” that appeared in the
Journal of Functional Programming 8(2), 131-172, March 1998.
|
| Thérèse Hardin, Luc Maranget and Bruno Pagano, "Functional Back-Ends within the Lambda-Sigma Calculus", ICFP’96. |
|
| Luc Maranget, "Optimal Derivations in Weak Lambda-calculi and in Orthogonal Term Rewriting Systems". Proceedings POPL’91. |
We introduce the new framework of Labeled Terms Rewriting Systems
(TRS) a general framework to express sharing in Term Rewriting Systems
(TRS). For Orthogonal Labeled TRS, an important subclass of Labeled
TRS, we characterize optimal derivations. This result is applied to
weak lambda calculi, showing the optimality of the lazy strategy, that
is, the call-by-name with sharing strategy. The result is also valid
in the presence of delta-rules, as in PCF. Orthogonal Labeled TRS is
also useful as a calculus for proving syntactic properties of
functional languages.
|
| Luc Maranget, "La stratégie paresseuse". Thèse de doctorat, Université de Paris 7, 1992 (in French). |
Les systèmes orthogonaux de réécriture sont étudiés en tant que modèle
des langages de programmation. Dans cette approche, tout programme
est représenté par un terme, ainsi que les éventuels résultats de
l’évaluation de ce programme. On considère les résultats définitifs,
ou formes normales, et divers types de résultats partiels, tels que
les formes normales de tête. Les conditions d’orthogonalité assurent,
pour un programme donné, l’unicité des résultats définitifs et
intermédiaires qui sont donc bien définis. Les interpréteurs et
compilateurs doivent ensuite suivre des méthodes ou stratégies de
réduction pour calculer ces résultats. Des stratégies sont définies,
puis étudiées, tant du point de vue de la correction —Si un
programme admet un résultat, une stratégie correcte parvient à a
calculer—, que de l’optimalité —Le calcul du résultat se fait en
un nombre minimal d’étapes élémentaires—. La plus précise d’entre
elles, la stratégie paresseuse, est correcte et optimale pour toutes
les formes possibles de résultat. La mise en oeuvre effective de la
stratégie paresseuse est finalement réalisée dans le cas du langage de
programmation ML. L’appel par filtrage avec priorité de ML est
complètement traité.
|
| Luc Maranget, "Functional satisfaction", Journal of Functional Programming (2004) |
This work presents simple
decision procedures for the propositional calculus and for a simple
predicate calculus. These decision procedures are based upon
enumeration of the possible values of the variables in an
expression. Yet, by taking advantage of the sequential semantics of
boolean connectors, not all values are enumerated. In some cases,
dramatic savings of machine time can be achieved. In particular, an
equivalence checker for a small programming language appears to be
usable in practice.
|
| Luc Maranget, "Hevea, un traducteur de LaTeX vers HTML en Caml", JFLA’99 |
Cet article en français décrit l’architecture d’Hevea.
Le traducteur Hevea est séparé en deux composants principaux :
l’analyseur principal, qui reconnaît le source LaTeX, et le gestionnaire de
sortie qui emet du HTML conforme à la spécification 3.2.
Le traducteur exploite la similarité de structure entre les deux langages
et reste simple.
La reconnaissance et le rendu des équations mathématiques en HTML sont
également abordées.
Hevea reconnaît les définitions de commandes LaTeX. Cette particularité est
permet à l’utlisateur de configurer Hevea facilement et en écrivant du
source LaTeX.
Hevea est écrit en Objective Caml, ses performances sont comparables
avec celles du traducteur TTH qui est écrit en C. |
| Luc Maranget, Gaml: a Parallel Implementation of Lazy ML, Proceedings FPCA’91. |
We present a new parallel implementation of lazy ML. Our scheme is a
direct extension of the G-machine-based implementation of lazy ML.
Parallelism is introduced by fork annotations inserted by the
programmer. We discuss the interference of such user annotations with
strictness annotations generated by our compiler. The system has been
implemented on a Sequent Balance computer. We also address the main
practical issues involved, including stack and heap management.
|
This document was translated from LATEX by HEVEA.