Version française
Home     About     Download     Resources     Contact us    
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:           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').