final release of Caml Light 0.7

Xavier Leroy (xleroy@pauillac.inria.fr)
Wed, 5 Jul 1995 18:19:17 +0200 (MET DST)

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').