241 lines
9.1 KiB
Plaintext
241 lines
9.1 KiB
Plaintext
\chapter{Further reading}
|
|
|
|
For the interested reader, we list below some references to books and
|
|
reports related (sometimes loosely) to Caml Light.
|
|
|
|
\section{Programming in ML}
|
|
|
|
The books below are programming courses taught in ML. Their main goal
|
|
is to teach programming, not to describe ML in full details --- though
|
|
most contain fairly good introductions to the ML language. Some of
|
|
those books use the Standard ML dialect instead of the Caml dialect,
|
|
so you will have to keep in mind the differences in syntax and in
|
|
semantics.
|
|
|
|
\begin{itemize}
|
|
|
|
\item Pierre Weis and Xavier Leroy. {\it Le langage Caml.}
|
|
InterÉditions, 1993.
|
|
|
|
The natural companion to this manual, provided you read French. This
|
|
book is a step-by-step introduction to programming in Caml, and
|
|
presents many realistic examples of Caml programs.
|
|
|
|
\item Guy Cousineau and Michel Mauny. {\it Approche fonctionnelle de
|
|
la programmation}. Ediscience, 1995.
|
|
|
|
Another Caml programming course written in French, with many original
|
|
examples.
|
|
|
|
\item Lawrence C.\ Paulson. {\it ML for the working programmer.}
|
|
Cambridge University Press, 1991.
|
|
|
|
A good introduction to programming in Standard ML. Develops a
|
|
theorem prover as a complete example. Contains a presentation of
|
|
the module system of Standard ML.
|
|
|
|
\item Jeffrey D.\ Ullman. {\it Elements of ML programming.}
|
|
Prentice Hall, 1993.
|
|
|
|
Another good introduction to programming in Standard ML. No realistic
|
|
examples, but a very detailed presentation of the language constructs.
|
|
|
|
\item Ryan Stansifer. {\em ML primer.} Prentice-Hall, 1992.
|
|
|
|
A short, but nice introduction to programming in Standard ML.
|
|
|
|
\item Thérèse Accart Hardin and Véronique Donzeau-Gouge Viguié. {\em
|
|
Concepts et outils de la programmation. Du fonctionnel à
|
|
l'impératif avec Caml et Ada.} InterÉditions, 1992.
|
|
|
|
A first course in programming, that first introduces the main programming
|
|
notions in Caml, then shows them underlying Ada. Intended for
|
|
beginners; slow-paced for the others.
|
|
|
|
\item Rachel Harrison. {\em Abstract Data Types in Standard ML}.
|
|
John Wiley \& Sons, 1993.
|
|
|
|
A presentation of Standard ML from the standpoint of abstract data
|
|
types. Uses intensively the Standard ML module system.
|
|
|
|
\item Harold Abelson and Gerald Jay Sussman.
|
|
{\em Structure and Interpretation of Computer Programs.} The MIT
|
|
press, 1985. (French translation: {\em Structure et interprétation
|
|
des programmes informatiques}, InterÉditions, 1989.)
|
|
|
|
An outstanding course on programming, taught in Scheme, the modern
|
|
dialect of Lisp. Well worth reading, even if you are more interested
|
|
in ML than in Lisp.
|
|
|
|
\end{itemize}
|
|
|
|
\section{Descriptions of ML dialects}
|
|
|
|
The books and reports below are descriptions of various programming
|
|
languages from the ML family. They assume some familiarity with ML.
|
|
|
|
\begin{itemize}
|
|
|
|
\item Xavier Leroy and Pierre Weis. {\em Manuel de référence du
|
|
langage Caml.} InterÉditions, 1993.
|
|
|
|
The French edition of the present reference manual and user's manual.
|
|
|
|
\item Robert Harper. {\em Introduction to Standard ML.} Technical
|
|
report ECS-LFCS-86-14, University of Edinburgh, 1986.
|
|
|
|
An overview of Standard ML, including the module system. Terse, but
|
|
still readable.
|
|
|
|
\item Robin Milner, Mads Tofte and Robert Harper. {\em The definition
|
|
of Standard ML.} The MIT press, 1990.
|
|
|
|
A complete formal definition of Standard ML, in the framework of
|
|
structured operational semantics. This book is probably the most
|
|
mathematically precise definition of a programming language ever
|
|
written. It is heavy on formalism and extremely terse, so
|
|
even readers who are thoroughly familiar with ML will have
|
|
major difficulties with it.
|
|
|
|
\item Robin Milner and Mads Tofte. {\em Commentary on Standard ML.}
|
|
The MIT Press, 1991.
|
|
|
|
A commentary on the book above, that attempts to explain the most
|
|
delicate parts and motivate the design choices. Easier to read than the
|
|
Definition, but still rather involving.
|
|
|
|
\item Guy Cousineau and Gérard Huet. {\em The CAML primer.} Technical
|
|
report~122, INRIA, 1990.
|
|
|
|
A short description of the original Caml system, from which Caml Light
|
|
has evolved. Some familiarity with Lisp is assumed.
|
|
|
|
\item Pierre Weis et al. {\em The CAML reference manual, version
|
|
2.6.1.} Technical report~121, INRIA, 1990.
|
|
|
|
The manual for the original Caml system, from which Caml Light
|
|
has evolved.
|
|
|
|
\item Michael J.\ Gordon, Arthur J.\ Milner and Christopher P.\ Wadsworth.
|
|
{\em Edinburgh LCF.} Lecture Notes in Computer Science
|
|
volume~78, Springer-Verlag, 1979.
|
|
|
|
This is the first published description of the ML language, at the
|
|
time when it was nothing more than the control language for the LCF
|
|
system, a theorem prover. This book is now obsolete, since the ML
|
|
language has much evolved since then; but it is still of historical
|
|
interest.
|
|
|
|
\item Paul Hudak, Simon Peyton-Jones and Philip Wadler. {\em
|
|
Report on the programming language Haskell, version 1.1.} Technical
|
|
report, Yale University, 1991.
|
|
|
|
Haskell is a purely functional language with lazy semantics that
|
|
shares many important points with ML (full functionality, polymorphic
|
|
typing), but has interesting features of its own (dynamic overloading,
|
|
also called type classes).
|
|
|
|
\end{itemize}
|
|
|
|
\section{Implementing functional programming languages}
|
|
|
|
The references below are intended for those who are curious to learn
|
|
how a language like Caml Light is compiled and implemented.
|
|
|
|
\begin{itemize}
|
|
|
|
\item Xavier Leroy. {\em The ZINC experiment: an economical
|
|
implementation of the ML language.} Technical report~117, INRIA, 1990.
|
|
(Available by anonymous FTP on "ftp.inria.fr".)
|
|
|
|
A description of the ZINC implementation, the prototype ML
|
|
implementation that has evolved into Caml Light. Large parts of this
|
|
report still apply to the current Caml Light system, in particular the
|
|
description of the execution model and abstract machine. Other parts
|
|
are now obsolete. Yet this report still gives a complete overview of the
|
|
implementation techniques used in Caml Light.
|
|
|
|
\item Simon Peyton-Jones. {\em The implementation of functional
|
|
programming languages.} Prentice-Hall, 1987. (French translation:
|
|
{\em Mise en \oe uvre des langages fonctionnels de programmation},
|
|
Masson, 1990.)
|
|
|
|
An excellent description of the implementation of purely functional
|
|
languages with lazy semantics, using the technique known as graph
|
|
reduction. The part of the book that deals with the transformation
|
|
from ML to enriched lambda-calculus directly applies to Caml Light.
|
|
You will find a good description of how pattern-matching is compiled
|
|
and how types are inferred. The remainder of the book does not apply
|
|
directly to Caml Light, since Caml Light is not purely functional (it
|
|
has side-effects), has strict semantics, and does not use graph
|
|
reduction at all.
|
|
|
|
\item Andrew W.\ Appel. {\em Compiling with continuations.} Cambridge
|
|
University Press, 1992.
|
|
|
|
A complete description of an optimizing compiler for Standard ML,
|
|
based on an intermediate representation called continuation-passing
|
|
style. Shows how many advanced program optimizations can be applied to
|
|
ML. Not directly relevant to the Caml Light system, since Caml Light
|
|
does not use continuation-passing style at all, and makes little
|
|
attempts at optimizing programs.
|
|
|
|
\end{itemize}
|
|
|
|
\section{Applications of ML}
|
|
|
|
The following reports show ML at work in various, sometimes
|
|
unexpected, areas.
|
|
|
|
\begin{itemize}
|
|
|
|
\item Emmanuel Chailloux and Guy Cousineau. {\em The MLgraph primer.}
|
|
Technical report 92-15, École Normale Supérieure, 1992. (Available by
|
|
anonymous FTP on "ftp.ens.fr".)
|
|
%, répertoire "biblio", fichier
|
|
% "liens-92-15.A4.300dpi.ps.Z".)
|
|
|
|
Describes a Caml Light library that produces Postscript pictures
|
|
through high-level drawing functions.
|
|
|
|
\item Xavier Leroy. {\em Programmation du système Unix en Caml Light.}
|
|
Technical report~147, INRIA, 1992. (Available by anonymous FTP on
|
|
"ftp.inria.fr".)
|
|
%, répertoire "INRIA/publication", fichier "RT-0147.ps.Z".)
|
|
|
|
A Unix systems programming course, demonstrating the use of the Caml
|
|
Light library that gives access to Unix system calls.
|
|
|
|
\item John H.\ Reppy. {\em Concurrent programming with events --- The
|
|
concurrent ML manual.} Cornell University, 1990.
|
|
(Available by anonymous FTP on "research.att.com".)
|
|
%, répertoire "dist/ml", fichier "CML-0.9.8.tar.Z".)
|
|
|
|
Concurrent ML extends Standard ML of New Jersey with concurrent
|
|
processes that communicate through channels and events.
|
|
|
|
\item Jeannette M. Wing, Manuel Faehndrich, J.\ Gregory Morrisett and
|
|
Scottt Nettles. {\em Extensions to Standard ML to support
|
|
transactions.} Technical report CMU-CS-92-132, Carnegie-Mellon
|
|
University, 1992. (Available by anonymous FTP on
|
|
"reports.adm.cs.cmu.edu".)
|
|
% , répertoire "1992", fichier "CMU-CS-92-132.ps".)
|
|
|
|
How to integrate the basic database operations to Standard ML.
|
|
|
|
\item Emden R.\ Gansner and John H.\ Reppy. {\em eXene.} Bell Labs,
|
|
1991. (Available by anonymous FTP on "research.att.com".)
|
|
%, répertoire "dist/ml", fichier "eXene-0.4.tar.Z".)
|
|
|
|
An interface between Standard ML of New Jersey and the X Windows
|
|
windowing system.
|
|
|
|
%% \item Daniel de Rauglaudre. {\em X toolkit in Caml Light.} INRIA,
|
|
%% 1992. (Included in the Caml Light distribution.)
|
|
%% % Disponible par FTP anonyme sur
|
|
%% % "ftp.inria.fr", répertoire "lang/caml-light", fichier "rt5.tar.Z".)
|
|
%%
|
|
%% An interface between Caml Light and the X Windows windowing system.
|
|
|
|
\end{itemize}
|