English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Quelques articles à propos de Caml

Traits du langage

Le noyau du langage

[1]Andrew K. Wright et Matthias Felleisen. A Syntactic Approach to Type Soundness. In Information & Computation, 115(1):38−94, 1994.
Cet article décrit la sémantique et le système de types de Core ML, et utilise une technique syntaxique simple pour prouver que les programmes bien typés ne provoquent pas d'erreur.
[2]François Pottier et Didier Rémy. The Essence of ML Type Inference. In Benjamin C. Pierce, editor, Advanced Topics in Types and Programming Languages, MIT Press, 2005.
Ce chapitre de livre contient une description approfondie du système de types de Core ML, et met l'accent sur l'inférence de types. L'algorithme d'inférence de types est décrit comme la composition d'un générateur de contraintes, qui produit un système d'équations entre types, et d'un solveur de contraintes, qui est présenté comme un jeu de règles de réécriture.
[3]Jacques Garrigue. Relaxing the value restriction. In International Symposium on Functional and Logic Programming, 2004.
Cet article explique pour il est sain de généraliser certaines variables de types lors d'une liaison let, même lorsque l'expression liée par let n'est pas une valeur. Cette version relaxée de la classique « restriction aux valeurs » de Wright a été introduite en Objective Caml 3.07.

Modules

[4]Xavier Leroy. Manifest types, modules, and separate compilation. In Principles of Programming Languages, 1994.
Cet article présente une variante du système de modules de Standard ML qui introduit une distinction stricte entre types abstraits et manifestes. Ces derniers sont des types dont la définition apparaît explicitement dans l'interface du module. Cette proposition a pour but de préserver la plus grande partie du pouvoir expressif du système de modules de Standard ML, tout en permettant beaucoup plus aisément la compilation séparée. Ce travail constitue la fondation formelle du système de modules d'OCaml.
[5]Xavier Leroy. Applicative functors and fully transparent higher-order modules. In Principles of Programming Languages, 1995.
Ce travail étend l'article ci-dessus en introduisant des foncteurs dits applicatifs, c'est-à-dire des foncteurs qui produisent des types abstraits compatibles lorsqu'on les applique à des arguments prouvablement égaux. Les foncteurs applicatifs font partie des caractéristiques d'OCaml.
[6]Xavier Leroy. A Modular Module System. In Journal of Functional Programming, 10(3):269-303, 2000.
Cet article accessible décrit une implantation simplifiée du système de modules d'OCaml, et met l'accent sur le fait que le système de modules est largement indépendant du noyau de langage sous-jacent. Il constitue un bon tutoriel pour apprendre tout à la fois comment utiliser les modules et comment ceux-ci sont typés.
[7]Xavier Leroy. A proposal for recursive modules in Objective Caml. Non publié.
Cette note décrit les modules récursifs expérimentaux introduits dans Objective Caml 3.07.

Objets

[8]Didier Rémy et Jérôme Vouillon. Objective ML: An effective object-oriented extension to ML. In Theory And Practice of Objects Systems, 4(1):27−50, 1998.
Cet article fournit les fondations théoriques de la couche orientée objets d'OCaml, à savoir sa sémantique et son système de types.
[9]Jacques Garrigue et Didier Rémy. Extending ML with Semi-Explicit Higher-Order Polymorphism. In Information & Computation, 155(1/2):134−169, 1999.
Cet article propose un moyen de réintroduire des valeurs polymorphes de première classe en ML tout en préservant son mécanisme d'inférence de types. Cette technologie est à la base des méthodes polymorphes d'OCaml.

Variantes polymorphes

[10]Jacques Garrigue. Programming with polymorphic variants. In ML Workshop, 1998.
Cet article explique brièvement ce que sont les variantes polymorphes et comment elles sont compilées.
[11]Jacques Garrigue. Code reuse through polymorphic variants. In Workshop on Foundations of Software Engineering, 2000.
Ce court article explique comment construire un interprète modulaire et extensible à l'aide des variantes polymorphes.
[12]Jacques Garrigue. Simple Type Inference for Structural Polymorphism. In Workshop on Foundations of Object-Oriented Languages, 2002.
Cet article explique une grande partie de la machinerie nécessaire au typage des variantes polymorphes. Son cœur est constitué d'une extension de la discipline de types de Core ML par des contraintes dites locales.
[13]Jacques Garrigue. Typing deep pattern-matching in presence of polymorphic variants. In JSSST Workshop on Programming and Programming Languages, 2004.
Cet article fournit de plus amples détails sur la machinerie techniques des variantes polymorphes, et se concentre sur les règles de typage des filtrages profonds.

Paramètres étiquetés et optionnels

[14]Jacques Garrigue. Labeled and optional arguments for Objective Caml. In JSSST Workshop on Programming and Programming Languages, 2001.
Cet article propose la sémantique, le système de types, et le schéma de compilation des paramètres de fonctions étiquetés et optionnels d'OCaml.

Les compilateurs et l'environnement d'exécution

Le compilateur vers code-octets et l'interprète de code-octets

[15]Xavier Leroy. The ZINC experiment, an economical implementation of the ML language. Rapport technique 117, INRIA, 1990.
Ce rapport contient une description du compilateur ZINC, dont l'évolution a ensuite donné naissance à Caml Light puis OCaml. Une grande partie de ce rapport est obsolète. Néanmoins, il garde un intérêt pour la description de la machine abstraite utilisée par Caml Light et (avec quelques simplifications et améliorations supplémentaires) par OCaml.

Le compilateur vers code natif

[16]Xavier Leroy. The effectiveness of type-based unboxing. In Workshop on Types in Compilation, 1997.
Cet article examine et compare plusieurs stratégies de représentation des données, y compris celle utilisée par le compilateur vers code natif d'OCaml.

Le glaneur de cellules

[17]Damien Doligez et Xavier Leroy. A concurrent, generational garbage collector for a multithreaded implementation of ML. In Principles of Programming Languages, 1993.
Dépassé par l'article qui suit.
[18]Damien Doligez et Georges Gonthier. Portable, Unobtrusive Garbage Collection for Multiprocessor Systems. In Principles of Programming Languages, 1994.
Cet article décrit une version parallèle du glaneur de cellules inclus dans l'environnement d'exécution de Caml Light et OCaml.
[19]Damien Doligez. Conception, réalisation et certification d'un glaneur de cellules concurrent. Thèse de doctorat, Université Paris 7, 1995.
Tout ce que vous avez toujours voulu savoir sur le glaneur de cellules inclus dans l'environnement d'exécution de Caml Light et OCaml.