summaryrefslogtreecommitdiff
path: root/ocaml-binary-annot/Changes
diff options
context:
space:
mode:
Diffstat (limited to 'ocaml-binary-annot/Changes')
-rw-r--r--ocaml-binary-annot/Changes2627
1 files changed, 2627 insertions, 0 deletions
diff --git a/ocaml-binary-annot/Changes b/ocaml-binary-annot/Changes
new file mode 100644
index 0000000000..7c35b12741
--- /dev/null
+++ b/ocaml-binary-annot/Changes
@@ -0,0 +1,2627 @@
+Objective Caml 3.12.0:
+----------------------
+
+(Changes that can break existing programs are marked with a "*" )
+
+Language features:
+- Shorthand notation for records: in expressions and patterns,
+ { lbl } stands for { lbl = lbl } and { M.lbl } for { M.lbl = lbl }
+- Record patterns of the form { lbl = pat; _ } to mark that not all
+ labels are listed, purposefully. (See new warning below.)
+- Explicit naming of a generic type; in an expression
+ "fun ... (type t) ... -> e", the type t is considered abstract in its
+ scope (the arguments that follow it and the body of the function),
+ and then replaced by a fresh type variable. In particular, the type
+ t can be used in contexts where a type variable is not allowed
+ (e.g. for defining an exception in a local module).
+- Explicit polymorphic types and polymorphic recursion. In let
+ definitions, one can write an explicit polymorphic type just
+ immediately the function name; the polymorphism will be enforced,
+ and recursive calls may use the polymorphism.
+ The syntax is the same as for polymorphic methods:
+ "let [rec] <ident> : 'a1 ... 'an. <typexp> = ..."
+- First-class packages modules.
+ New kind of type expression, for packaged modules: (module PT).
+ New kind of expression, to pack a module as a first-class value:
+ (module MODEXPR : PT).
+ New kind of module expression, to unpack a first-class value as a module:
+ (val EXPR : PT).
+ PT is a package type of the form "S" or
+ "S with type t1 = ... and ... and type tn = ..." (S refers to a module type).
+- Local opening of modules in a subexpression.
+ Syntax: "let open M in e", or "M.(e)"
+- In class definitions, method and instance variable override can now
+ be made explicit, by writing "method!", "val!" or "inherit!" in place of
+ "method", "val" and "inherit". It is an error to override an
+ undefined member (or to use overriding inheritance when nothing get
+ overridden). Additionally, these constructs disactivate respectively
+ warnings 7 (method override, code 'M') and 13 (instance variable
+ override, code 'V'). Note that, by default, warning 7 is inactive
+ and warning 13 is active.
+- "Destructive" substitution in signatures.
+ By writing "<signature> with type t := <typeconstr>" and
+ "<signature> with module M := <module-path>" one replaces "t" and "M"
+ inside the signature, removing their respective fields. Among other
+ uses, this allows to merge two signatures containing identically
+ named fields.
+* While fixing PR#4824, also corrected a gaping hole in the type checker,
+ which allowed instantiating separately object parameters and instance
+ variables in an interface. This hole was here since the beginning of
+ ocaml, and as a result many programs using object inheritance in a non
+ trivial way will need to be corrected. You can look at lablgtk2 for an
+ example.
+
+Compilers and toplevel:
+- Warnings are now numbered and can be switched on and off individually.
+ The old system with letters referring to sets of warnings is still
+ supported.
+- New warnings:
+ + 9 (code 'R') to signal record patterns without "; _" where
+ some labels of the record type are not listed in the pattern.
+ + 28 when giving a wildcard argument to a constant constructor in
+ a pattern-matching.
+ + 29 when an end-of-line appears unescaped in a string constant.
+ + 30 when the same constructor or record field is defined twice in
+ mutually-recursive type definitions.
+* The semantics of warning 7 (code 'M', method override) have changed
+ (it now detects all overrides, not just repeated definitions inside
+ the same class body), and it is now inactive by default.
+- Better error report in case of unbound qualified identifier: if the module
+ is unbound this error is reported in the first place.
+- Added option '-strict-sequence' to force left hand part of sequence to have
+ type unit.
+- Added option '-no-app-funct' to turn applicative functors off.
+ This option can help working around mysterious type incompatibilities
+ caused by the incomplete comparison of applicative paths F(X).t.
+
+Native-code compiler:
+- AMD64: shorter and slightly more efficient code generated for
+ float comparisons.
+
+Standard library:
+- Format: new function ikfprintf analoguous to ifprintf with a continuation
+ argument.
+* PR#4210, #4245: stricter range checking in string->integer conversion
+ functions (int_of_string, Int32.of_string, Int64.of_string,
+ Nativeint.of_string). The decimal string corresponding to
+ max_int + 1 is no longer accepted.
+- Scanf: to prevent confusion when mixing Scanf scanning functions and direct
+ low level input, value Scanf.stdin has been added.
+* Random: changed the algorithm to produce better randomness. Now passes the
+ DieHard tests.
+- Map: implement functions from Set that make sense for Map.
+
+Other libraries:
+* Str: letters that constitute a word now include digits 0-9 and
+ underscore _. This changes the interpretation of '\b' (word boundary)
+ in regexps, but is more consistent with other regexp libraries. (PR#4874).
+
+Ocamlbuild:
+- Add support for native dynlink.
+
+New tool:
+- ocamlobjinfo: displays various information, esp. dependencies, for
+ compiled OCaml files (.cmi, .cmo, .cma, .cmx, .cmxa, .cmxs, and bytecode
+ executables). Extends and makes more official the old objinfo tool
+ that was installed by some OCaml packages.
+
+All tools:
+- PR#4857: add a -vnum option to display the version number and nothing else
+
+Bug Fixes:
+- PR#4012: Map.map and Map.mapi do not conform to specification
+- PR#4478: better error messages for type definition mismatches
+- PR#4683: labltk script uses fixed path on windows
+- PR#4742: finalisation function raising an exception blocks other finalisations
+- PR#4775: compiler crash on crazy types (temporary fix)
+- PR#4824: narrowing the type of class parameters with a module specification
+- PR#4862: relaxed value restriction and records
+- PR#4884: optional arguments do not work when Some is redefined
+- PR#4964: parenthesized names for infix functions in annot files
+- PR#4970: better error message for instance variables
+- PR#4975: spelling mistakes
+- PR#4988: contravariance lost with ocamlc -i
+- PR#5004: problem in Buffer.add_channel with very large lengths.
+- PR#5008: on AMD64/MSVC port, rare float corruption during GC.
+- PR#5018: wrong exception raised by Dynlink.loadfile.
+- PR#5057: fatal typing error with local module + functor + polymorphic variant
+- Wrong type for Obj.add_offset.
+- Small problem with the representation of Int32, Int64, and Nativeint constants.
+- Use RTLD_LOCAL for native dynlink in private mode.
+
+Objective Caml 3.11.2:
+----------------------
+
+Bug fixes:
+- PR#4151: better documentation for min and max w.r.t. NaN
+- PR#4421: ocamlbuild uses wrong compiler for C files
+- PR#4710, PR#4720: ocamlbuild does not use properly configuration information
+- PR#4750: under some Windows installations, high start-up times for Unix lib
+- PR#4777: problem with scanf and CRLF
+- PR#4783: ocamlmklib problem under Windows
+- PR#4810: BSD problem with socket addresses, e.g. in Unix.getnameinfo
+- PR#4813: issue with parsing of float literals by the GNU assembler
+- PR#4816: problem with modules and private types
+- PR#4818: missed opportunity for type-based optimization of bigarray accesses
+- PR#4821: check for duplicate method names in classes
+- PR#4823: build problem on Mac OS X
+- PR#4836: spurious errors raised by Unix.single_write under Windows
+- PR#4841, PR#4860, PR#4930: problem with ocamlopt -output-obj under Mac OS X
+- PR#4847: C compiler error with ocamlc -output-obj under Win64
+- PR#4856: ocamlbuild uses ocamlrun to execute a native plugin
+- PR#4867, PR#4760: ocamlopt -shared fails on Mac OS X 64bit
+- PR#4873: ocamlbuild ignores "thread" tag when building a custom toplevel
+- PR#4890: ocamlbuild tries to use native plugin on bytecode-only arch
+- PR#4896: ocamlbuild should always pass -I to tools for external libraries
+- PR#4900: small bug triggering automatic compaction even if max_overhead = 1M
+- PR#4902: bug in %.0F printf format
+- PR#4910: problem with format concatenation
+- PR#4922: ocamlbuild recompiles too many files
+- PR#4923: missing \xff for scanf %S
+- PR#4933: functors not handling private types correctly
+- PR#4940: problem with end-of-line in DOS text mode, tentative fix
+- PR#4953: problem compiling bytecode interpreter on ARM in Thumb mode.
+- PR#4955: compiler crash when typing recursive type expression with constraint
+- Module Printf: the simple conversion %F (without width indication) was not
+ treated properly.
+- Makefile: problem with cygwin, flexdll, and symbolic links
+- Various build problems with ocamlbuild under Windows with msvc
+
+Feature wishes:
+- PR#9: (tentative implementation) make ocamldebug use #linenum annotations
+- PR#123, PR#4477: custom exception printers
+- PR#3456: Obj.double_field and Obj.set_double_field functions
+- PR#4003: destination directory can be given to Filename.[open_]temp_file
+- PR#4647: Buffer.blit function
+- PR#4685: access to Filename.dir_sep
+- PR#4703: support for debugging embedded applications
+- PR#4723: "clear_rules" function to empty the set of ocamlbuild rules
+- PR#4921: configure option to help cross-compilers
+
+Objective Caml 3.11.1:
+----------------------
+
+Bug fixes:
+- PR#4095: ocamldebug: strange behaviour of control-C
+- PR#4403: ocamldebug: improved handling of packed modules
+- PR#4650: Str.regexp_case_fold mis-handling complemented character sets [^a]
+- PR#4660: Scanf.format_from_string: handling of double quote
+- PR#4666: Unix.exec* failure in multithread programs under MacOS X and FreeBSD
+- PR#4667: debugger out of sync with dynlink changes
+- PR#4678: random "out of memory" error with systhreads
+- PR#4690: issue with dynamic loading under MacOS 10.5
+- PR#4692: wrong error message with options -i and -pack passed to ocamlc
+- PR#4699: in otherlibs/dbm, fixed construction of dlldbm.so.
+- PR#4704: error in caml_modify_generational_global_root()
+- PR#4708: (ocamldoc) improved printing of infix identifiers such as "lor".
+- PR#4722: typo in configure script
+- PR#4729: documented the fact that PF_INET6 is not available on all platforms
+- PR#4730: incorrect typing involving abbreviation "type 'a t = 'a"
+- PR#4731: incorrect quoting of arguments passed to the assembler on x86-64
+- PR#4735: Unix.LargeFile.fstat cannot report size over 32bits on Win32
+- PR#4740: guard against possible processor error in
+ {Int32,Int64,Nativeint}.{div,rem}
+- PR#4745: type inference wrongly produced non-generalizable type variables.
+- PR#4749: better pipe size for win32unix
+- PR#4756: printf: no error reported for wrong format '%_s'
+- PR#4758: scanf: handling of \<newline> by format '%S'
+- PR#4766: incorrect simplification of some type abbreviations.
+- PR#4768: printf: %F does not respect width and precision specifications
+- PR#4769: Format.bprintf fails to flush
+- PR#4775: fatal error Ctype.Unify during module type-checking (temporary fix)
+- PR#4776: bad interaction between exceptions and classes
+- PR#4780: labltk build problem under Windows.
+- PR#4790: under Windows, map ERROR_NO_DATA Win32 error to EPIPE Unix error.
+- PR#4792: bug in Big_int.big_int_of_int64 on 32-bit platforms.
+- PR#4796: ocamlyacc: missing NUL termination of string
+- PR#4804: bug in Big_int.int64_of_big_int on 32-bit platforms.
+- PR#4805: improving compatibility with the clang C compiler
+- PR#4809: issue with Unix.create_process under Win32
+- PR#4814: ocamlbrowser: crash when editing comments
+- PR#4816: module abbreviations remove 'private' type restrictions
+- PR#4817: Object type gives error "Unbound type parameter .."
+- Module Parsing: improved computation of locations when an ocamlyacc rule
+ starts with an empty nonterminal
+- Type-checker: fixed wrong variance computation for private types
+- x86-32 code generator, MSVC port: wrong "fld" instruction generated.
+- ocamlbuild: incorrectly using the compile-time value of $OCAMLLIB
+- Makefile problem when configured with -no-shared-libs
+- ocamldoc: use dynamic loading in native code
+
+Other changes:
+- Improved wording of various error messages
+ (contributed by Jonathan Davies, Citrix).
+- Support for 64-bit mode in Solaris/x86 (PR#4670).
+
+
+Objective Caml 3.11.0:
+----------------------
+
+(Changes that can break existing programs are marked with a "*" )
+
+Language features:
+- Addition of lazy patterns: "lazy <pat>" matches suspensions whose values,
+ after forcing, match the pattern <pat>.
+- Introduction of private abbreviation types "type t = private <type-expr>",
+ for abstracting the actual manifest type in type abbreviations.
+- Subtyping is now allowed between a private abbreviation and its definition,
+ and between a polymorphic method and its monomorphic instance.
+
+Compilers:
+- The file name for a compilation unit should correspond to a valid
+ identifier (Otherwise dynamic linking and other things can fail, and
+ a warning is emitted.)
+* Revised -output-obj: the output name must now be provided; its
+ extension must be one of .o/.obj, .so/.dll, or .c for the
+ bytecode compiler. The compilers can now produce a shared library
+ (with all the needed -ccopts/-ccobjs options) directly.
+- -dtypes renamed to -annot, records (in .annot files) which function calls
+ are tail calls.
+- All compiler error messages now include a file name and location, for
+ better interaction with Emacs' compilation mode.
+- Optimized compilation of "lazy e" when the argument "e" is
+ already evaluated.
+- Optimized compilation of equality tests with a variant constant constructor.
+- The -dllib options recorded in libraries are no longer ignored when
+ -use_runtime or -use_prims is used (unless -no_auto_link is
+ explicitly used).
+- Check that at most one of -pack, -a, -shared, -c, -output-obj is
+ given on the command line.
+- Optimized compilation of private types as regular manifest types
+ (e.g. abbreviation to float, float array or record types with only
+ float fields).
+
+Native-code compiler:
+- New port: Mac OS X / Intel in 64-bit mode (configure with -cc "gcc -m64").
+- A new option "-shared" to produce a plugin that can be dynamically
+ loaded with the native version of Dynlink.
+- A new option "-nodynlink" to enable optimizations valid only for code
+ that is never dynlinked (no-op except for AMD64).
+- More aggressive unboxing of floats and boxed integers.
+- Can select which assembler and asm options to use at configuration time.
+
+Run-time system:
+- New implementation of the page table describing the heap (two-level
+ array in 32 bits, sparse hashtable in 64 bits), fixes issues with address
+ space randomization on 64-bit OS (PR#4448).
+- New "generational" API for registering global memory roots with the GC,
+ enables faster scanning of global roots.
+ (The functions are caml_*_generational_global_root in <caml/memory.h>.)
+- New function "caml_raise_with_args" to raise an exception with several
+ arguments from C.
+- Changes in implementation of dynamic linking of C code:
+ under Win32, use Alain Frisch's flexdll implementation of the dlopen
+ API; under MacOSX, use dlopen API instead of MacOSX bundle API.
+- Programs may now choose a first-fit allocation policy instead of
+ the default next-fit. First-fit reduces fragmentation but is
+ slightly slower in some cases.
+
+Standard library:
+- Parsing library: new function "set_trace" to programmatically turn
+ on or off the printing of a trace during parsing.
+- Printexc library: new functions "print_backtrace" and "get_backtrace"
+ to obtain a stack backtrace of the most recently raised exception.
+ New function "record_backtrace" to turn the exception backtrace mechanism
+ on or off from within a program.
+- Scanf library: fine-tuning of meta format implementation;
+ fscanf behaviour revisited: only one input buffer is allocated for any
+ given input channel;
+ the %n conversion does not count a lookahead character as read.
+
+Other libraries:
+- Dynlink: on some platforms, the Dynlink library is now available in
+ native code. The boolean Dynlink.is_native allows the program to
+ know whether it has been compiled in bytecode or in native code.
+- Bigarrays: added "unsafe_get" and "unsafe_set"
+ (non-bound-checking versions of "get" and "set").
+- Bigarrays: removed limitation "array dimension < 2^31".
+- Labltk: added support for TK 8.5.
+- Num: added conversions between big_int and int32, nativeint, int64.
+ More efficient implementation of Num.quo_num and Num.mod_num.
+- Threads: improved efficiency of mutex and condition variable operations;
+ improved interaction with Unix.fork (PR#4577).
+- Unix: added getsockopt_error returning type Unix.error.
+ Added support for TCP_NODELAY and IPV6_ONLY socket options.
+- Win32 Unix: "select" now supports all kinds of file descriptors.
+ Improved emulation of "lockf" (PR#4609).
+
+Tools:
+- ocamldebug now supported under Windows (MSVC and Mingw ports),
+ but without the replay feature. (Contributed by Dmitry Bely
+ and Sylvain Le Gall at OCamlCore with support from Lexifi.)
+- ocamldoc: new option -no-module-constraint-filter to include functions
+ hidden by signature constraint in documentation.
+- ocamlmklib and ocamldep.opt now available under Windows ports.
+- ocamlmklib no longer supports the -implib option.
+- ocamlnat: an experimental native toplevel (not built by default).
+
+Camlp4:
+* programs linked with camlp4lib.cma now also need dynlink.cma.
+
+Bug fixes:
+- Major GC and heap compaction: fixed bug involving lazy values and
+ out-of-heap pointers.
+- PR#3915: updated most man pages.
+- PR#4261: type-checking of recursive modules
+- PR#4308: better stack backtraces for "spontaneous" exceptions such as
+ Stack_overflow, Out_of_memory, etc.
+- PR#4338: Str.global_substitute, Str.global_replace and the Str.*split*
+ functions are now tail-recursive.
+- PR#4503: fixed bug in classify_float on ARM.
+- PR#4512: type-checking of recursive modules
+- PR#4517: crash in ocamllex-generated lexers.
+- PR#4542: problem with return value of Unix.nice.
+- PR#4557: type-checking of recursive modules.
+- PR#4562: strange %n semantics in scanf.
+- PR#4564: add note "stack is not executable" to object files generated by
+ ocamlopt (Linux/x86, Linux/AMD64).
+- PR#4566: bug in Ratio.approx_ratio_fix and Num.approx_num_fix.
+- PR#4582: clarified the documentation of functions in the String module.
+- PR#4583: stack overflow in "ocamlopt -g" during closure conversion pass.
+- PR#4585: ocamldoc and "val virtual" declarations.
+- PR#4587: ocamldoc and escaped @ characters.
+- PR#4605: Buffer.add_substitute was sometime wrong when target string had
+ backslashes.
+- PR#4614: Inconsistent declaration of CamlCBCmd in LablTk library.
+
+
+Objective Caml 3.10.2:
+----------------------
+
+Bug fixes:
+- PR#1217 (partial) Typo in ocamldep man page
+- PR#3952 (partial) ocamlopt: allocation problems on ARM
+- PR#4339 (continued) ocamlopt: problems on HPPA
+- PR#4455 str.mli not installed under Windows
+- PR#4473 crash when accessing float array with polymorphic method
+- PR#4480 runtime would not compile without gcc extensions
+- PR#4481 wrong typing of exceptions with object arguments
+- PR#4490 typo in error message
+- Random crash on 32-bit when major_heap_increment >= 2^22
+- Big performance bug in Weak hashtables
+- Small bugs in the make-package-macosx script
+- Bug in typing of polymorphic variants (reported on caml-list)
+
+
+Objective Caml 3.10.1:
+----------------------
+
+Bug fixes:
+- PR#3830 small bugs in docs
+- PR#4053 compilers: improved compilation time for large variant types
+- PR#4174 ocamlopt: fixed ocamlopt -nopervasives
+- PR#4199 otherlibs: documented a small problem in Unix.utimes
+- PR#4280 camlp4: parsing of identifier (^)
+- PR#4281 camlp4: parsing of type constraint
+- PR#4285 runtime: cannot compile under AIX
+- PR#4286 ocamlbuild: cannot compile under AIX and SunOS
+- PR#4288 compilers: including a functor application with side effects
+- PR#4295 camlp4 toplevel: synchronization after an error
+- PR#4300 ocamlopt: crash with backtrace and illegal array access
+- PR#4302 camlp4: list comprehension parsing problem
+- PR#4304 ocamlbuild: handle -I correctly
+- PR#4305 stdlib: alignment of Arg.Symbol
+- PR#4307 camlp4: assertion failure
+- PR#4312 camlp4: accept "let _ : int = 1"
+- PR#4313 ocamlbuild: -log and missing directories
+- PR#4315 camlp4: constraints in classes
+- PR#4316 compilers: crash with recursive modules and Lazy
+- PR#4318 ocamldoc: installation problem with Cygwin (tentative fix)
+- PR#4322 ocamlopt: stack overflow under Windows
+- PR#4325 compilers: wrong error message for unused var
+- PR#4326 otherlibs: marshal Big_int on win64
+- PR#4327 ocamlbuild: make emacs look for .annot in _build directory
+- PR#4328 camlp4: stack overflow with nil nodes
+- PR#4331 camlp4: guards on fun expressions
+- PR#4332 camlp4: parsing of negative 32/64 bit numbers
+- PR#4336 compilers: unsafe recursive modules
+- PR#4337 (note) camlp4: invalid character escapes
+- PR#4339 ocamlopt: problems on HP-UX (tentative fix)
+- PR#4340 camlp4: wrong pretty-printing of optional arguments
+- PR#4348 ocamlopt: crash on Mac Intel
+- PR#4349 camlp4: bug in private type definitions
+- PR#4350 compilers: type errors with records and polymorphic variants
+- PR#4352 compilers: terminal recursion under Windows (tentative fix)
+- PR#4354 ocamlcp: mismatch with ocaml on polymorphic let
+- PR#4358 ocamlopt: float constants wrong on ARM
+- PR#4360 ocamldoc: string inside comment
+- PR#4365 toplevel: wrong pretty-printing of polymorphic variants
+- PR#4373 otherlibs: leaks in win32unix
+- PR#4374 otherlibs: threads module not initialized
+- PR#4375 configure: fails to build on bytecode-only architectures
+- PR#4377 runtime: finalisation of infix pointers
+- PR#4378 ocamlbuild: typo in plugin.ml
+- PR#4379 ocamlbuild: problem with plugins under Windows
+- PR#4382 compilers: typing of polymorphic record fields
+- PR#4383 compilers: including module with private type
+- PR#4385 stdlib: Int32/Int64.format are unsafe
+- PR#4386 otherlibs: wrong signal numbers with Unix.sigprocmask etc.
+- PR#4387 ocamlbuild: build directory not used properly
+- PR#4392 ocamldep: optional argument of class
+- PR#4394 otherlibs: infinite loops in Str
+- PR#4397 otherlibs: wrong size for flag arrays in win32unix
+- PR#4402 ocamldebug: doesn't work with -rectypes
+- PR#4410 ocamlbuild: problem with plugin and -build
+- PR#4411 otherlibs: crash with Unix.access under Windows
+- PR#4412 stdlib: marshalling broken on 64 bit architectures
+- PR#4413 ocamlopt: crash on AMD64 with out-of-bound access and reraise
+- PR#4417 camlp4: pretty-printing of unary minus
+- PR#4419 camlp4: problem with constraint in type class
+- PR#4426 compilers: problem with optional labels
+- PR#4427 camlp4: wrong pretty-printing of lists of functions
+- PR#4433 ocamlopt: fails to build on MacOSX 10.5
+- PR#4435 compilers: crash with objects
+- PR#4439 fails to build on MacOSX 10.5
+- PR#4441 crash when build on sparc64 linux
+- PR#4442 stdlib: crash with weak pointers
+- PR#4446 configure: fails to detect X11 on MacOSX 10.5
+- PR#4448 runtime: huge page table on 64-bit architectures
+- PR#4450 compilers: stack overflow with recursive modules
+- PR#4470 compilers: type-checking of recursive modules too restrictive
+- PR#4472 configure: autodetection of libX11.so on Fedora x86_64
+- printf: removed (partially implemented) positional specifications
+- polymorphic < and <= comparisons: some C compiler optimizations
+ were causing incorrect results when arguments are incomparable
+
+New features:
+- made configure script work on PlayStation 3
+- ARM port: brought up-to-date for Debian 4.0 (Etch)
+- many other small changes and bugfixes in camlp4, ocamlbuild, labltk,
+ emacs files
+
+
+Objective Caml 3.10.0:
+----------------------
+
+(Changes that can break existing programs are marked with a "*" )
+
+Language features:
+- Added virtual instance variables in classes "val virtual v : t"
+* Changed the behaviour of instance variable overriding; the new
+ definition replaces the old one, rather than creating a new
+ variable.
+
+New tools:
+- ocamlbuild: compilation manager for OCaml applications and libraries.
+ See draft documentation at http://gallium.inria.fr/~pouillar/
+* Camlp4: heavily revised implementation, new API.
+
+New ports:
+- MacOS X PowerPC 64 bits.
+- MS Windows 64 bits (x64) using the Microsoft PSDK toolchain.
+- MS Windows 32 bits using the Visual Studio 2005 toolchain.
+
+Compilers:
+- Faster type-checking of functor applications.
+- Referencing an interface compiled with -rectypes from a module
+ not compiled with -rectypes is now an error.
+- Revised the "fragile matching" warning.
+
+Native-code compiler:
+- Print a stack backtrace on an uncaught exception.
+ (Compile and link with ocamlopt -g; execute with OCAMLRUNPARAM=b.)
+ Supported on Intel/AMD in 32 and 64 bits, PPC in 32 and 64 bits.
+- Stack overflow detection on MS Windows 32 bits (courtesy O. Andrieu).
+- Stack overflow detection on MacOS X PPC and Intel.
+- Intel/AMD 64 bits: generate position-independent code by default.
+- Fixed bug involving -for-pack and missing .cmx files (PR#4124).
+- Fixed bug causing duplication of literals (PR#4152).
+
+Run-time system:
+- C/Caml interface functions take "char const *" arguments
+ instead of "char *" when appropriate.
+- Faster string comparisons (fast case if strings are ==).
+
+Standard library:
+- Refined typing of format strings (type format6).
+- Printf, Format: new function ifprintf that consumes its arguments
+ and prints nothing (useful to print conditionally).
+- Scanf:
+ new function format_from_string to convert a string to a format string;
+ new %r conversion to accomodate user defined scanners.
+- Filename: improved Win32 implementation of Filename.quote.
+- List: List.nth now tail-recursive.
+- Sys: added Sys.is_directory. Some functions (e.g. Sys.command) that
+ could incorrectly raise Sys_io_blocked now raise Sys_error as intended.
+- String and Char: the function ``escaped'' now escapes all the characters
+ especially handled by the compiler's lexer (PR#4220).
+
+Other libraries:
+- Bigarray: mmap_file takes an optional argument specifying
+ the start position of the data in the mapped file.
+- Dynlink: now defines only two modules, Dynlink and Dynlinkaux (internal),
+ reducing risks of name conflicts with user modules.
+- Labltk under Win32: now uses Tcl/Tk 8.4 instead of 8.3 by default.
+- VM threads: improved performance of I/O operations (less polling).
+- Unix: new function Unix.isatty.
+- Unix emulation under Win32:
+ fixed incorrect error reporting in several functions (PR#4097);
+ better handling of channels opened on sockets (PR#4098);
+ fixed GC bug in Unix.system (PR#4112).
+
+Documentation generator (OCamldoc):
+- correctly handle '?' in value names (PR#4215)
+- new option -hide-warnings not to print ocamldoc warnings
+
+Lexer generator (ocamllex): improved error reporting.
+
+License: fixed a typo in the "special exception" to the LGPL.
+
+
+Objective Caml 3.09.3:
+----------------------
+
+Bug fixes:
+- ocamldoc: -using modtype constraint to filter module elements displayed
+ in doc PR#4016
+- ocamldoc: error in merging of top dependencies of modules PR#4007
+- ocamldoc: -dot-colors has no effect PR#3981
+- ocamdloc: missing crossref in text from intro files PR#4066
+- compilers: segfault with recursive modules PR#4008
+- compilers: infinite loop when compiling objects PR#4018
+- compilers: bad error message when signature mismatch PR#4001
+- compilers: infinite loop with -rectypes PR#3999
+- compilers: contravariance bug in private rows
+- compilers: unsafe cast with polymorphic exception PR#4002
+- native compiler: bad assembly code generated for AMD64 PR#4067
+- native compiler: stack alignment problems on MacOSX/i386 PR#4036
+- stdlib: crash in marshalling PR#4030
+- stdlib: crash when closing a channel twice PR#4039
+- stdlib: memory leak in Sys.readdir PR#4093
+- C interface: better definition of CAMLreturn PR#4068
+- otherlibs/unix: crash in gethostbyname PR#3043
+- tools: subtle problem with unset in makefile PR#4048
+- camlp4: install pa_o_fast.o PR#3812
+- camlp4: install more modules PR#3689
+
+New features:
+- ocamldoc: name resolution in cross-referencing {!name}: if name is not
+ found, then it is searched in the parent module/class, and in the parent
+ of the parent, and so on until it is found.
+- ocamldoc: new option -short-functors to use a short form to display
+ functors in html generator PR#4017
+- ocamlprof: added "-version" option
+
+
+
+Objective Caml 3.09.2:
+----------------------
+
+Bug fixes:
+- Makefile: problem with "make world.opt" PR#3954
+- compilers: problem compiling several modules with one command line PR#3979
+- compilers,ocamldoc: error message that Emacs cannot parse
+- compilers: crash when printing type error PR#3968
+- compilers: -dtypes wrong for monomorphic type variables PR#3894
+- compilers: wrong warning on optional arguments PR#3980
+- compilers: crash when wrong use of type constructor in let rec PR#3976
+- compilers: better wording of "statement never returns" warning PR#3889
+- runtime: inefficiency of signal handling PR#3990
+- runtime: crashes with I/O in multithread programs PR#3906
+- camlp4: empty file name in error messages PR#3886
+- camlp4: stack overflow PR#3948
+- otherlibs/labltk: ocamlbrowser ignores its command line options PR#3961
+- otherlibs/unix: Unix.times wrong under Mac OS X PR#3960
+- otherlibs/unix: wrong doc for execvp and execvpe PR#3973
+- otherlibs/win32unix: random crash in Unix.stat PR#3998
+- stdlib: update_mod not found under Windows PR#3847
+- stdlib: Filename.dirname/basename wrong on Win32 PR#3933
+- stdlib: incomplete documentation of Pervasives.abs PR#3967
+- stdlib: Printf bugs PR#3902, PR#3955
+- tools/checkstack.c: missing include
+- yacc: crash when given argument "-" PR#3956
+
+New features:
+- ported to MacOS X on Intel PR#3985
+- configure: added support for GNU Hurd PR#3991
+
+Objective Caml 3.09.1:
+----------------------
+
+Bug fixes:
+- compilers: raise not_found with -principal PR#3855
+- compilers: assert failure in typeclass.cml PR#3856
+- compilers: assert failure in typing/ctype.ml PR#3909
+- compilers: fatal error exception Ctype.Unify PR#3918
+- compilers: spurious warning Y in objects PR#3868
+- compilers: spurious warning Z on loop index PR#3907
+- compilers: error message that emacs cannot parse
+- ocamlopt: problems with -for-pack/-pack PR#3825, PR#3826, PR#3919
+- ocamlopt: can't produce shared libraries on x86_64 PR#3869, PR#3924
+- ocamlopt: float alignment problem on SPARC PR#3944
+- ocamlopt: can't compile on MIPS PR#3936
+- runtime: missing dependence for ld.conf
+- runtime: missing dependence for .depend.nt PR#3880
+- runtime: memory leak in caml_register_named_value PR#3940
+- runtime: crash in Marshal.to_buffer PR#3879
+- stdlib: Sys.time giving wrong results on Mac OS X PR#3850
+- stdlib: Weak.get_copy causing random crashes in rare cases
+- stdlib, debugger, labltk: use TMPDIR if set PR#3895
+- stdlib: scanf bug on int32 and nativeint PR#3932
+- camlp4: mkcamlp4 option parsing problem PR#3941
+- camlp4: bug in pretty-printing of lazy/assert/new
+- camlp4: update the unmaintained makefile for _loc name
+- ocamldoc: several fixes see ocamldoc/Changes.txt
+- otherlibs/str: bug in long sequences of alternatives PR#3783
+- otherlibs/systhreads: deadlock in Windows PR#3910
+- tools: update dumpobj to handle new event format PR#3873
+- toplevel: activate warning Y in toplevel PR#3832
+
+New features:
+- otherlibs/labltk: browser uses menu bars instead of menu buttons
+
+Objective Caml 3.09.0:
+----------------------
+
+(Changes that can break existing programs are marked with a "*" )
+
+Language features:
+- Introduction of private row types, for abstracting the row in object
+ and variant types.
+
+Type checking:
+- Polymorphic variants with at most one constructor [< `A of t] are no
+ longer systematically promoted to the exact type [`A of t]. This was
+ more confusing than useful, and created problems with private row
+ types.
+
+Both compilers:
+- Added warnings 'Y' and 'Z' for local variables that are bound but
+ never used.
+- Added warning for some uses non-returning functions (e.g. raise), when they
+ are passed extra arguments, or followed by extra statements.
+- Pattern matching: more prudent compilation in case of guards; fixed PR#3780.
+- Compilation of classes: reduction in size of generated code.
+- Compilation of "module rec" definitions: fixed a bad interaction with
+ structure coercion (to a more restrictive signature).
+
+Native-code compiler (ocamlopt):
+* Revised implementation of the -pack option (packing of several compilation
+ units into one). The .cmx files that are to be packed with
+ "ocamlopt -pack -o P.cmx" must be compiled with "ocamlopt -for-pack P".
+ In exchange for this additional constraint, ocamlopt -pack is now
+ available on all platforms (no need for binutils).
+* Fixed wrong evaluation order for arguments to certain inlined functions.
+- Modified code generation for "let rec ... and ..." to reduce compilation
+ time (which was quadratic in the number of mutually-recursive functions).
+- x86 port: support tail-calls for functions with up to 21 arguments.
+- AMD64 port, Linux: recover from system stack overflow.
+- Sparc port: more portable handling of out-of-bound conditions
+ on systems other than Solaris.
+
+Standard library:
+- Pervasives: faster implementation of close_in, close_out.
+ set_binary_mode_{out,in} now working correctly under Cygwin.
+- Printf: better handling of partial applications of the printf functions.
+- Scanf: new function sscanf_format to read a format from a
+ string. The type of the resulting format is dynamically checked and
+ should be the type of the template format which is the second argument.
+- Scanf: no more spurious lookahead attempt when the end of file condition
+ is set and a correct token has already been read and could be returned.
+
+Other libraries:
+- System threads library: added Thread.sigmask; fixed race condition
+ in signal handling.
+- Bigarray library: fixed bug in Array3.of_array.
+- Unix library: use canonical signal numbers in results of Unix.wait*;
+ hardened Unix.establish_server against EINTR errors.
+
+Run-time system:
+- Support platforms where sizeof(void *) = 8 and sizeof(long) = 4.
+- Improved and cleaned up implementation of signal handling.
+
+Replay debugger:
+- Improved handling of locations in source code.
+
+OCamldoc:
+- extensible {foo } syntax
+- user can give .txt files on the command line, containing ocamldoc formatted
+ text, to be able to include bigger texts out of source files
+- -o option is now used by the html generator to indicate the prefix
+ of generated index files (to avoid conflict when a Index module exists
+ on case-insensitive file systems).
+
+Miscellaneous:
+- Configuration information is installed in `ocamlc -where`/Makefile.config
+ and can be used by client Makefiles or shell scripts.
+
+Objective Caml 3.08.4:
+----------------------
+
+New features:
+- configure: find X11 config in some 64-bit Linux distribs
+- ocamldoc: (**/**) can be canceled with another (**/**) PR#3665
+- graphics: added resize_window
+- graphics: check for invalid arguments to drawing primitives PR#3595
+- ocamlbrowser: use windows subsystem on mingw
+
+Bug fixes:
+- ocamlopt: code generation problem on AMD64 PR#3640
+- wrong code generated for some classes PR#3576
+- fatal error when compiling some OO code PR#3745
+- problem with comparison on constant constructors PR#3608
+- camlp4: cryptic error message PR#3592
+- camlp4: line numbers in multi-line antiquotations PR#3549
+- camlp4: problem with make depend
+- camlp4: parse error with :> PR#3561
+- camlp4: ident conversion problem with val/contents/contents__
+- camlp4: several small parsing problems PR#3688
+- ocamldebug: handling of spaces in executable file name PR#3736
+- emacs-mode: problem when caml-types-buffer is deleted by user PR#3704
+- ocamldoc: extra backslash in ocamldoc man page PR#3687
+- ocamldoc: improvements to HTML display PR#3698
+- ocamldoc: escaping of @ in info files
+- ocamldoc: escaping of . and \ in man pages PR#3686
+- ocamldoc: better error reporting of misplaced comments
+- graphics: fixed .depend file PR#3558
+- graphics: segfault with threads and graphics PR#3651
+- nums: several bugs: PR#3718, PR#3719, others
+- nums: inline asm problems with gcc 4.0 PR#3604, PR#3637
+- threads: problem with backtrace
+- unix: problem with getaddrinfo PR#3565
+- stdlib: documentation of Int32.rem and Int64.rem PR#3573
+- stdlib: documentation of List.rev_map2 PR#3685
+- stdlib: wrong order in Map.fold PR#3607
+- stdlib: documentation of maximum float array length PR#3714
+- better detection of cycles when using -rectypes
+- missing case of module equality PR#3738
+- better error messages for unbound type variables
+- stack overflow while printing type error message PR#3705
+- assert failure when typing some classes PR#3638
+- bug in type_approx
+- better error messages related to type variance checking
+- yacc: avoid name capture for idents of the Parsing module
+
+
+Objective Caml 3.08.3:
+----------------------
+
+New features:
+- support for ocamlopt -pack under Mac OS X (PR#2634, PR#3320)
+- ignore unknown warning options for forward and backward compatibility
+- runtime: export caml_compare_unordered (PR#3479)
+- camlp4: install argl.* files (PR#3439)
+- ocamldoc: add -man-section option
+- labltk: add the "solid" relief option (PR#3343)
+
+Bug fixes:
+- typing: fix unsoundness in type declaration variance inference.
+ Type parameters which are constrained must now have an explicit variant
+ annotation, otherwise they are invariant. This is not backward
+ compatible, so this might break code which either uses subtyping or
+ uses the relaxed value restriction (i.e. was not typable before 3.07)
+- typing: erroneous partial match warning for polymorphic variants (PR#3424)
+- runtime: handle the case of an empty command line (PR#3409, PR#3444)
+- stdlib: make Sys.executable_name an absolute path in native code (PR#3303)
+- runtime: fix memory leak in finalise.c
+- runtime: auto-trigger compaction even if gc is called manually (PR#3392)
+- stdlib: fix segfault in Obj.dup on zero-sized values (PR#3406)
+- camlp4: correct parsing of the $ identifier (PR#3310, PR#3469)
+- windows (MS tools): use link /lib instead of lib (PR#3333)
+- windows (MS tools): change default install destination
+- autoconf: better checking of SSE2 instructions (PR#3329, PR#3330)
+- graphics: make close_graph close the X display as well as the window (PR#3312)
+- num: fix big_int_of_string (empty string) (PR#3483)
+- num: fix big bug on 64-bit architecture (PR#3299)
+- str: better documentation of string_match and string_partial_match (PR#3395)
+- unix: fix file descriptor leak in Unix.accept (PR#3423)
+- unix: miscellaneous clean-ups
+- unix: fix documentation of Unix.tm (PR#3341)
+- graphics: fix problem when allocating lots of images under Windows (PR#3433)
+- compiler: fix error message with -pack when .cmi is missing (PR#3028)
+- cygwin: fix problem with compilation of camlheader (PR#3485)
+- stdlib: Filename.basename doesn't return an empty string any more (PR#3451)
+- stdlib: better documentation of Open_excl flag (PR#3450)
+- ocamlcp: accept -thread option (PR#3511)
+- ocamldep: handle spaces in file names (PR#3370)
+- compiler: remove spurious warning in pattern-matching on variants (PR#3424)
+- windows: better handling of InterpreterPath registry entry (PR#3334, PR#3432)
+
+
+Objective Caml 3.08.2:
+----------------------
+
+Bug fixes:
+- runtime: memory leak when unmarshalling big data structures (PR#3247)
+- camlp4: incorrect line numbers in errors (PR#3188)
+- emacs: xemacs-specific code, wrong call to "sit-for"
+- ocamldoc: "Lexing: empty token" (PR#3173)
+- unix: problem with close_process_* (PR#3191)
+- unix: possible coredumps (PR#3252)
+- stdlib: wrong order in Set.fold (PR#3161)
+- ocamlcp: array out of bounds in profiled programs (PR#3267)
+- yacc: problem with polymorphic variant types for grammar entries (PR#3033)
+
+Misc:
+- export <caml/printexc.h> for caml_format_exception (PR#3080)
+- clean up caml_search_exe_in_path (maybe PR#3079)
+- camlp4: new function "make_lexer" for new-style locations
+- unix: added missing #includes (PR#3088)
+
+
+Objective Caml 3.08.1:
+----------------------
+
+Licence:
+- The emacs files are now under GPL
+- Slightly relaxed some conditions of the QPL
+
+Bug fixes:
+- ld.conf now generated at compile-time instead of install-time
+- fixed -pack on Windows XP (PR#2935)
+- fixed Obj.tag (PR#2946)
+- added support for multiple dlopen in Darwin
+- run ranlib when installing camlp4 libraries (PR#2944)
+- link camlp4opt with -linkall (PR#2949)
+- camlp4 parsing of patterns now conforms to normal parsing (PR#3015)
+- install camlp4 *.cmx files (PR#2955)
+- fixed handling of linefeed in string constants in camlp4 (PR#3074)
+- ocamldoc: fixed display of class parameters in HTML and LaTeX (PR#2994)
+- ocamldoc: fixed display of link to class page in html (PR#2994)
+- Windows toplevel GUI: assorted fixes (including PR#2932)
+
+Misc:
+- added -v option to ocamllex
+- ocamldoc: new -intf and -impl options supported (PR#3036)
+
+Objective Caml 3.08.0:
+----------------------
+
+(Changes that can break existing programs are marked with a "*" )
+
+Language features:
+- Support for immediate objects, i.e. objects defined without going
+ through a class. (Syntax is "object <fields and methods> end".)
+
+Type-checking:
+- When typing record construction and record patterns, can omit
+ the module qualification on all labels except one. I.e.
+ { M.l1 = ...; l2 = ... } is interpreted as { M.l1 = ...; M.l2 = ... }
+
+Both compilers:
+- More compact compilation of classes.
+- Much more efficient handling of class definitions inside functors
+ or local modules.
+- Simpler representation for method tables. Objects can now be marshaled
+ between identical programs with the flag Marshal.Closures.
+- Improved error messages for objects and variants.
+- Improved printing of inferred module signatures (toplevel and ocamlc -i).
+ Recursion between type, class, class type and module definitions is now
+ correctly printed.
+- The -pack option now accepts compiled interfaces (.cmi files) in addition
+ to compiled implementations (.cmo or .cmx).
+* A compile-time error is signaled if an integer literal exceeds the
+ range of representable integers.
+- Fixed code generation error for "module rec" definitions.
+- The combination of options -c -o sets the name of the generated
+ .cmi / .cmo / .cmx files.
+
+Bytecode compiler:
+- Option -output-obj is now compatible with Dynlink and
+ with embedded toplevels.
+
+Native-code compiler:
+- Division and modulus by zero correctly raise exception Division_by_zero
+ (instead of causing a hardware trap).
+- Improved compilation time for the register allocation phase.
+- The float constant -0.0 was incorrectly treated as +0.0 on some processors.
+- AMD64: fixed bugs in asm glue code for GC invocation and exception raising
+ from C.
+- IA64: fixed incorrect code generated for "expr mod 1".
+- PowerPC: minor performance tweaks for the G4 and G5 processors.
+
+Standard library:
+* Revised handling of NaN floats in polymorphic comparisons.
+ The polymorphic boolean-valued comparisons (=, <, >, etc) now treat
+ NaN as uncomparable, as specified by the IEEE standard.
+ The 3-valued comparison (compare) treats NaN as equal to itself
+ and smaller than all other floats. As a consequence, x == y
+ no longer implies x = y but still implies compare x y = 0.
+* String-to-integer conversions now fail if the result overflows
+ the range of integers representable in the result type.
+* All array and string access functions now raise
+ Invalid_argument("index out of bounds") when a bounds check fails.
+ In earlier releases, different exceptions were raised
+ in bytecode and native-code.
+- Module Buffer: new functions Buffer.sub, Buffer.nth
+- Module Int32: new functions Int32.bits_of_float, Int32.float_of_bits.
+- Module Map: new functions is_empty, compare, equal.
+- Module Set: new function split.
+* Module Gc: in-order finalisation, new function finalise_release.
+
+Other libraries:
+- The Num library: complete reimplementation of the C/asm lowest
+ layer to work around potential licensing problems.
+ Improved speed on the PowerPC and AMD64 architectures.
+- The Graphics library: improved event handling under MS Windows.
+- The Str library: fixed bug in "split" functions with nullable regexps.
+- The Unix library:
+ . Added Unix.single_write.
+ . Added support for IPv6.
+ . Bug fixes in Unix.closedir.
+ . Allow thread switching on Unix.lockf.
+
+Runtime System:
+* Name space depollution: all global C identifiers are now prefixed
+ with "caml" to avoid name clashes with other libraries. This
+ includes the "external" primitives of the standard runtime.
+
+Ports:
+- Windows ports: many improvements in the OCamlWin toplevel application
+ (history, save inputs to file, etc). Contributed by Christopher A. Watford.
+- Native-code compilation supported for HPPA/Linux. Contributed by Guy Martin.
+- Removed support for MacOS9. Mac OS 9 is obsolete and the port was not
+ updated since 3.05.
+- Removed ocamlopt support for HPPA/Nextstep and Power/AIX.
+
+Ocamllex:
+- #line directives in the input file are now accepted.
+- Added character set concatenation operator "cset1 # cset2".
+
+Ocamlyacc:
+- #line directives in the input file are now accepted.
+
+Camlp4:
+* Support for new-style locations (line numbers, not just character numbers).
+- See camlp4/CHANGES and camlp4/ICHANGES for more info.
+
+
+Objective Caml 3.07:
+--------------------
+
+Language features:
+- Experimental support for recursive module definitions
+ module rec A : SIGA = StructA and B : SIGB = StructB and ...
+- Support for "private types", or more exactly concrete data types
+ with private constructors or labels. These data types can be
+ de-structured normally in pattern matchings, but values of these
+ types cannot be constructed directly outside of their defining module.
+- Added integer literals of types int32, nativeint, int64
+ (written with an 'l', 'n' or 'L' suffix respectively).
+
+Type-checking:
+- Allow polymorphic generalization of covariant parts of expansive
+ expressions. For instance, if f: unit -> 'a list, "let x = f ()"
+ gives "x" the generalized type forall 'a. 'a list, instead of '_a list
+ as before.
+- The typing of polymorphic variants in pattern matching has changed.
+ It is intended to be more regular, sticking to the principle of "closing
+ only the variants which would be otherwise incomplete". Two potential
+ consequences: (1) some types may be left open which were closed before,
+ and the resulting type might not match the interface anymore (expected to
+ be rare); (2) in some cases an incomplete match may be generated.
+- Lots of bug fixes in the handling of polymorphism and recursion inside
+ types.
+- Added a new "-dtypes" option to ocamlc/ocamlopt, and an emacs extension
+ "emacs/caml-types.el". The compiler option saves inferred type information
+ to file *.annot, and the emacs extension allows the user to look at the
+ type of any subexpression in the source file. Works even in the case
+ of a type error (all the types computed up to the error are available).
+ This new feature is also supported by ocamlbrowser.
+- Disable "method is overridden" warning when the method was explicitly
+ redefined as virtual beforehand (i.e. not through inheritance). Typing
+ and semantics are unchanged.
+
+Both compilers:
+- Added option "-dtypes" to dump detailed type information to a file.
+- The "-i" option no longer generates compiled files, it only prints
+ the inferred types.
+- The sources for the module named "Mod" can be placed either in Mod.ml or
+ in mod.ml.
+- Compilation of "let rec" on non-functional values: tightened some checks,
+ relaxed some other checks.
+- Fixed wrong code that was generated for "for i = a to max_int"
+ or "for i = a downto min_int".
+- An explicit interface Mod.mli can now be provided for the module obtained
+ by ocamlc -pack -o Mod.cmo ... or ocamlopt -pack -o Mod.cmx ...
+- Revised internal handling of source code locations, now handles
+ preprocessed code better.
+- Pattern-matching bug on float literals fixed.
+- Minor improvements on pattern-matching over variants.
+- More efficient compilation of string comparisons and the "compare" function.
+- More compact code generated for arrays of constants.
+- Fixed GC bug with mutable record fields of type "exn".
+- Added warning "E" for "fragile patterns": pattern matchings that would
+ not be flagged as partial if new constructors were added to the data type.
+
+Bytecode compiler:
+- Added option -vmthread to select the threads library with VM-level
+ scheduling. The -thread option now selects the system threads library.
+
+Native-code compiler:
+- New port: AMD64 (Opteron).
+- Fixed instruction selection bug on expressions of the kind (raise Exn)(arg).
+- Several bug fixes in ocamlopt -pack (tracking of imported modules,
+ command line too long).
+- Signal handling bug fixed.
+- x86 port:
+ Added -ffast-math option to use inline trigo and log functions.
+ Small performance tweaks for the Pentium 4.
+ Fixed illegal "imul" instruction generated by reloading phase.
+- Sparc port:
+ Enhanced code generation for Sparc V8 (option -march=v8) and
+ Sparc V9 (option -march=v9).
+ Profiling support added for Solaris.
+- PowerPC port:
+ Keep stack 16-aligned for compatibility with C calling conventions.
+
+Toplevel interactive system:
+- Tightened interface consistency checks between .cmi files, .cm[oa] files
+ loaded by #load, and the running toplevel.
+- #trace on mutually-recursive functions was broken, works again.
+- Look for .ocamlinit file in home directory in addition to the current dir.
+
+Standard library:
+- Match_failure and Assert_failure exceptions now report
+ (file, line, column), instead of (file, starting char, ending char).
+- float_of_string, int_of_string: some ill-formed input strings were not
+ rejected.
+- Added format concatenation, string_of_format, format_of_string.
+- Module Arg: added new option handlers Set_string, Set_int, Set_float,
+ Symbol, Tuple.
+- Module Format: tag handling is now turned off by default,
+ use [Format.set_tags true] to activate.
+- Modules Lexing and Parsing: added better handling of positions
+ in source file. Added function Lexing.flush_input.
+- Module Scanf: %n and %N formats to count characters / items read so far;
+ assorted bug fixes, %! to match end of input. New ``_'' special
+ flag to skip reresulting value.
+- Module Format: tags are not activated by default.
+- Modules Set and Map: fixed bugs causing trees to become unbalanced.
+- Module Printf: less restrictive typing of kprintf.
+- Module Random: better seeding; functions to generate random int32, int64,
+ nativeint; added support for explicit state management.
+- Module Sys: added Sys.readdir for reading the contents of a directory.
+
+Runtime system:
+- output_value/input_value: fixed bug with large blocks (>= 4 Mwords)
+ produced on a 64-bit platform and incorrectly read back on a 32-bit
+ platform.
+- Fixed memory compaction bug involving input_value.
+- Added MacOS X support for dynamic linking of C libraries.
+- Improved stack backtraces on uncaught exceptions.
+- Fixed float alignment problem on Sparc V9 with gcc 3.2.
+
+Other libraries:
+- Dynlink:
+ By default, dynamically-loaded code now has access to all
+ modules defined by the program; new functions Dynlink.allow_only
+ and Dynlink.prohibit implement access control.
+ Fixed Dynlink problem with files generated with ocamlc -pack.
+ Protect against references to modules not yet fully initialized.
+- LablTK/CamlTK: added support for TCL/TK 8.4.
+- Str: reimplemented regexp matching engine, now less buggy, faster,
+ and LGPL instead of GPL.
+- Graphics: fixed draw_rect and fill_rect bug under X11.
+- System threads and bytecode threads libraries can be both installed.
+- System threads: better implementation of Thread.exit.
+- Bytecode threads: fixed two library initialization bugs.
+- Unix: make Unix.openfile blocking to account for named pipes;
+ GC bug in Unix.*stat fixed; fixed problem with Unix.dup2 on Windows.
+
+Ocamllex:
+- Can name parts of the matched input text, e.g.
+ "0" (['0'-'7']+ as s) { ... s ... }
+
+Ocamldebug:
+- Handle programs that run for more than 2^30 steps.
+
+Emacs mode:
+- Added file caml-types.el to interactively display the type information
+ saved by option -dtypes.
+
+Win32 ports:
+- Cygwin port: recognize \ as directory separator in addition to /
+- MSVC port: ocamlopt -pack works provided GNU binutils are installed.
+- Graphics library: fixed bug in Graphics.blit_image; improved event handling.
+
+OCamldoc:
+- new ty_code field for types, to keep code of a type (with option -keep-code)
+- new ex_code field for types, to keep code of an exception
+ (with option -keep-code)
+- some fixes in html generation
+- don't overwrite existing style.css file when generating HTML
+- create the ocamldoc.sty file when generating LaTeX (if nonexistent)
+- man pages are now installed in man/man3 rather than man/mano
+- fix: empty [] in generated HTML indexes
+
+
+Objective Caml 3.06:
+--------------------
+
+Type-checking:
+- Apply value restriction to polymorphic record fields.
+
+Run-time system:
+- Fixed GC bug affecting lazy values.
+
+Both compilers:
+- Added option "-version" to print just the version number.
+- Fixed wrong dependencies in .cmi generated with the -pack option.
+
+Native-code compiler:
+- Fixed wrong return value for inline bigarray assignments.
+
+Libraries:
+- Unix.getsockopt: make sure result is a valid boolean.
+
+Tools:
+- ocamlbrowser: improved error reporting; small Win32 fixes.
+
+Windows ports:
+- Fixed two problems with the Mingw port under Cygwin 1.3.
+
+
+Objective Caml 3.05:
+--------------------
+
+Language features:
+- Support for polymorphic methods and record fields.
+- Allows _ separators in integer and float literals, e.g. 1_000_000.
+
+Type-checker:
+- New flag -principal to enforce principality of type inference.
+- Fixed subtle typing bug with higher-order functors.
+- Fixed several complexity problems; changed (again) the behaviour of
+ simple coercions.
+- Fixed various bugs with objects and polymorphic variants.
+- Improved some error messages.
+
+Both compilers:
+- Added option "-pack" to assemble several compilation units as one unit
+ having the given units as sub-modules.
+- More precise detection of unused sub-patterns in "or" patterns.
+- Warnings for ill-formed \ escapes in string and character literals.
+- Protect against spaces and other special characters in directory names.
+- Added interface consistency check when building a .cma or .cmxa library.
+- Minor reduction in code size for class initialization code.
+- Added option "-nostdlib" to ignore standard library entirely.
+
+Bytecode compiler:
+- Fixed issue with ocamlc.opt and dynamic linking.
+
+Native-code compiler:
+- Added link-time check for multiply-defined module names.
+- Fixed GC bug related to constant constructors of polymorphic variant types.
+- Fixed compilation bug for top-level "include" statements.
+- PowerPC port: work around limited range for relative branches,
+ thus removing assembler failures on large functions.
+- IA64 port: fixed code generation bug for 3-way constructor matching.
+
+Toplevel interactive system:
+- Can load object files given on command line before starting up.
+- ocamlmktop: minimized possibility of name clashes with user-provided modules.
+
+Run-time system:
+- Minor garbage collector no longer recursive.
+- Better support for lazy data in the garbage collector.
+- Fixed issues with the heap compactor.
+- Fixed issues with finalized Caml values.
+- The type "int64" is now supported on all platforms: we use software
+ emulation if the C compiler doesn't support 64-bit integers.
+- Support for float formats that are neither big-endian nor little-endian
+ (one known example: the ARM).
+- Fixed bug in callback*_exn functions in the exception-catching case.
+- Work around gcc 2.96 bug on RedHat 7.2 and Mandrake 8.0, 8.1 among others.
+- Stub DLLs now installed in subdir stublibs/ of standard library dir.
+
+Standard library:
+- Protect against integer overflow in sub-string and sub-array bound checks.
+- New module Complex implementing arithmetic over complex numbers.
+- New module Scanf implementing format-based scanning a la scanf() in C.
+- Module Arg: added alternate entry point Arg.parse_argv.
+- Modules Char, Int32, Int64, Nativeint, String: added type "t" and function
+ "compare" so that these modules can be used directly with e.g. Set.Make.
+- Module Digest: fixed issue with Digest.file on large files (>= 1Gb);
+ added Digest.to_hex.
+- Module Filename: added Filename.open_temp_file to atomically create and
+ open the temp file; improved security of Filename.temp_file.
+- Module Genlex: allow _ as first character of an identifier.
+- Module Lazy: more efficient implementation.
+- Module Lexing: improved performances for very large tokens.
+- Module List: faster implementation of sorting functions.
+- Module Printf:
+ added %S and %C formats (quoted, escaped strings and characters);
+ added kprintf (calls user-specified continuation on formatted string).
+- Module Queue: faster implementation (courtesy of François Pottier).
+- Module Random: added Random.bool.
+- Module Stack: added Stack.is_empty.
+- Module Pervasives:
+ added sub-module LargeFile to support files larger than 1Gb
+ (file offsets are int64 rather than int);
+ opening in "append" mode automatically sets "write" mode;
+ files are now opened in close-on-exec mode;
+ string_of_float distinguishes its output from a plain integer;
+ faster implementation of input_line for long lines.
+- Module Sys:
+ added Sys.ocaml_version containing the OCaml version number;
+ added Sys.executable_name containing the (exact) path of the
+ file being executable;
+ Sys.argv.(0) is now unchanged w.r.t. what was provided as 0-th argument
+ by the shell.
+- Module Weak: added weak hash tables.
+
+Other libraries:
+- Bigarray:
+ support for bigarrays of complex numbers;
+ added functions Genarray.dims,
+ {Genarray,Array1,Array2,Array3}.{kind,layout}.
+- Dynlink: fixed bug with loading of mixed-mode Caml/C libraries.
+- LablTK:
+ now supports also the CamlTK API (no labels);
+ support for Activate and Deactivate events;
+ support for virtual events;
+ added UTF conversion;
+ export the tcl interpreter as caml value, to avoid DLL dependencies.
+- Unix:
+ added sub-module LargeFile to support files larger than 1Gb
+ (file offsets are int64 rather than int);
+ added POSIX opening flags (O_NOCTTY, O_*SYNC);
+ use reentrant functions for gethostbyname and gethostbyaddr when available;
+ fixed bug in Unix.close_process and Unix.close_process_full;
+ removed some overhead in Unix.select.
+
+Tools:
+- ocamldoc (the documentation generator) is now part of the distribution.
+- Debugger: now supports the option -I +dir.
+- ocamllex: supports the same identifiers as ocamlc; warns for
+ bad \ escapes in strings and characters.
+- ocamlbrowser:
+ recenter the module boxes when showing a cross-reference;
+ include the current directory in the ocaml path.
+
+Windows port:
+- Can now compile with Mingw (the GNU compilers without the Cygwin
+ runtime library) in addition to MSVC.
+- Toplevel GUI: wrong filenames were given to #use and #load commands;
+ read_line() was buggy for short lines (2 characters or less).
+- OCamlBrowser: now fully functional.
+- Graphics library: fixed several bugs in event handling.
+- Threads library: fixed preemption bug.
+- Unix library: better handling of the underlying differences between
+ sockets and regular file descriptors;
+ added Unix.lockf and a better Unix.rename (thanks to Tracy Camp).
+- LablTk library: fixed a bug in Fileinput
+
+
+Objective Caml 3.04:
+--------------------
+
+Type-checker:
+- Allowed coercing self to the type of the current class, avoiding
+ an obscure error message about "Self type cannot be unified..."
+
+Both compilers:
+- Use OCAMLLIB environment variable to find standard library, falls
+ back on CAMLLIB if not defined.
+- Report out-of-range ASCII escapes in character or string literals
+ such as "\256".
+
+Byte-code compiler:
+- The -use-runtime and -make-runtime flags are back by popular demand
+ (same behavior as in 3.02).
+- Dynamic loading (of the C part of mixed Caml/C libraries): arrange that
+ linking in -custom mode uses the static libraries for the C parts,
+ not the shared libraries, for maximal robustness and compatibility with
+ 3.02.
+
+Native-code compiler:
+- Fixed bug in link-time consistency checking.
+
+Tools:
+- ocamlyacc: added parser debugging support (set OCAMLRUNPARAM=p to get
+ a trace of the pushdown automaton actions).
+- ocamlcp: was broken in 3.03 (Sys_error), fixed.
+
+Run-time system:
+- More work on dynamic loading of the C part of mixed Caml/C libraries.
+- On uncaught exception, flush output channels before printing exception
+ message and backtrace.
+- Corrected several errors in exception backtraces.
+
+Standard library:
+- Pervasives: integer division and modulus are now fully specified
+ on negative arguments (with round-towards-zero semantics).
+- Pervasives.float_of_string: now raises Failure on ill-formed input.
+- Pervasives: added useful float constants max_float, min_float, epsilon_float.
+- printf functions in Printf and Format: added % formats for int32, nativeint,
+ int64; "*" in width and precision specifications now supported
+ (contributed by Thorsten Ohl).
+- Added Hashtbl.copy, Stack.copy.
+- Hashtbl: revised resizing strategy to avoid quadratic behavior
+ on Hashtbl.add.
+- New module MoreLabels providing labelized versions of modules
+ Hashtbl, Map and Set.
+- Pervasives.output_value and Marshal.to_* : improved hashing strategy
+ for internal data structures, avoid excessive slowness on
+ quasi-linearly-allocated inputs.
+
+Other libraries:
+- Num: fixed bug in big integer exponentiation (Big_int.power_*).
+
+Windows port:
+- New GUI for interactive toplevel (Jacob Navia).
+- The Graphics library is now available for stand-alone executables
+ (Jacob Navia).
+- Unix library: improved reporting of system error codes.
+- Fixed error in "globbing" of * and ? patterns on command line.
+
+Emacs mode: small fixes; special color highlighting for ocamldoc comments.
+
+License: added special exception to the LGPL'ed code (libraries and
+ runtime system) allowing unrestricted linking, whether static or dynamic.
+
+
+Objective Caml 3.03 ALPHA:
+--------------------------
+
+Language:
+- Removed built-in syntactic sugar for streams and stream patterns
+ [< ... >], now supported via CamlP4, which is now included in the
+ distribution.
+- Switched the default behaviour to labels mode (labels are compulsory),
+ but allows omitting labels when a function application is complete.
+ -nolabels mode is available but deprecated for programming.
+ (See also scrapelabels and addlabels tools below.)
+- Removed all labels in the standard libraries, except labltk.
+ Labelized versions are kept for ArrayLabels, ListLabels, StringLabels
+ and UnixLabels. "open StdLabels" gives access to the first three.
+- Extended polymorphic variant type syntax, allowing union types and
+ row abbreviations for both sub- and super-types. #t deprecated in types.
+- See the Upgrading file for how to adapt to all the changes above.
+
+Type-checker:
+- Fixed obscure bug in module typing causing the type-checker to loop
+ on signatures of the form
+ module type M
+ module A: sig module type T = sig module T: M end end
+ module B: A.T
+- Improved efficiency of module type-checking via lazy computation of
+ certain signature summary information.
+- An empty polymorphic variant type is now an error.
+
+Both compilers:
+- Fixed wrong code generated for "struct include M ... end" when M
+ contains one or several "external" declarations.
+
+Byte-code compiler:
+- Protect against VM stack overflow caused by module initialization code
+ with many local variables.
+- Support for dynamic loading of the C part of mixed Caml/C libraries.
+- Removed the -use-runtime and -make-runtime flags, obsoleted by dynamic
+ loading of C libraries.
+
+Native-code compiler:
+- Attempt to recover gracefully from system stack overflow. Currently
+ works on x86 under Linux and BSD.
+- Alpha: work around "as" bug in Tru64 5.1.
+
+Toplevel environment:
+- Revised printing of inferred types and evaluation results
+ so that an external printer (e.g. Camlp4's) can be hooked in.
+
+Tools:
+- The CamlP4 pre-processor-pretty-printer is now included in the standard
+ distribution.
+- New tool ocamlmklib to help build mixed Caml/C libraries.
+- New tool scrapelabels and addlabels, to either remove (non-optional)
+ labels in interfaces, or automatically add them in the definitions.
+ They provide easy transition from classic mode ocaml 3.02 sources,
+ depending on whether you want to keep labels or not.
+- ocamldep: added -pp option to handle preprocessed source files.
+
+Run-time system:
+- Support for dynamic loading of the C part of mixed Caml/C libraries.
+ Currently works under Linux, FreeBSD, Windows, Tru64, Solaris and Irix.
+- Implemented registration of global C roots with a skip list,
+ runs much faster when there are many global C roots.
+- Autoconfiguration script: fixed wrong detection of Mac OS X; problem
+ with the Sparc, gcc 3.0, and float alignment fixed.
+
+Standard library:
+- Added Pervasives.flush_all to flush all opened output channels.
+
+Other libraries:
+- All libraries revised to allow dynamic loading of the C part.
+- Graphics under X Windows: revised event handling, should no longer lose
+ mouse events between two calls to wait_next_event(); wait_next_event()
+ now interruptible by signals.
+- Bigarrays: fixed bug in marshaling of big arrays.
+
+Windows port:
+- Fixed broken Unix.{get,set}sockopt*
+
+
+
+Objective Caml 3.02:
+--------------------
+
+Both compilers:
+- Fixed embarrassing bug in pattern-matching compilation
+ (affected or-patterns containing variable bindings).
+- More optimizations in pattern-matching compilation.
+
+Byte-code compiler:
+- Protect against VM stack overflow caused by functions with many local
+ variables.
+
+Native-code compiler:
+- Removed re-sharing of string literals, causes too many surprises with
+ in-place string modifications.
+- Corrected wrong compilation of toplevel "include" statements.
+- Fixed bug in runtime function "callbackN_exn".
+- Signal handlers receive the conventional signal number as argument
+ instead of the system signal number (same behavior as with the
+ bytecode compiler).
+- ARM port: fixed issue with immediate operand overflow in large functions.
+
+Toplevel environment:
+- User-definer printers (for #install_printer) now receive as first argument
+ the pretty-printer formatter where to print their second argument.
+ Old printers (with only one argument) still supported for backward
+ compatibility.
+
+Standard library:
+- Module Hashtbl: added Hashtbl.fold.
+
+Other libraries:
+- Dynlink: better error reporting in add_interfaces for missing .cmi files.
+- Graphics: added more drawing functions (multiple points, polygons,
+ multiple lines, splines).
+- Bytecode threads: the module Unix is now thread-safe, ThreadUnix is
+ deprecated. Unix.exec* now resets standard descriptors to blocking mode.
+- Native threads: fixed a context-switch-during-GC problem causing
+ certain C runtime functions to fail, most notably input_value.
+- Unix.inet_addr_of_string: call inet_aton() when available so as to
+ handle correctly the address 255.255.255.255.
+- Unix: added more getsockopt and setsockopt functions to get/set
+ options that have values other than booleans.
+- Num: added documentation for the Big_int module.
+
+Tools:
+- ocamldep: fixed wrong dependency issue with nested modules.
+
+Run-time system:
+- Removed floating-point error at start-up on some non-IEEE platforms
+ (e.g. FreeBSD prior to 4.0R).
+- Stack backtrace mechanism now works for threads that terminate on
+ an uncaught exception.
+
+Auto-configuration:
+- Updated config.guess and config.sub scripts, should recognize a greater
+ number of recent platform.
+
+Windows port:
+- Fixed broken Unix.waitpid. Unix.file_descr can now be compared or hashed.
+- Toplevel application: issue with spaces in name of stdlib directory fixed.
+
+MacOS 9 port:
+- Removed the last traces of support for 68k
+
+
+Objective Caml 3.01:
+--------------------
+
+New language features:
+- Variables are allowed in "or" patterns, e.g.
+ match l with [t] | [_;t] -> ... t ...
+- "include <structure expression>" to re-export all components of a
+ structure inside another structure.
+- Variance annotation on parameters of type declarations, e.g.
+ type (+'a,-'b,'c) t (covariant in 'a, contravariant in 'b, invariant in 'c)
+
+New ports:
+- Intel IA64/Itanium under Linux (including the native-code compiler).
+- Cygwin under MS Windows. This port is an alternative to the earlier
+ Windows port of OCaml, which relied on MS compilers; the Cygwin
+ Windows port does not need MS Visual C++ nor MASM, runs faster
+ in bytecode, and has a better implementation of the Unix library,
+ but currently lacks threads and COM component support.
+
+Type-checking:
+- Relaxed "monomorphic restriction" on type constructors in a
+ mutually-recursive type definition, e.g. the following is again allowed
+ type u = C of int t | D of string t and 'a t = ...
+- Fixed name-capture bug in "include SIG" and "SIG with ..." constructs.
+- Improved implicit subtypes built by (... :> ty), closer to intuition.
+- Several bug fixes in type-checking of variants.
+- Typing of polymorphic variants is more restrictive:
+ do not allow conjunctive types inside the same pattern matching.
+ a type has either an upper bound, or all its tags are in the lower bound.
+ This may break some programs (this breaks lablgl-0.94).
+
+Both compilers:
+- Revised compilation of pattern matching.
+- Option -I +<subdir> to search a subdirectory <subdir> of the standard
+ library directory (i.e. write "ocamlc -I +labltk" instead of
+ "ocamlc -I /usr/local/lib/ocaml/labltk").
+- Option -warn-error to turn warnings into errors.
+- Option -where to print the location of the standard library directory.
+- Assertions are now type-checked even if the -noassert option is given,
+ thus -noassert can no longe change the types of modules.
+
+Bytecode compiler and bytecode interpreter:
+- Print stack backtrace when a program aborts due to an uncaught exception
+ (requires compilation with -g and running with ocamlrun -b or
+ OCAMLRUNPARAM="b=1").
+
+Native-code compiler:
+- Better unboxing optimizations on the int32, int64, and nativeint types.
+- Tail recursion preserved for functions having more parameters than
+ available registers (but tail calls to other functions are still
+ turned off if parameters do not fit entirely in registers).
+- Fixed name-capture bug in function inlining.
+- Improved spilling/reloading strategy for conditionals.
+- IA32, Alpha: better alignment of branch targets.
+- Removed spurious dependency on the -lcurses library.
+
+Toplevel environment:
+- Revised handling of top-level value definitions, allows reclaimation
+ of definitions that are shadowed by later definitions with the same names.
+ (E.g. "let x = <big list>;; let x = 1;;" allows <big list> to be reclaimed.)
+- Revised the tracing facility so that for standard library functions,
+ only calls from user code are traced, not calls from the system.
+- Added a "*" prompt when within a comment.
+
+Runtime system:
+- Fixed portability issue on bcopy() vs memmove(), affecting Linux RedHat 7.0
+ in particular.
+- Structural comparisons (=, <>, <, <=, >, >=, compare) reimplemented
+ so as to avoid overflowing the C stack.
+- Input/output functions: arrange so that reads and writes on closed
+ in_channel or out_channel raise Sys_error immediately.
+
+Standard library:
+- Module Gc: changed some counters to float in order to avoid overflow;
+ added alarms
+- Module Hashtbl: added Hashtbl.replace.
+- Module Int64: added bits_of_float, float_of_bits (access to IEEE 754
+ representation of floats).
+- Module List: List.partition now tail-rec;
+ improved memory behavior of List.stable_sort.
+- Module Nativeint: added Nativeint.size (number of bits in a nativeint).
+- Module Obj: fixed incorrect resizing of float arrays in Obj.resize.
+- Module Pervasives: added float constants "infinity", "neg_infinity", "nan";
+ added a "classify_float" function to test a float for NaN, infinity, etc.
+- Pervasives.input_value: fixed bug affecting shared custom objects.
+- Pervasives.output_value: fixed size bug affecting "int64" values.
+- Pervasives.int_of_string, {Int32,Int64,Nativeint}.of_string:
+ fixed bug causing bad digits to be accepted without error.
+- Module Random: added get_state and set_state to checkpoint the generator.
+- Module Sys: signal handling functions are passed the system-independent
+ signal number rather than the raw system signal number whenever possible.
+- Module Weak: added Weak.get_copy.
+
+Other libraries:
+- Bigarray: added Bigarray.reshape to take a view of the elements of a
+ bigarray with different dimensions or number of dimensions;
+ fixed bug causing "get" operations to be unavailable in custom
+ toplevels including Bigarray.
+- Dynlink: raise an error instead of crashing when the loaded module
+ refers to the not-yet-initialized module performing a dynlink operation.
+- Bytecode threads: added a thread-safe version of the Marshal module;
+ fixed a rare GC bug in the thread scheduler.
+- POSIX threads: fixed compilation problem with threads.cmxa.
+- Both thread libraries: better tail-recursion in Event.sync.
+- Num library: fixed bug in square roots (Nat.sqrt_nat, Big_int.sqrt_big_int).
+
+Tools:
+- ocamldep: fixed missing dependencies on labels of record patterns and
+ record construction operations
+
+Win32 port:
+- Unix.waitpid now implements the WNOHANG option.
+
+Mac OS ports:
+- Mac OS X public beta is supported.
+- Int64.format works on Mac OS 8/9.
+
+
+Objective Caml 3.00:
+--------------------
+
+Language:
+- OCaml/OLabl merger:
+ * Support for labeled and optional arguments for functions and classes.
+ * Support for variant types (sum types compared by structure).
+ See tutorial (chapter 2 of the OCaml manual) for more information.
+- Syntactic change: "?" in stream error handlers changed to "??".
+- Added exception renaming in structures (exception E = F).
+- (OCaml 2.99/OLabl users only) Label syntax changed to preserve
+ backward compatibility with 2.0x (labeled function application
+ is f ~lbl:arg instead of f lbl:arg). A tool is provided to help
+ convert labelized programs to OCaml 3.00.
+
+Both compilers:
+- Option -labels to select commuting label mode (labels are mandatory,
+ but labeled arguments can be passed in a different order than in
+ the definition of the function; in default mode, labels may be omitted,
+ but argument reordering is only allowed for optional arguments).
+- Libraries (.cma and .cmxa files) now "remember" C libraries given
+ at library construction time, and add them back at link time.
+ Allows linking with e.g. just unix.cma instead of
+ unix.cma -custom -cclib -lunix
+- Revised printing of error messages, now use Format.fprintf; no visible
+ difference for users, but could facilitate internationalization later.
+- Fixed bug in unboxing of records containing only floats.
+- Fixed typing bug involving applicative functors as components of modules.
+- Better error message for inconsistencies between compiled interfaces.
+
+Bytecode compiler:
+- New "modular" format for bytecode executables; no visible differences
+ for users, but will facilitate further extensions later.
+- Fixed problems in signal handling.
+
+Native-code compiler:
+- Profiling support on x86 under FreeBSD
+- Open-coding and unboxing optimizations for the new integer types
+ int32, int64, nativeint, and for bigarrays.
+- Fixed instruction selection bug with "raise" appearing in arguments
+ of strict operators, e.g. "1 + raise E".
+- Better error message when linking incomplete/incorrectly ordered set
+ of .cmx files.
+- Optimized scanning of global roots during GC, can reduce total running
+ time by up to 8% on GC-intensive programs.
+
+Interactive toplevel:
+- Better printing of exceptions, including arguments, when possible.
+- Fixed rare GC bug occurring during interpretation of scripts.
+- Added consistency checks between interfaces and implementations
+ during #load.
+
+Run-time system:
+- Added support for "custom" heap blocks (heap blocks carrying
+ C functions for finalization, comparison, hashing, serialization
+ and deserialization).
+- Support for finalisation functions written in Caml.
+
+Standard library:
+- New modules Int32, Int64, Nativeint for 32-bit, 64-bit and
+ platform-native integers
+- Module Array: added Array.sort, Array.stable_sort.
+- Module Gc: added Gc.finalise to attach Caml finalisation functions to
+ arbitrary heap-allocated data.
+- Module Hashtbl: do not bomb when resizing very large table.
+- Module Lazy: raise Lazy.Undefined when a lazy evaluation needs itself.
+- Module List: added List.sort, List.stable_sort; fixed bug in List.rev_map2.
+- Module Map: added mapi (iteration with key and data).
+- Module Set: added iterators for_all, exists, filter, partition.
+- Module Sort: still here but deprecated in favor of new sorting functions
+ in Array and List.
+- Module Stack: added Stack.top
+- Module String: fixed boundary condition on String.rindex_from
+- Added labels on function arguments where appropriate.
+
+New libraries and tools:
+- ocamlbrowser: graphical browser for OCaml sources and compiled interfaces,
+ supports cross-referencing, editing, running the toplevel.
+- LablTK: GUI toolkit based on TK, using labeled and optional arguments,
+ easier to use than CamlTK.
+- Bigarray: large, multi-dimensional numerical arrays, facilitate
+ interfacing with C/Fortran numerical code, efficient support for
+ advanced array operations such as slicing and memory-mapping of files.
+
+Other libraries:
+- Bytecode threads: timer-based preemption was broken, works back again;
+ fixed bug in Pervasives.input_line; exported Thread.yield.
+- System threads: several GC / reentrancy bugs fixed in buffered I/O
+ and Unix I/O; revised Thread.join implementation for strict POSIX
+ conformance; exported Thread.yield.
+- Graphics: added support for double buffering; added, current_x, current_y,
+ rmoveto, rlineto, and draw_rect.
+- Num: fixed bug in Num.float_of_num.
+- Str: worked around potential symbol conflicts with C standard library.
+- Dbm: fixed bug with Dbm.iter on empty database.
+
+New or updated ports:
+- Alpha/Digital Unix: lifted 256M limitation on total memory space
+ induced by -taso
+- Port to AIX 4.3 on PowerPC
+- Port to HPUX 10 on HPPA
+- Deprecated 680x0 / SunOS port
+
+Macintosh port:
+- Implemented the Unix and Thread libraries.
+- The toplevel application does not work on 68k Macintoshes; maybe
+ later if there's a demand.
+- Added a new tool, ocamlmkappli, to build an application from a
+ program written in O'Caml.
+
+
+Objective Caml 2.04:
+--------------------
+
+- C interface: corrected inconsistent change in the CAMLparam* macros.
+- Fixed internal error in ocamlc -g.
+- Fixed type-checking of "S with ...", where S is a module type name
+ abbreviating another module type name.
+- ocamldep: fixed stdout/stderr mismatch after failing on one file.
+- Random.self_init more random.
+- Windows port:
+ - Toplevel application: fixed spurious crash on exit.
+ - Native-code compiler: fixed bug in assembling certain
+ floating-point constants (masm doesn't grok 2e5, wants 2.0e5).
+
+Objective Caml 2.03:
+--------------------
+
+New ports:
+- Ported to BeOS / Intel x86 (bytecode and native-code).
+- BSD / Intel x86 port now supports both a.out and ELF binary formats.
+- Added support for {Net,Open}BSD / Alpha.
+- Revamped Rhapsody port, now works on MacOS X server.
+
+Syntax:
+- Warning for "(*)" and "*)" outside comment.
+- Removed "#line LINENO", too ambiguous with a method invocation;
+ the equivalent "# LINENO" is still supported.
+
+Typing:
+- When an incomplete pattern-matching is detected, report also a
+ value or value template that is not covered by the cases of
+ the pattern-matching.
+- Several bugs in class type matching and in type error reporting fixed.
+- Added an option -rectypes to support general recursive types,
+ not just those involving object types.
+
+Bytecode compiler:
+- Minor cleanups in the bytecode emitter.
+- Do not remove "let x = y" bindings in -g mode; makes it easier to
+ debug the code.
+
+Native-code compiler:
+- Fixed bug in grouping of allocations performed in the same basic block.
+- Fixed bug in constant propagation involving expressions containing
+ side-effects.
+- Fixed incorrect code generation for "for" loops whose upper bound is
+ a reference assigned inside the loop.
+- MIPS code generator: work around a bug in the IRIX 6 assembler.
+
+Toplevel:
+- Fixed incorrect redirection of standard formatter to stderr
+ while executing toplevel scripts.
+
+Standard library:
+- Added List.rev_map, List.rev_map2.
+- Documentation of List functions now says which functions are
+ tail-rec, and how much stack space is needed for non-tailrec functions.
+- Wrong type for Printf.bprintf fixed.
+- Fixed weird behavior of Printf.sprintf and Printf.bprintf in case of
+ partial applications.
+- Added Random.self_init, which initializes the PRNG from the system date.
+- Sort.array: serious bugs fixed.
+- Stream.count: fixed incorrect behavior with ocamlopt.
+
+Run-time system and external interface:
+- Fixed weird behavior of signal handlers w.r.t. signal masks and exceptions
+ raised from the signal handler.
+- Fixed bug in the callback*_exn() functions.
+
+Debugger:
+- Fixed wrong printing of float record fields and elements of float arrays.
+- Supports identifiers starting with '_'.
+
+Profiler:
+- Handles .mli files, so ocamlcp can be used to replace ocamlc (e.g. in a
+ makefile).
+- Now works on programs that use stream expressions and stream parsers.
+
+Other libraries:
+- Graphics: under X11, treat all mouse buttons equally; fixed problem
+ with current font reverting to the default font when the graphics
+ window is resized.
+- Str: fixed reentrancy bugs in Str.replace and Str.full_split.
+- Bytecode threads: set standard I/O descriptors to non-blocking mode.
+- OS threads: revised implementation of Thread.wait_signal.
+- All threads: added Event.wrap_abort, Event.choose [].
+- Unix.localtime, Unix.gmtime: check for errors.
+- Unix.create_process: now supports arbitrary redirections of std descriptors.
+- Added Unix.open_process_full.
+- Implemented Unix.chmod under Windows.
+- Big_int.square_big_int now gives the proper sign to its result.
+
+Others:
+- ocamldep: don't stop at first error, skip to next file.
+- Emacs mode: updated with Garrigue and Zimmerman's snapshot of 1999/10/18.
+- configure script: added -prefix option.
+- Windows toplevel application: fixed problem with graphics library
+ not loading properly.
+
+
+Objective Caml 2.02:
+--------------------
+
+* Type system:
+ - Check that all components of a signature have unique names.
+ - Fixed bug in signature matching involving a type component and
+ a module component, both sharing an abstract type.
+ - Bug involving recursive classes constrained by a class type fixed.
+ - Fixed bugs in printing class types and in printing unification errors.
+
+* Compilation:
+ - Changed compilation scheme for "{r with lbl = e}" when r has many fields
+ so as to avoid code size explosion.
+
+* Native-code compiler:
+ - Better constant propagation in boolean expressions and in conditionals.
+ - Removal of unused arguments during function inlining.
+ - Eliminated redundant tagging/untagging in bit shifts.
+ - Static allocation of closures for functions without free variables,
+ reduces the size of initialization code.
+ - Revised compilation scheme for definitions at top level of compilation
+ units, so that top level functions have no free variables.
+ - Coalesced multiple allocations of heap blocks inside one expression
+ (e.g. x :: y :: z allocates the two conses in one step).
+ - Ix86: better handling of large integer constants in instruction selection.
+ - MIPS: fixed wrong asm generated for String.length "literal".
+
+* Standard library:
+ - Added the "ignore" primitive function, which just throws away its
+ argument and returns "()". It allows to write
+ "ignore(f x); y" if "f x" doesn't have type unit and you don't
+ want the warning caused by "f x; y".
+ - Added the "Buffer" module (extensible string buffers).
+ - Module Format: added formatting to buffers and to strings.
+ - Added "mem" functions (membership test) to Hashtbl and Map.
+ - Module List: added find, filter, partition.
+ Renamed remove and removeq to remove_assoc and remove_assq.
+ - Module Marshal: fixed bug in marshaling functions when passed functional
+ values defined by mutual recursion with other functions.
+ - Module Printf: added Printf.bprintf (print to extensible buffer);
+ added %i format as synonymous for %d (as per the docs).
+ - Module Sort: added Sort.array (Quicksort).
+
+* Runtime system:
+ - New callback functions for callbacks with arbitrary many arguments
+ and for catching Caml exceptions escaping from a callback.
+
+* The ocamldep dependency generator: now performs full parsing of the
+ sources, taking into account the scope of module bindings.
+
+* The ocamlyacc parser generator: fixed sentinel error causing wrong
+ tables to be generated in some cases.
+
+* The str library:
+ - Added split_delim, full_split as variants of split that control
+ more precisely what happens to delimiters.
+ - Added replace_matched for separate matching and replacement operations.
+
+* The graphics library:
+ - Bypass color lookup for 16 bpp and 32 bpp direct-color displays.
+ - Larger color cache.
+
+* The thread library:
+ - Bytecode threads: more clever use of non-blocking I/O, makes I/O
+ operations faster.
+ - POSIX threads: gcc-ism removed, should now compile on any ANSI C compiler.
+ - Both: avoid memory leak in the Event module when a communication
+ offer is never selected.
+
+* The Unix library:
+ - Fixed inversion of ctime and mtime in Unix.stat, Unix.fstat, Unix.lstat.
+ - Unix.establish_connection: properly reclaim socket if connect fails.
+
+* The DBM library: no longer crashes when calling Dbm.close twice.
+
+* Emacs mode:
+ - Updated with Garrigue and Zimmerman's latest version.
+ - Now include an "ocamltags" script for using etags on OCaml sources.
+
+* Win32 port:
+ - Fixed end-of-line bug in ocamlcp causing problems with generated sources.
+
+
+Objective Caml 2.01:
+--------------------
+
+* Typing:
+ - Added warning for expressions of the form "a; b" where a does not have
+ type "unit"; catches silly mistake such as
+ "record.lbl = newval; ..." instead of "record.lbl <- newval; ...".
+ - Typing bug in "let module" fixed.
+
+* Compilation:
+ - Fixed bug in compilation of recursive and mutually recursive classes.
+ - Option -w to turn specific warnings on/off.
+ - Option -cc to choose the C compiler used with ocamlc -custom and ocamlopt.
+
+* Bytecode compiler and bytecode interpreter:
+ - Intel x86: removed asm declaration causing "fixed or forbidden register
+ spilled" error with egcs and gcc 2.8 (but not with gcc 2.7, go figure).
+ - Revised handling of debugging information, allows faster linking with -g.
+
+* Native-code compiler:
+ - Fixed bugs in integer constant propagation.
+ - Out-of-bound accesses in array and strings now raise an Invalid_argument
+ exception (like the bytecode system) instead of stopping the program.
+ - Corrected scheduling of bound checks.
+ - Port to the StrongARM under Linux (e.g. Corel Netwinder).
+ - I386: fixed bug in profiled code (ocamlopt -p).
+ - Mips: switched to -n32 model under IRIX; dropped the Ultrix port.
+ - Sparc: simplified the addressing modes, allows for better scheduling.
+ - Fixed calling convention bug for Pervasives.modf.
+
+* Toplevel:
+ - #trace works again.
+ - ocamlmktop: use matching ocamlc, not any ocamlc from the search path.
+
+* Memory management:
+ - Fixed bug in heap expansion that could cause the GC to loop.
+
+* C interface:
+ - New macros CAMLparam... and CAMLlocal... to simplify the handling
+ of local roots in C code.
+ - Simplified procedure for allocating and filling Caml blocks from C.
+ - Declaration of string_length in <caml/mlvalues.h>.
+
+* Standard library:
+ - Module Format: added {get,set}_all_formatter_output_functions,
+ formatter_of_out_channel, and the control sequence @<n> in printf.
+ - Module List: added mem_assoc, mem_assq, remove, removeq.
+ - Module Pervasives: added float_of_int (synonymous for float),
+ int_of_float (truncate), int_of_char (Char.code), char_of_int (Char.chr),
+ bool_of_string.
+ - Module String: added contains, contains_from, rcontains_from.
+
+* Unix library:
+ - Unix.lockf: added F_RLOCK, F_TRLOCK; use POSIX locks whenever available.
+ - Unix.tc{get,set}attr: added non-standard speeds 57600, 115200, 230400.
+ - Unix.chroot: added.
+
+* Threads:
+ - Bytecode threads: improved speed of I/O scheduling.
+ - Native threads: fixed a bug involving signals and exceptions
+ generated from C.
+
+* The "str" library:
+ - Added Str.string_partial_match.
+ - Bumped size of internal stack.
+
+* ocamlyacc: emit correct '# lineno' directive for prelude part of .mly file.
+
+* Emacs editing mode: updated with Jacques Garrigue's newest code.
+
+* Windows port:
+ - Added support for the "-cclib -lfoo" option (instead of
+ -cclib /full/path/libfoo.lib as before).
+ - Threads: fixed a bug at initialization time.
+
+* Macintosh port: source code for Macintosh application merged in.
+
+
+Objective Caml 2.00:
+--------------------
+
+* Language:
+ - New class language. See http://caml.inria.fr/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,
+ Str.regexp_string_case_fold.
+
+* Emacs mode:
+ - Fixed bug with paragraph fill.
+ - Fixed bug with next-error under Emacs 20.
+
+
+Objective Caml 1.07:
+--------------------
+
+* Native-code compiler:
+ - Revised interface between generated code and GC, fixes serious GC
+ problems with signals and native threads.
+ - Added "-thread" option for compatibility with ocamlc.
+
+* Debugger: correctly print instance variables of objects.
+
+* Run-time system: ported to OpenBSD.
+
+* Standard library: fixed wrong interface for Marshal.to_buffer and
+ Obj.unmarshal.
+
+* Num library: added Intel x86 optimized asm code (courtesy of
+ Bernard Serpette).
+
+* Thread libraries:
+ - Native threads: fixed GC bugs and installation procedure.
+ - Bytecode threads: fixed problem with "Marshal" module.
+ - Both: added Event.always.
+
+* MS Windows port: better handling of long command lines in Sys.command
+
+Objective Caml 1.06:
+--------------------
+
+* 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
+ End_roots.
+ - 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
+ modules.
+ - 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.
+
+Objective Caml 1.05:
+--------------------
+
+* Typing: fixed several bugs causing spurious type errors.
+
+* Native-code compiler: fixed instruction selection bug causing GC to
+see ill-formed pointers; fixed callbacks to support invocation from a
+main program in C.
+
+* Standard library: fixed String.lowercase; Weak now resists integers.
+
+* Toplevel: multiple phrases without intermediate ";;" now really supported;
+fixed value printing problems where the wrong printer was selected.
+
+* Debugger: fixed printing problem with local references; revised
+handling of checkpoints; various other small fixes.
+
+* Macintosh port: fixed signed division problem in bytecomp/emitcode.ml
+
+Objective Caml 1.04:
+--------------------
+
+* Replay debugger ported from Caml Light; added debugger support in
+ compiler (option -g) and runtime system. Debugger is alpha-quality
+ and needs testing.
+
+* Parsing:
+ - Support for "# linenum" directives.
+ - At toplevel, allow several phrases without intermediate ";;".
+
+* Typing:
+ - Allow constraints on datatype parameters, e.g.
+ type 'a foo = ... constraint 'a = 'b * 'c.
+ - Fixed bug in signature matching in presence of free type variables '_a.
+ - Extensive cleanup of internals of type inference.
+
+* Native-code compilation:
+ - Inlining of small functions at point of call (fairly conservative).
+ - MIPS code generator ported to SGI IRIX 6.
+ - Better code generated for large integer constants.
+ - Check for urgent GC when allocating large objects in major heap.
+ - PowerPC port: better scheduling, reduced TOC consumption.
+ - HPPA port: handle long conditional branches gracefully,
+ several span-dependent bugs fixed.
+
+* Standard library:
+ - More floating-point functions (all ANSI C float functions now available).
+ - Hashtbl: added functorial interface (allow providing own equality
+ and hash functions); rehash when resizing, avoid memory leak on
+ Hashtbl.remove.
+ - Added Char.uppercase, Char.lowercase, String.uppercase, String.lowercase,
+ String.capitalize, String.uncapitalize.
+ - New module Weak for manipulating weak pointers.
+ - New module Callback for registering closures and exceptions to be
+ used from C.
+
+* Foreign interface:
+ - Better support for callbacks (C calling Caml), exception raising
+ from C, and main() in C. Added function to remove a global root.
+ - Option -output-obj to package Caml code as a C library.
+
+* Thread library: fixed bug in timed_read and timed_write operations;
+ Lexing.from_function and Lexing.from_channel now reentrant.
+
+* Unix interface: renamed EACCESS to EACCES (the POSIX name); added setsid;
+ fixed bug in inet_addr_of_string for 64-bit platforms.
+
+* Ocamlyacc: default error function no longer prevents error recovery.
+
+* Ocamllex: fixed reentrancy problem w.r.t. exceptions during refill;
+ fixed output problem (\r\r\n) under Win32.
+
+* Macintosh port:
+ - The makefiles are provided for compiling and installing O'Caml on
+ a Macintosh with MPW 3.4.1.
+ - An application with the toplevel in a window is forthcoming.
+
+* Windows NT/95 port: updated toplevel GUI to that of Caml Light 0.73.
+
+* Emacs editing mode and debugger interface included in distribution.
+
+
+Objective Caml 1.03:
+--------------------
+
+* Typing:
+ - bug with type names escaping their scope via unification with
+ non-generalized type variables '_a completely fixed;
+ - fixed bug in occur check : it was too restrictive;
+ - fixed bug of coercion operators;
+ - check that no two types of the same name are generated in a module
+ (there was no check for classes);
+ - "#install_printer" works again;
+ - fixed bug in printing of subtyping errors;
+ - in class interfaces, construct "method m" (without type) change
+ the status of method m from abstract to concrete;
+ - in a recursive definition of class interfaces, a class can now
+ inherit from a previous class;
+ - typing of a method make use of an eventual previously given type
+ of this method, yielding clearer type errors.
+
+* Compilation (ocamlc and ocamlopt):
+ - fixed bug in compilation of classes.
+
+* Native-code compilation:
+ - optimization of functions taking tuples of arguments;
+ - code emitter for the Motorola 680x0 processors (retrocomputing week);
+ - Alpha/OSF1: generate frame descriptors, avoids crashes when e.g.
+ exp() or log() cause a domain error; fixed bug with
+ String.length "literal";
+ - Sparc, Mips, HPPA: removed marking of scanned stack frames
+ (benefits do not outweight cost).
+
+* Standard library:
+ - Arg.parse now prints documentation for command-line options;
+ - I/O buffers (types in_channel and out_channel) now heap-allocated,
+ avoids crashing when closing a channel several times;
+ - Overflow bug in compare() fixed;
+ - GC bug in raising Sys_error from I/O functions fixed;
+ - Parsing.symbol_start works even for epsilon productions.
+
+* Foreign interface: main() in C now working, fixed bug in library
+ order at link time.
+
+* Thread library: guard against calling thread functions before Thread.create.
+
+* Unix library: fixed getsockopt, setsockopt, open_process_{in,out}.
+
+* Perl-free, cpp-free, cholesterol-free installation procedure.
+
+
+Objective Caml 1.02:
+--------------------
+* Typing:
+ - fixed bug with type names escaping their scope via unification
+ with non-generalized type variables '_a;
+ - keep #class abbreviations longer;
+ - faster checking of well-formed abbreviation definitions;
+ - stricter checking of "with" constraints over signatures (arity
+ mismatch, overriding of an already manifest type).
+
+* Compilation (ocamlc and ocamlopt):
+ - fixed bug in compilation of recursive classes;
+ - [|...|] and let...rec... allowed inside definitions of recursive
+ data structures;
+
+* Bytecode compilation: fixed overflow in linker for programs with
+ more than 65535 globals and constants.
+
+* Native-code compilation:
+ - ocamlopt ported to HPPA under HP/UX, Intel x86 under Solaris 2,
+ PowerMacintosh under MkLinux;
+ - fixed two bugs related to floating-point arrays (one with "t array"
+ where t is an abstract type implemented as float, one with
+ comparison between two float arrays on 32 bit platforms);
+ - fixed reloading/spilling problem causing non-termination of
+ register allocation;
+ - fixed bugs in handling of () causing loss of tail recursion;
+ - fixed reloading bug in indirect calls.
+
+* Windows NT/95 port:
+ - complete port of the threads library (Pascal Cuoq);
+ - partial port of the Unix library (Pascal Cuoq);
+ - expansion of *, ? and @ on the command line.
+
+* Standard library:
+ - bug in in List.exists2 fixed;
+ - bug in "Random.int n" for very large n on 64-bit machines fixed;
+ - module Format: added a "general purpose" type of box (open_box);
+ can output on several formatters at the same time.
+
+* The "threads" library:
+ - implementation on top of native threads available for Win32 and
+ POSIX 1003.1c;
+ - added -thread option to select a thread-safe version of the
+ standard library, the ThreadIO module is no longer needed.
+
+* The "graph" library: avoid invalid pixmaps when doing
+ open_graph/close_graph several times.
+
+* The "dynlink" library: support for "private" (no re-export) dynamic loading.
+
+* ocamlyacc: skip '...' character literals correctly.
+
+* C interface: C code linked with O'Caml code can provide its own main()
+ and call caml_main() later.
+
+
+Objective Caml 1.01:
+--------------------
+* Typing: better report of type incompatibilities;
+ non-generalizable type variables in a struct...end no longer flagged
+ immediately as an error;
+ name clashes during "open" avoided.
+
+* Fixed bug in output_value where identical data structures
+ could have different external representations; this bug caused wrong
+ "inconsistent assumptions" errors when checking compatibility of
+ interfaces at link-time.
+
+* Standard library: fixed bug in Array.blit on overlapping array sections
+
+* Unmarshaling from strings now working.
+
+* ocamlc, ocamlopt: new flags -intf and -impl to force compilation as
+ an implementation/an interface, regardless of file extension;
+ overflow bug on wide-range integer pattern-matchings fixed.
+
+* ocamlc: fixed bytecode generation bug causing problems with compilation
+ units defining more than 256 values
+
+* ocamlopt, all platforms:
+ fixed GC bug in "let rec" over data structures;
+ link startup file first, fixes "undefined symbol" errors with some
+ libraries.
+
+* ocamlopt, Intel x86:
+ more efficient calling sequence for calling C functions;
+ floating-point wars, chapter 5: don't use float stack for holding
+ float pseudo-registers, stack-allocating them is just as efficient.
+
+* ocamlopt, Alpha and Intel x86: more compact calling sequence for garbage
+ collection.
+
+* ocamllex: generated automata no longer use callbacks for refilling
+ the input buffer (works better with threads); character literals
+ correctly skipped inside actions.
+
+* ocamldep: "-I" directories now searched in the right order
+
+* Thread library: incompatibilities with callbacks, signals, and
+ dynamic linking removed; scheduling bug with Thread.wait fixed.
+
+* New "dbm" library, interfaces with NDBM.
+
+* Object-oriented extensions:
+ instance variables can now be omitted in class types;
+ some error messages have been made clearer;
+ several bugs fixes.
+
+Objective Caml 1.00:
+--------------------
+
+* Merge of Jerome Vouillon and Didier Remy's object-oriented
+extensions.
+
+* All libraries: all "new" functions renamed to "create" because "new"
+is now a reserved keyword.
+
+* Compilation of "or" patterns (pat1 | pat2) completely revised to
+avoid code size explosion.
+
+* Compiler support for preprocessing source files (-pp flag).
+
+* Library construction: flag -linkall to force linking of all units in
+a library.
+
+* Native-code compiler: port to the Sparc under NetBSD.
+
+* Toplevel: fixed bug when tracing several times the same function
+under different names.
+
+* New format for marshaling arbitrary data structures, allows
+marshaling to/from strings.
+
+* Standard library: new module Genlex (configurable lexer for streams)
+
+* Thread library: much better support for I/O and blocking system calls.
+
+* Graphics library: faster reclaimation of unused pixmaps.
+
+* Unix library: new functions {set,clear}_nonblock, {set,clear}_close_on_exec,
+{set,get}itimer, inet_addr_any, {get,set}sockopt.
+
+* Dynlink library: added support for linking libraries (.cma files).
+
+Caml Special Light 1.15:
+------------------------
+
+* Caml Special Light now runs under Windows NT and 95. Many thanks to
+Kevin Gallo (Microsoft Research) who contributed his initial port.
+
+* csllex now generates tables for a table-driven automaton.
+The resulting lexers are smaller and run faster.
+
+* Completely automatic configuration script.
+
+* Typing: more stringent checking of module type definitions against
+manifest module type specifications.
+
+* Toplevel: recursive definitions of values now working.
+
+* Native-code compiler, all platforms:
+ toplevel "let"s with refutable patterns now working;
+ fixed bug in assignment to float record fields;
+ direct support for floating-point negation and absolute value.
+
+* Native-code compiler, x86: fixed bug with tail calls (with more than
+4 arguments) from a function with a one-word stack frame.
+
+* Native-code compiler, Sparc: problem with -compact fixed.
+
+* Thread library: support for non-blocking writes; scheduler revised.
+
+* Unix library: bug in gethostbyaddr fixed; bounds checking for read,
+write, etc.
+
+Caml Special Light 1.14:
+------------------------
+
+* cslopt ported to the PowerPC/RS6000 architecture. Better support for
+AIX in the bytecode system as well.
+
+* cslopt, all platforms: fixed bug in live range splitting around catch/exit.
+
+* cslopt for the Intel (floating-point wars, chapter 4):
+implemented Ershov's algorithm to minimize floating-point stack usage;
+out-of-order pops fixed.
+
+* Several bug fixes in callbacks and signals.
+
+Caml Special Light 1.13:
+------------------------
+
+* Pattern-matching compilation revised to factor out accesses inside
+matched structures.
+
+* Callbacks and signals now supported in cslopt.
+Signals are only detected at allocation points, though.
+Added callback functions with 2 and 3 arguments.
+
+* More explicit error messages when a native-code program aborts due
+to array or string bound violations.
+
+* In patterns, "C _" allowed even if the constructor C has several arguments.
+
+* && and || allowed as alternate syntax for & and or.
+
+* cslopt for the Intel: code generation for floating-point
+operations entirely redone for the third time (a pox on whomever at
+Intel decided to organize the floating-point registers as a stack).
+
+* cslopt for the Sparc: don't use Sparc V8 smul and sdiv instructions,
+emulation on V7 processors is abysmal.
+
+Caml Special Light 1.12:
+------------------------
+
+* Fixed an embarrassing bug with references to floats.
+
+Caml Special Light 1.11:
+------------------------
+
+* Streams and stream parsers a la Caml Light are back (thanks to
+Daniel de Rauglaudre).
+
+* User-level concurrent threads, with low-level shared memory primitives
+(locks and conditions) as well as channel-based communication primitives
+with first-class synchronous events, in the style of Reppy's CML.
+
+* The native-code compiler has been ported to the HP PA-RISC processor
+running under NextStep (sorry, no HPUX, its linker keeps dumping
+core on me).
+
+* References not captured in a function are optimized into variables.
+
+* Fixed several bugs related to exceptions.
+
+* Floats behave a little more as specified in the IEEE standard
+(believe it or not, but x < y is not the negation of x >= y).
+
+* Lower memory consumption for the native-code compiler.
+
+Caml Special Light 1.10:
+------------------------
+
+* Many bug fixes (too many to list here).
+
+* Module language: introduction of a "with module" notation over
+signatures for concise sharing of all type components of a signature;
+better support for concrete types in signatures.
+
+* Native-code compiler: the Intel 386 version has been ported to
+NextStep and FreeBSD, and generates better code (especially for
+floats)
+
+* Tools and libraries: the Caml Light profiler and library for
+arbitrary-precision arithmetic have been ported (thanks to John
+Malecki and Victor Manuel Gulias Fernandez); better docs for the Unix
+and regexp libraries.
+
+Caml Special Light 1.07:
+------------------------
+
+* Syntax: optional ;; allowed in compilation units and structures
+(back by popular demand)
+
+* cslopt:
+generic handling of float arrays fixed
+direct function application when the function expr is not a path fixed
+compilation of "let rec" over values fixed
+multiple definitions of a value name in a module correctly handled
+no calls to ranlib in Solaris
+
+* csltop: #trace now working
+
+* Standard library: added List.memq; documentation of Array fixed.
+
+Caml Special Light 1.06:
+------------------------
+
+* First public release.
+
+$Id$