diff options
Diffstat (limited to 'Changes')
| -rw-r--r-- | Changes | 1657 |
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. |
