1580 lines
63 KiB
Plaintext
1580 lines
63 KiB
Plaintext
Language features:
|
||
- Introduction of a new kind of data types: the concrete data types
|
||
with private constructors or labels, private types for short.
|
||
Private types are intended to modelize non free algebraic types that
|
||
must verify semantic relations that were not enforceable in
|
||
previously available Caml data types.
|
||
Values from private types can be freely used in pattern matching but
|
||
the creation of values for private types is reserved to special
|
||
purpose functions provided in the module implementation where the
|
||
private type definition occurs.
|
||
That way, the construction functions can enforce any required invariant for
|
||
the datatype. Private types are semi-concrete (since they allow
|
||
pattern matching as concrete types do) and semi-abstract (since they
|
||
forbid direct construction of values as abstract types do).
|
||
- 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
|
||
- 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 *.types, 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 (only the types computed up to the error are available).
|
||
|
||
Both compilers:
|
||
- Added option "-dtypes" to dump detailed type information to a file.
|
||
- The sources for a module, say "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 ...
|
||
|
||
Native-code compiler:
|
||
- Fixed bug in ocamlopt -pack related to tracking of imported modules.
|
||
- x86 port:
|
||
Added -ffast-math option to use inline trigo and log functions.
|
||
Small performance enhancements on float arithmetic.
|
||
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).
|
||
|
||
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.
|
||
|
||
Libraries:
|
||
- Match_failure and Assert_failure exceptions now report
|
||
(file, line, column), instead of (file, starting char, ending char).
|
||
- Module Arg: added Set_*, Symbol.
|
||
- Module Scanf: %n and %N formats to count characters / items read so far;
|
||
assorted bug fixes.
|
||
- Module Random: better seeding; added functions for serious use.
|
||
|
||
Runtime system:
|
||
- output_value/input_value: fixed bug with large blocks (>= 4 Mwords)
|
||
output on a 64-bit platform and incorrectly read back on a 32-bit
|
||
platform.
|
||
|
||
The Dynlink library:
|
||
- By default, dynamically-loaded code now has access to all
|
||
modules defined by the program; new functions Dynlink.allow_only
|
||
and Dynlink.prohibit for access control.
|
||
- Fixed Dynlink problem with files generated with ocamlc -pack.
|
||
|
||
The Str library:
|
||
- Reimplemented regexp matching engine, now less buggy, faster, and LGPL
|
||
instead of GPL.
|
||
|
||
Emacs mode:
|
||
- Added file caml-types.el to interactively display the type information
|
||
saved by option -dtypes.
|
||
|
||
OCamldoc:
|
||
- new ty_code field for types, to keep code of type (with option -keep-code)
|
||
|
||
|
||
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<61>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.
|