summaryrefslogtreecommitdiff
path: root/Changes
diff options
context:
space:
mode:
Diffstat (limited to 'Changes')
-rw-r--r--Changes1657
1 files changed, 0 insertions, 1657 deletions
diff --git a/Changes b/Changes
deleted file mode 100644
index b0cb25c666..0000000000
--- a/Changes
+++ /dev/null
@@ -1,1657 +0,0 @@
-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 overriden" warning when the method was explicitely
- 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.