From: Xavier Leroy <xleroy@pauillac.inria.fr>
Message-Id: <199507051619.SAA28877@pauillac.inria.fr>
Subject: final release of Caml Light 0.7
To: caml-list@pauillac.inria.fr
Date: Wed, 5 Jul 1995 18:19:17 +0200 (MET DST)
It is my pleasure to announce the final release of version 0.7 of
the Caml Light system.
It is available by anonymous FTP from:
host: ftp.inria.fr (192.93.2.54)
directory: lang/caml-light
Summary of the files:
README More detailed summary
cl7unix.tar.gz Unix version (source code)
cl7macbin.sea.hqx Binaries for the Macintosh version
(these are fat binaries - run native on Power Macs)
cl7macsrc.sea.hqx Source code for the Macintosh version
cl7pcbin.zip Binaries for the 80386 PC version
cl7pcsrc.zip Source code for the 80386 PC version
cl7lin*.tar.gz Binaries for Linux
cl7refman.* Reference manual, in various formats
cl7tutorial.* Tutorial, in various formats
This release fixes all known bugs from release 0.61 and has many new
features, libraries and contributed tools, including a source-level
replay debugger and a Tk-based graphical user interface, with
application to a flashy hypertext browser for module interfaces.
A detailed list of changes is included at the end of this message.
All in all, this release is a major improvement in terms of
reliability and comfort of use; all users of Caml Light are strongly
encouraged to upgrade.
Please direct bug reports and technical questions to
caml-light@pauillac.inria.fr, the implementor's mailing list.
General questions and comments of interest to the Caml community
should be sent to caml-list@pauillac.inria.fr, the Caml mailing list.
- Xavier Leroy
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The Caml Light racing team "Low tar Caml taste" %
% caml-light@pauillac.inria.fr %
% Caml Light, projet Cristal, INRIA, B.P.105, 78153 Le Chesnay, France. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Detailed list of changes:
* Source-level debugger with replay capabilities. Compiler support for
the debugger added. [Unix-only]
* New contributed libraries and tools:
- camltk: a complete X-windows toolkit based on TCL/TK.
- camlpro: a profiler for Caml Light programs (execution counts)
- lorder: determine ordering of .zo files at link-time
* camlbrowser: a camltk-based graphics browser for Caml sources
and interfaces, with hypertext navigation. [Unix-only]
* Polymorphism is now restricted to values (let x = e generalizes the type of
x only if e is syntactically a value, e.g. a constant, a variable, a
function, a tuple of values, etc). This ensures correct, type-safe handling
of polymorphic mutable structures.
* "Guards" in pattern-matching (match ... with pat when cond -> expr).
* Partial matches and unused match cases are correctly detected now.
* Internationalized error messages (controlled by the LANG environment
variable; known languages so far: english, french, spanish,
german, and italian).
More detailed error messages.
* Various fixes in the garbage collector to fight fragmentation of the
major heap, result in major speedups for some long-running programs.
* Generic comparisons (prefix < : 'a -> 'a -> bool). Compiler optimizations
for comparisons on base types.
* Type-checker rewritten in bottom-up style instead of top-down style.
Hopefully this makes type errors more understandable.
* let rec (f : ty) = ... now supported.
* New class of infix and prefix symbols supported (e.g. *=, !!, ++, with
precedence/associativity determined by their first character).
* Syntactic sugar:
- Alternate syntax for string access and update (s.[i], s.[i] <- c).
- Final semicolons permitted in sequences, lists, arrays and records
(e.g. begin ...; ...; end or [1;2;]).
- Initial | permitted in pattern matchings and type definitions
(e.g. function | pat -> expr | ...
or type t = | Cstr1 | ...)
- "&&" and "||" synonymous for "&" and "or".
* Optimized access to unqualified identifiers in symbol tables.
* Parser cleaned up a bit, reduce/reduce conflicts eliminated.
* New library modules: format (to write pretty-printers), gc (to control the
garbage collector and obtain various statistics on memory allocation).
* The toplevel pretty-prints values and types.
* New toplevel functions: install_printer (user-defined printing functions,
now type safe and associated with a type expression -- e.g. int list --
not with a type constructor -- e.g. list); set_print_depth and
set_print_length (control how much is printed).
* Better support for non-generalizable type variables in phrases:
they no longer cause an error immediately, the check is delayed till
the end of the compilation unit.
* Static type-checking of printf. User-defined printers supported in printf
formats (%a and %t).
* "camlc -W" prints extra warnings (useless #open, capitalized variable, ...).
* camlyacc: more checks on grammar for missing actions, etc.
Parsing engine now reentrant; a camlyacc-generated parser can call
another one in one of its actions. Bug with tokens having a tuple as
semantic attribute fixed.
* Better support for 64-bit architectures: 32-bit architectures can read
values written on a file by a 64-bit architecture; max length of strings
and arrays now determined by the runtime system.
* New primitive ouput_compact_value to write arbitrary values to disk in
a more compact (but more CPU-demanding) format than output_value.
* More robust parsing of argv (some Unix kernels set argv[0] = argv[1] = file
when a #! file is run).
* CAMLRUNPARAM environment variable to set GC parameters.
* contrib/libgraph: implemented alternate event handling methods if async I/O
are not available; ask for system calls to be restarted if possible;
restart read and write system calls if interrupted; better handling
of "button up" and "mouse motion" events.
* contrib/libnums: upgraded the bignum library; better 64-bit support
(but still has some 64-bit bugs); alternate names for num operations
(+/ -/ */ etc).
Main incompatibilities with Caml Light 0.61:
* Polymorphic generalization has been severely restricted to eliminate
unsoundness w.r.t. polymorphic mutables. As a consequence, several
"let" declarations that used to be polymorphic are now monomorphic,
which may cause type errors later. See the manual p. 54 for a complete
description of the problem and several workarounds.
* Due to the new infix operators, extra blank space sometimes needs
to be inserted, e.g. `x+!y' should now be written `x+ !y'
(or better yet, `x + !y').