Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
final release of Caml Light 0.7
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Xavier Leroy <xleroy@p...>
Subject: final release of Caml Light 0.7
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:     (
    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        Binaries for the 80386 PC version        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, the implementor's mailing list.

General questions and comments of interest to the Caml community
should be sent to, the Caml mailing list.

- Xavier Leroy

% The Caml Light racing team            "Low tar Caml taste"            %
%                                          %
% 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').