ocaml/Changes

635 lines
24 KiB
Plaintext

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.