Objective Caml 1.06 released

From: Xavier Leroy (Xavier.Leroy@inria.fr)
Date: Tue Nov 18 1997 - 15:27:03 MET

From: Xavier Leroy <Xavier.Leroy@inria.fr>
Message-Id: <199711181427.PAA18251@pauillac.inria.fr>
Subject: Objective Caml 1.06 released
To: caml-list@inria.fr
Date: Tue, 18 Nov 1997 15:27:03 +0100 (MET)

We have just released version 1.06 of Objective Caml. It's been
almost six months since the previous release, and in the meantime
quite a lot of bug fixes and extensions have accumulated.

Highlights include a heap compactor (to fight fragmentation on
long-running programs), minimal support for lazy evaluation,
"protected" methods, and execution of Caml scripts by the toplevel.
See the end of this message for a detailed list of changes.

Objective Caml 1.06 is available from ftp://ftp.inria.fr/lang/caml-light,
in the following files:

        ocaml-1.06.tar.gz Source distribution (Unix, PC, Mac)
        ocaml-1.06-1.i386.rpm Binaries for Linux RedHat / Intel
        ocaml-1.06-win.zip Binaries for Windows 95 and NT
        ocaml-1.06-refman.* Documentation, in various formats

Source diffs from 1.05 are not available, because they are too large.
The binary distributions (RedHat and Windows) also include the TK
interface ocamltk41 (to be announced shortly).

For general info on Objective Caml, see http://pauillac.inria.fr/ocaml/

- Xavier Leroy, for the Objective Caml team


Detailed list of changes:

* Language:
  - Added two new keywords: "assert" (check assertion) and "lazy"
    (delay evaluation).
  - Allow identifiers to start with "_" (such identifiers are treated
    as lowercase idents).

* Objects:
  - Added "protected" methods (visible only from subclasses, can be hidden
    in class type declared in module signature).
  - Objects can be compared using generic comparison functions.
  - Fixed compilation of partial application of object constructors.
* Type system:
  - Occur-check now more strict (all recursions must traverse an object).
  - A few bugs fixed.

* Run-time system:
  - A heap compactor was implemented, so long-running programs can now
    fight fragmentation.
  - The meaning of the "space_overhead" parameter has changed.
  - The macros Push_roots and Pop_roots are superseded by Begin_roots* and
  - Bytecode executable includes list of primitives used, avoids crashes
    on version mismatch.
  - Reduced startup overhead for marshalling, much faster marshalling of
    small objects.
  - New exception Stack_overflow distinct from Out_of_memory.
  - Maximum stack size configurable.
  - I/O revised for compatibility with compactor and with native threads.
  - All C code ANSIfied (new-style function declarations, etc).
  - Threaded code work on all 64-bit processors, not just Alpha/Digital Unix.
  - Better printing of uncaught exceptions.

* Both compilers:
  - Parsing: more detailed reporting of syntax errors (e.g. shows
    unmatched opening parenthesis on missing closing parenthesis).
  - Check consistency between interfaces (.cmi).
  - Revised rules for determining dependencies between modules.
  - Options "-verbose" for printing calls to C compiler, "-noassert"
    for turning assertion checks off.

* Native-code compiler:
  - Machine-dependent parts rewritten using inheritance instead of
    parameterized modules.
  - GC bug in value let rec fixed.
  - Port to Linux/Alpha.
  - Sparc: cleaned up use of %g registers, now compatible with Solaris threads.

* Top-level interactive system:
  - Can execute Caml script files given on command line.
  - Reads commands from ./.ocamlinit on startup.
  - Now thread-compatible.

* Standard library:
  - New library module: Lazy (delayed computations).
  - New library module: Marshal. Allows marshalling to strings and
    transmission of closures between identical programs (SPMD parallelism).
  - Filename: "is_absolute" is superseded by "is_implicit" and "is_relative".
    To adapt old programs, change "is_absolute x" to "not (is_implicit x)"
    (but the new "is_relative" is NOT the opposite of the old "is_absolute").
  - Array, Hashtbl, List, Map, Queue, Set, Stack, Stream:
    the "iter" functions now take as argument a unit-returning function.
  - Format: added "printf" interface to the formatter (see the documentation).
    Revised behaviour of simple boxes: no more than one new line is output
    when consecutive break hints should lead to multiple line breaks.
  - Stream: revised implementation, renamed Parse_failure to Failure and
    Parse_error to Error (don't you love gratuitous changes?).
  - String: added index, rindex, index_from, rindex_from.
  - Array: added mapi, iteri, fold_left, fold_right, init.
  - Added Map.map, Set.subset, Printexc.to_string.

* ocamllex: lexers generated by ocamllex can now handle all characters,
  including '\000'.

* ocamlyacc: fixed bug with function closures returned by parser rules.

* Debugger:
  - Revised generation of events.
  - Break on function entrance.
  - New commands start/previous.
  - The command loadprinter now try to recursively load required
  - Numerous small fixes.

* External libraries:
  - systhreads: can now use POSIX threads; POSIX and Win32 threads are
    now supported by the native-code compiler.
  - dbm and graph: work in native code.
  - num: fixed bug in Nat.nat_of_string.
  - str: fixed deallocation bug with case folding.
  - win32unix: use Win32 handles instead of (buggy) VC++ emulation of Unix
    file handles; added gettimeofday.

* Emacs editing mode and debugger interface updated to July '97 version.

This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:12 MET