Objective Caml 2.00 released

From: Xavier Leroy (Xavier.Leroy@inria.fr)
Date: Wed Aug 19 1998 - 10:26:02 MET DST

Date: Wed, 19 Aug 1998 10:26:02 +0200
From: Xavier Leroy <Xavier.Leroy@inria.fr>
To: caml-list@inria.fr
Subject: Objective Caml 2.00 released

It is my pleasure to announce the release of Objective Caml 2.00.

In addition to a number of enhancements and bug fixes (see detailed
list below), the main novelty of this release is the introduction of a
new class language (designed and implemented by Jérôme Vouillon).

The driving idea is to have a small language of class expressions to
manipulate classes, just like we have a small language of module
expressions to manipulate base modules (structures).

Class expressions are generated from base classes (definitions of
methods and instance variables) by adding initialization parameters,
applying (partially) those initialization parameters, putting class
type constraints to hide certain methods and instance variables, etc.

(Similarly, module expressions are generated from base modules
struct...end by functor abstraction, functor application, signature
constraints, etc.)

In addition to making the handling of classes more regular and
logical, the new class language is much more convenient than the OCaml
1.0 classes for controlling class initialization.

For more information on the new class language, see the tutorial
at http://caml.inria.fr/pub/old_caml_site/ocaml/htmlman/node3.html and the
reference manual at http://caml.inria.fr/pub/old_caml_site/ocaml/htmlman/node5.10.html

The downside of all this is that OCaml 2.00 is not upwards compatible
with OCaml 1.07 (hence the new major version number): the syntax of
classes has changed significantly, requiring some intervention on your
sources. These changes should affect very little programs that do not
use classes.

A semi-automatic translator from OCaml 1.07 to OCaml 2.00 is available at

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

        ocaml-2.00.tar.gz Source distribution (Unix, Windows, Mac)
        ocaml-2.00-1.i386.rpm Binaries for Linux RedHat 5.1 / Intel
        ocaml-2.00-win.zip Binaries for Windows 95 and NT
        ocaml-2.00-refman.* Documentation, in various formats
                                (HTML, PDF, Postscript, DVI, plain text)

For general info on Objective Caml, see http://caml.inria.fr/pub/old_caml_site/ocaml/

Please direct queries and bug reports to caml-light@inria.fr
and general discussions to the mailing-list caml-list@inria.fr or the
comp.lang.ml newsgroup.

- Xavier Leroy, for the Objective Caml team.


Objective Caml 2.00:

* Language:
  - New class language. See http://caml.inria.fr/pub/old_caml_site/ocaml/refman/
    for a tutorial (chapter 2) and for the reference manual (section 4.9).
  - Local module definitions "let module X = <module-expr> in <expr>".
  - Record copying with update "{r with lbl1 = expr1; ...}".
  - Array patterns "[|pat1; ...;patN|]" in pattern-matchings.
  - New reserved keywords: "object", "initializer".
  - No longer reserved: "closed", "protected".

* Bytecode compiler:
  - Use the same compact memory representations for float arrays, float
    records and recursive closures as the native-code compiler.
  - More type-dependent optimizations.
  - Added the -use_runtime and -make_runtime flags to build separately
    and reuse afterwards custom runtime systems
    (inspired by Fabrice Le Fessant's patch).

* Native-code compiler:
  - Cross-module constant propagation of integer constants.
  - More type-dependent optimizations.
  - More compact code generated for "let rec" over data structures.
  - Better code generated for "for" loops (test at bottom of code).
  - More aggressive scheduling of stores.
  - Added -p option for time profiling with gprof
    (fully supported on Intel x86/Linux and Alpha/Digital Unix only)
    (inspired by Aleksey Nogin's patch).
  - A case of bad spilling with high register pressure fixed.
  - Fixed GC bug when GC called from C without active Caml code.
  - Alpha: $gp handling revised to follow Alpha's standard conventions,
    allow running "atom" and "pixie" on ocamlopt-generated binaries.
  - Intel x86: use movzbl and movsbl systematically to load 8-bit and 16-bit
    quantities, no more hacks with partial registers (better for the
    Pentium Pro, worse for the Pentium).
  - PowerPC: more aggressive scheduling of return address reloading.
  - Sparc: scheduling bug related to register pairs fixed.

* Runtime system:
  - Better printing of uncaught exceptions (print a fully qualified
    name whenever possible).

* New ports:
  - Cray T3E (bytecode only) (in collaboration with CEA).
  - PowerMac under Rhapsody.
  - SparcStations under Linux.

* Standard library:
  - Added set_binary_mode_in and set_binary_mode_out in Pervasives
    to toggle open channels between text and binary modes.
  - output_value and input_value check that the given channel is in
    binary mode.
  - input_value no longer fails on very large marshalled data (> 16 Mbytes).
  - Module Arg: added option Rest.
  - Module Filename: temp_file no longer loops if temp dir doesn't exist.
  - Module List: added rev_append (tail-rec alternative to @).
  - Module Set: tell the truth about "elements" returning a sorted list;
    added min_elt, max_elt, singleton.
  - Module Sys: added Sys.time for simple measuring of CPU time.

* ocamllex:
  - Check for overflow when generating the tables for the automaton.
  - Error messages in generated .ml file now point to .mll source.
  - Added "let <id> = <regexp>" to name regular expressions
    (inspired by Christian Lindig's patch).

* ocamlyacc:
  - Better error recovery in presence of EOF tokens.
  - Error messages in generated .ml file now point to .mly source.
  - Generated .ml file now type-safe even without the generated .mli file.

* The Unix library:
  - Use float instead of int to represent Unix times (number of seconds
    from the epoch). This fixes a year 2005 problem on 32-bit platforms.
    Functions affected: stat, lstat, fstat, time, gmtime, localtime,
    mktime, utimes.
  - Added putenv.
  - Better handling of "unknown" error codes (EUNKNOWNERR).
  - Fixed endianness bug in getservbyport.
  - win32unix (the Win32 implementation of the Unix library) now has
    the same interface as the unix implementation, this allows exchange
    of compiled .cmo and .cmi files between Unix and Win32.

* The thread libraries:
  - Bytecode threads: bug with escaping exceptions fixed.
  - System threads (POSIX, Win32): malloc/free bug fixed; signal bug fixed.
  - Both: added Thread.wait_signal to wait synchronously for signals.

* The graph library: bigger color cache.

* The str library: added Str.quote, Str.regexp_string,

* Emacs mode:
  - Fixed bug with paragraph fill.
  - Fixed bug with next-error under Emacs 20.

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