4683 lines
210 KiB
Plaintext
4683 lines
210 KiB
Plaintext
OCaml 4.03.0:
|
|
-------------
|
|
|
|
(Changes that can break existing programs are marked with a "*")
|
|
|
|
Language features:
|
|
- PR#5528: inline records for constructor arguments (Alain Frisch)
|
|
- PR#6220, PR#6403, PR#6437, PR#6801:
|
|
Improved redundancy and exhaustiveness checks for GADTs.
|
|
Namely, the redundancy checker now checks whether the uncovered pattern
|
|
of the pattern is actually inhabited, exploding at most one wild card.
|
|
This is also done for exhaustiveness when there is only one case.
|
|
Additionnally, one can now write unreachable cases, of the form,
|
|
"pat -> .", which are treated by the redundancy check. (Jacques Garrigue)
|
|
- PR#6374: allow "_ t" as a short-hand for "(_, _, ..) t" for n-ary type
|
|
constructors (Alain Frisch)
|
|
- PR#6714: allow [@@ocaml.warning] on most structure and signature items:
|
|
values, modules, module types
|
|
(whitequark)
|
|
- GPR#26: support for "(type a b)" as syntactic sugar for "(type a) (type b)"
|
|
(Gabriel Scherer)
|
|
- GPR#42: short functor type syntax: "S -> T" for "functor (_ : S) -> T"
|
|
(Leo White)
|
|
- GPR#88: allow field punning in object copying expressions:
|
|
{< x; y; >} is sugar for {< x = x; y = y; >}
|
|
(Jeremy Yallop)
|
|
- GPR#167: allow to annotate externals' arguments and result types so
|
|
they can be unboxed or untagged. Supports untagging int and unboxing
|
|
int32, int64, nativeint and float.
|
|
(Jérémie Dimino, Mark Shinwell)
|
|
- GPR240: replace special annotations on externals by attributes:
|
|
* "float" is generalized to [@@unboxed]
|
|
* "noalloc" becomes [@@noalloc]
|
|
Deprecate "float" and "noalloc".
|
|
(Jérémie Dimino)
|
|
- GPR#254: @ocaml.warn_on_literal_pattern attribute on constructors to
|
|
warn when the argument is matches against a constant pattern. This
|
|
attribute is applied on predefined exception constructors which
|
|
take an purely informational (with no stability guarantee) message.
|
|
(Alain Frisch)
|
|
- GPR#268: hexadecimal notation for floating-point literals
|
|
In OCaml source code, FP literals can be written using the hexadecimal
|
|
notation 0x<mantissa in hex>p<exponent> from ISO C99.
|
|
(Xavier Leroy)
|
|
- GPR#173: [@inline] and [@inlined] attributes (for function declarations
|
|
and call sites respectively) to control inlining
|
|
(Pierre Chambart, Mark Shinwell)
|
|
- PR#6806: Syntax shortcut for putting a type annotation on a record field
|
|
(Valentin Gatien-Baron, review by Jérémie Dimino)
|
|
- PR#6806: Allow type annotations before the "->" in "fun <args> -> <expr>"
|
|
(Valentin Gatien-Baron, review by Jérémie Dimino)
|
|
- GPR#282: change short-paths penalty heuristic to assign the same cost to
|
|
idents containing double underscores as to idents starting with an underscore
|
|
(Thomas Refis, Leo White)
|
|
- GPR#273: allow to get the extension slot of an extension constructor
|
|
by writing [%extension_constructor <path>]
|
|
(Jérémie Dimino)
|
|
- PR#6681 GPR#326: signature items are now accepted as payloads for
|
|
extension and attributes, using the syntax [%foo: SIG ] or [@foo: SIG ].
|
|
(Alain Frisch and Gabriel Radanne)
|
|
|
|
Compilers:
|
|
- PR#4080, PR#6537, PR#5333: fix stack overflow in the compiler when -pack'ing a module
|
|
that includes a module of the same name (Alain Frisch)
|
|
- PR#4800: better compilation of tuple assignment (Gabriel Scherer and
|
|
Alain Frisch)
|
|
- PR#5995: keep -for-pack into account to name exceptions; document -for-pack
|
|
as mandatory for bytecode as well (Alain Frisch, report by Christophe
|
|
Troestler)
|
|
- PR#6400: better error message for '_' used as an expression
|
|
(Alain Frisch, report by whitequark)
|
|
- PR#6501: harden the native-code generator against certain uses of "%identity"
|
|
(Xavier Leroy, report by Antoine Miné).
|
|
- PR#6636: add --version option
|
|
(whitequark)
|
|
- improve type-specialization of unapplied primitives
|
|
(Frédéric Bour, review by Gabriel Scherer)
|
|
- PR#6737: fix Typedtree attributes on (fun x -> body) expressions
|
|
- PR#6679: fix pprintast printing of constraints in type declarations
|
|
- PR#6845: -no-check-prims to tell ocamlc not to check primitives in runtime
|
|
* PR#6865: remove special case for parsing "let _ = expr" in structures
|
|
(Jérémie Dimino, Alain Frisch)
|
|
* PR#6438: Pattern guard disables exhaustiveness check
|
|
(Alain Frisch)
|
|
- PR#6939: Segfault with improper use of let-rec (Alain Frisch)
|
|
- PR#6943: native-code generator for POWER/PowerPC 64 bits, both in
|
|
big-endian (ppc64) and little-endian (ppc64le) configuration.
|
|
(Xavier Leroy, with inspiration from RedHat's unofficial ppc64 and ppc64le
|
|
ports)
|
|
- PR#6979: better code generation in x86-32 backend for copying floats to
|
|
the stack (Marc Lasson, review by Xavier Leroy)
|
|
- PR#7018: fix missing identifier renaming during inlining (Alain Frisch,
|
|
review by Xavier Leroy)
|
|
- PR#7026, GPR#288: remove write barrier for polymorphic variants without arguments
|
|
(Simon Cruanes)
|
|
- PR#7031: new warning, ambiguous guarded or-patterns (Luc Maranget,
|
|
Gabriel Scherer, report by Martin Clochard and Claude Marché).
|
|
- PR#7067: Performance regression in the native compiler for long
|
|
nested structures (Alain Frisch, report by Daniel Bünzli, review
|
|
by Jacques Garrigue)
|
|
- GPR#17: some cmm optimizations of integer operations with constants
|
|
(Stephen Dolan, review by Pierre Chambart)
|
|
- GPR#109: new unboxing strategy for float and int references (Vladimir Brankov,
|
|
review by Alain Frisch)
|
|
- GPR#107: Prevent more unnecessary float boxing, especially in `if` and `match`
|
|
(Vladimir Brankov, review by Alain Frisch)
|
|
- GPR#115: More precise typing of values at the C-- and Mach level,.
|
|
(Xavier Leroy, review by Pierre Chambart)
|
|
- GPR#207: Colors in compiler messages (warnings, errors)
|
|
(Simon Cruanes, review by Gabriel Scherer)
|
|
- GPR#258: more precise information on PowerPC instruction sizes
|
|
(Pierre Chambart, Xavier Leroy)
|
|
- PR#7022, GPR#259: unbox float and boxed ints earlier, avoid second pass
|
|
(Alain Frisch)
|
|
- PR#7064, GPR#316: allowing to mark compilation units and sub-modules as
|
|
deprecated (Alain Frisch)
|
|
- GPR#263: improve code generation for if-equivalents of (&&) and (||)
|
|
(Pierre Chambart)
|
|
- GPR#271: Fix incorrect mutability flag when records are built using "with"
|
|
(Mark Shinwell)
|
|
- GPR#270: Make [transl_exception_constructor] generate [Immutable] blocks
|
|
(Mark Shinwell)
|
|
- GPR#275: native-code generator for IBM z System running Linux.
|
|
In memoriam Gene Amdahl, 1922-2015.
|
|
(Bill O'Farrell, Tristan Amini, Xavier Leroy)
|
|
- GPR#282: relax short-paths safety check in presence of module aliases, take
|
|
penalty into account while building the printing map.
|
|
(Thomas Refis, Leo White)
|
|
- PR#6920: fix debug informations around uses of %apply or %revapply
|
|
(Jérémie Dimino)
|
|
|
|
Runtime system:
|
|
- PR#3612: allow allocating custom block with finalizers in the minor heap
|
|
(Pierre Chambart)
|
|
- PR#6517: use ISO C99 types {,u}int{32,64}_t in preference to our homegrown
|
|
types {,u}int{32,64}.
|
|
(Xavier Leroy)
|
|
- PR#6760: closures evaluated in the toplevel can now be marshalled
|
|
(whitequark, review by Jacques-Henri Jourdan)
|
|
- PR#6902, GPR#210: runtime emits a warning when finalizing an I/O channel
|
|
which is still open (Alain Frisch, review by Damien Doligez);
|
|
this is controlled by OCAMLRUNPARAM=W=1 or with Sys.enable_runtime_warnings.
|
|
- Signal handling: for read-and-clear, use GCC/Clang atomic builtins
|
|
if available. (Xavier Leroy)
|
|
- PR#6910, GPR#224: marshaling (output_value, input_value, et al)
|
|
now support marshaled data bigger than 4 Gb. (Xavier Leroy)
|
|
- GPR#226: select higher levels of optimization for GCC and Clang when
|
|
compiling the run-time system and C stub code. (Xavier Leroy)
|
|
- GPR#262: Multiple GC roots per compilation unit (Pierre Chambart, Mark
|
|
Shinwell, review by Damien Doligez)
|
|
- GPR#325: Add v=0x400 flag to OCAMLRUNPARAM to display GC stats on exit (Louis
|
|
Gesbert, review by Alain Frisch)
|
|
|
|
Standard library:
|
|
- PR#5197, GPR#63: Arg: allow flags such as --flag=arg as well as --flag arg
|
|
(Richard Jones)
|
|
- PR#6017, PR#7034, GPR#267: More efficient ifprintf implementation
|
|
(Jeremy Yallop, review by Gabriel Scherer)
|
|
- PR#6296: Some documentation on the floating-point representations
|
|
recognized by Pervasives.float_of_string
|
|
(Xavier Leroy)
|
|
- PR#6316: Scanf.scanf failure on %u formats when reading big integers
|
|
(Xavier Leroy, Benoît Vaugon)
|
|
- PR#6321: guarantee that "hypot infinity nan = infinity"
|
|
(for conformance with ISO C99) (Xavier Leroy)
|
|
- PR#6390, GPR#36: expose Sys.{int_size,max_wosize} for improved js_of_ocaml
|
|
portability (Hugo Heuzard)
|
|
* PR#6494: Add equal function in modules
|
|
Bytes, Char, Digest, Int32, Int64, Nativeint, and String
|
|
(Romain Calascibetta)
|
|
* PR#6524, GPR#79: Filename: Optional ?perms argument to open_temp_file
|
|
(Daniel Bünzli, review by Jacques-Pascal Deplaix)
|
|
- PR#6577: improve performance of %L, %l, %n, %S, %C format specifiers
|
|
(Alain Frisch)
|
|
- PR#6585: fix memory leak in win32unix/createprocess.c
|
|
- PR#6649, GPR#222: accept (int_of_string "+3")
|
|
(Christopher McAlpine)
|
|
- PR#6645, GPR#174: Guarantee that Set.add, Set.remove, Set.filter
|
|
return the original set if no change is required (Alain Frisch,
|
|
Mohamed Iguernlala)
|
|
- GPR#175: Guarantee that Map.add, Map.remove, Map.filter
|
|
return the original map if no change is required.
|
|
(Mohamed Iguernlala)
|
|
- PR#6694, PR#6695: deprecate functions using ISO-8859-1 character set
|
|
in Char, Bytes, String and provide alternatives using US-ASCII.
|
|
(whitequark)
|
|
- GPR#164: more efficient (branchless) implementation of Pervasives.compare
|
|
specialized at type 'float'.
|
|
(Vladimir Brankov)
|
|
- GPR#201: generalize types of Printf.{ifprintf,ikfprintf}
|
|
(Maxence Guesdon)
|
|
- GPR#216: add the missing POSIX.1-2001 signals in Sys
|
|
(Guillaume Bury)
|
|
- GPR#239: remove type-unsafe code from Stream
|
|
(Pierre Chambart, review by Gabriel Scherer and Jeremy Yallop)
|
|
- GPR#250: Check for negative start element in Array.sub
|
|
(report and fix by Jeremy Yallop)
|
|
- GPR#265: new implementation of Queue avoiding Obj.magic
|
|
(Jérémie Dimino)
|
|
- GPR#268, GPR#303: '%h' and '%H' modifiers for printf and scanf to
|
|
support floating-point numbers in hexadecimal notation
|
|
(Xavier Leroy, Benoît Vaugon)
|
|
- GPR#272: Switch classify_float to [@@unboxed] (Alain Frisch)
|
|
- Improve speed of classify_float by not going through fpclassify()
|
|
(Alain Frisch, Xavier Leroy)
|
|
- GPR#277: Switch the following externals to [@@unboxed]:
|
|
* {Nativeint,Int32,Int64}.{of,to}_float
|
|
* Int{32,64}.float_of_bits
|
|
* Int{32,64}.bits_of_float
|
|
(Jérémie Dimino)
|
|
- GPR#281: Switch the following externals to [@@unboxed]:
|
|
* Sys.time (and [@@noalloc])
|
|
* Pervasives.ldexp (and [@@noalloc])
|
|
* Pervasives.compare for float, nativeint, int32, int64.
|
|
(Bobot François)
|
|
- GPR#329: Add exists, for_all, mem and memq functions in Array
|
|
(Bernhard Schommer)
|
|
|
|
Type system:
|
|
- PR#5545: Type annotations on methods cannot control the choice of abbreviation
|
|
* PR#6465: allow incremental weakening of module aliases (Jacques Garrigue).
|
|
This is done by adding equations to submodules when expanding aliases.
|
|
In theory this may be incompatible is some corner cases defining a module
|
|
type through inference, but no breakage known on published code.
|
|
- PR#6593: Functor application in tests/basic-modules fails after commit 15405
|
|
|
|
Toplevel and debugger:
|
|
- PR#6396: Warnings-as-errors not properly flushed in the toplevel
|
|
(Alain Frisch)
|
|
- PR#6468: toplevel now supports backtraces if invoked with OCAMLRUNPARAM=b
|
|
(whitequark and Jake Donham,
|
|
review by Gabriel Scherer and Jacques-Henri Jourdan)
|
|
- PR#6935, GPR#298: crash in debugger when load_printer is given a directory
|
|
(Junsong Li, review by Gabriel Scherer)
|
|
- PR#6401: use proper error reporting for toplevel's environment
|
|
initialization (Gabriel Scherer)
|
|
- PR#7081: report preprocessor warnings in the toplevel
|
|
(Valentin Gatien-Baron, review by Jérémie Dimino)
|
|
- PR#7098: Loss of ppx context in toplevel after an exception
|
|
(Alain Frisch, report by whitequark)
|
|
|
|
Other libraries:
|
|
* Unix library: channels created by Unix.in_channel_of_descr or
|
|
Unix.out_channel_of_descr no longer support text mode under Windows.
|
|
Calling [set_binary_mode_{in,out} chan false] on these channels
|
|
now causes an error.
|
|
- PR#4023 and GPR#68: add Unix.sleepf (sleep with sub-second resolution)
|
|
(Evgenii Lepikhin and Xavier Leroy)
|
|
* Protect Unix.sleep against interruptions by handled signals.
|
|
Before, a handled signal could cause Unix.sleep to return early.
|
|
Now, the sleep is restarted until the given time is elapsed.
|
|
(Xavier Leroy)
|
|
- PR#6289: Unix.utimes uses the current time only if both arguments
|
|
are exactly 0.0. Also, use sub-second resolution if available.
|
|
(Xavier Leroy, report by Christophe Troestler)
|
|
- PR#6896: serious reimplementation of Big_int.float_of_big_int and
|
|
Ratio.float_of_ratio, ensuring that the result is correctly rounded.
|
|
(Xavier Leroy)
|
|
- PR#6989: in Str library, make sure that all \(...\) groups are binding
|
|
and can be consulted with Str.matched_group. There used to be
|
|
a limitation to 32 binding groups.
|
|
(Xavier Leroy)
|
|
- PR#7013: spurious wake-up in the Event module
|
|
(Xavier Leroy)
|
|
- PR#7024: in documentation of Str regular expressions, clarify what
|
|
"end of line" means for "^" and "$" regexps.
|
|
|
|
OCamlbuild:
|
|
- PR#6794, PR#6809: pass package-specific include flags when building C files
|
|
(Jérémie Dimino, request by whitequark)
|
|
- GPR#208: add "asm" tag to ocamlbuild to enable flag -S
|
|
(ygrek)
|
|
- Changed OCamlbuild's license to LGPLv2 with static linking exception.
|
|
- GPR#219: speedup target-already-built builds
|
|
(ygrek)
|
|
- PR#6605, GPR#117: use ocamlfind, if available, to discover camlp4 path
|
|
(Vincent Laporte)
|
|
|
|
OCamldep:
|
|
- GRP#286: add support for module aliases
|
|
(jacques Garrigue)
|
|
|
|
Manual:
|
|
- GPR#302: The OCaml reference manual is now included in the manual/
|
|
subdirectory of the main OCaml source repository. Contributions to
|
|
the manual are warmly welcome.
|
|
(François Bobot, review by Florian Angeletti)
|
|
|
|
Bug fixes:
|
|
- PR#3612: memory leak in bigarray read from file
|
|
(Pierre Chambart, report by Gary Huber)
|
|
* PR#4166, PR#6956: force linking when calling external C primitives
|
|
(Jacques Garrigue, reports by Markus Mottl and Christophe Troestler)
|
|
* PR#4466, PR#5325: under Windows, concurrent read and write operations
|
|
on the same socket could block unexpectedly. Fixed by keeping sockets
|
|
in asynchronous mode rather than creating them in synchronous mode.
|
|
(Xavier Leroy)
|
|
* PR#4539: change exception string raised when comparing functional values
|
|
(Nicolas Braud-Santoni, report by Eric Cooper)
|
|
- PR#4832: Filling bigarrays may block out runtime
|
|
(Markus Mottl)
|
|
- PR#5663: program rejected due to nongeneralizable type variable that
|
|
appears nowhere
|
|
(Jacques Garrigue, report by Stephen Weeks)
|
|
- PR#5780: Strange type variable names in error messages (GADTs)
|
|
(only made the names more informative)
|
|
(Jacques Garrigue, report by Sebastien Furic)
|
|
- PR#5887: move the byterun/*.h headers to byterun/caml/*.h to avoid header
|
|
name clashes
|
|
(Jérôme Vouillon and Adrien Nader and whitequark)
|
|
* PR#6081: ocaml should add script's directory to search path, not current
|
|
directory
|
|
(Thomas Leonard and Damien Doligez)
|
|
- PR#6108, PR#6802: fail cleanly if dynlink.cma or ocamltoplevel.cma
|
|
are loaded inside the toplevel loop.
|
|
(Xavier Leroy)
|
|
- PR#6171: Error message confusing when a type escapes its scope.
|
|
- PR#6340: Incorrect handling of \r when processing "Windows" source files
|
|
(Damien Doligez, report by David Allsopp)
|
|
- PR#6342: Incorrect error message when type constraints differ
|
|
(Alain Frisch, report by Philippe Wang)
|
|
* PR#6521: {Bytes,Char,String}.escaped are locale-dependent
|
|
(Damien Doligez, report by Jun Furuse)
|
|
- PR#6526: ocamllex warning: unescaped newline in comment string
|
|
(Damien Doligez, report by user 'dhekir')
|
|
- PR#6341: ocamldoc -colorize-code adds spurious <br> tags to <pre> blocks
|
|
- PR#6560: Wrong failure message for {Int32,Int64,NativeInt}.of_string
|
|
(Maxime Dénès and Gabriel Scherer)
|
|
- PR#6648: show_module should indicate its elision
|
|
- PR#6650: Cty_constr not handled correctly by Subst
|
|
- PR#6651: Failing component lookup
|
|
* PR#6664: Crash when finalising lazy values of the wrong type.
|
|
(Damien Doligez)
|
|
- PR#6672: Unused variance specification allowed in with constraint
|
|
- PR#6744: Univars can escape through polymorphic variants (partial fix)
|
|
- PR#6752: Extensible variant types and scope escaping
|
|
- PR#6762: improve warning 45 in presence of re-exported type definitions
|
|
(Alain Frisch, report by Olivier Andrieu)
|
|
- PR#6776: Failure to kill the "tick" thread, segfault when exiting the runtime
|
|
- PR#6780: Poor error message for wrong -farch and -ffpu options (ocamlopt, ARM)
|
|
- PR#6805: Duplicated expression in case of hole in a non-failing switch.
|
|
(Luc Maranget)
|
|
- PR#6808: the parsing of OCAMLRUNPARAM is too lax
|
|
(Damien Doligez)
|
|
- PR#6874: Inefficient code generated for module function arguments
|
|
- PR#6897: Bad error message for some pattern matching on extensible variants
|
|
- PR#6899: Optional parameters and non generalizable type variables
|
|
(Thomas Refis and Leo White)
|
|
- PR#6907: Stack overflow printing error in class declaration
|
|
- PR#6931: Incorrect error message
|
|
- PR#6938: fix regression on "%047.27{l,L,n}{d,i,x,X,o,u}"
|
|
(Benoît Vaugon, report by Arduino Cascella)
|
|
- PR#6944: let module X = Path in … is not typed as a module alias
|
|
(Jacques Garrigue, report by def)
|
|
- PR#6945 and GPR#227: protect Sys and Unix functions against string
|
|
arguments containing the null character '\000'
|
|
(c-cube and Xavier Leroy, report by Daniel Bünzli)
|
|
- PR#6946: Uncaught exception with wrong type for "%ignore"
|
|
- PR#6954: Infinite loop in type checker with module aliases
|
|
- PR#6972, GPR#276: 4.02.3 regression on documentation comments in .cmt files
|
|
(Leo White, report by Olivier Andrieu)
|
|
- PR#6980: Assert failure from polymorphic variants and existentials
|
|
- PR#6981: Ctype.Unify(_) with associated functor arg refering to previous one
|
|
- PR#6982: unexpected type error when packing a module alias
|
|
- PR#6985: `module type of struct include Bar end exposes
|
|
%s#row when Bar contains private row types
|
|
- PR#6992: Segfault from bug in GADT/module typing
|
|
- PR#6993: Segfault from recursive modules violating exhaustiveness assumptions
|
|
- PR#6998: Typer fails reading unnecessary cmis with -no-alias-deps and -w -49
|
|
(Leo White, report by Valentin Gatien-Baron)
|
|
- PR#7003: String.sub causes segmentation fault
|
|
(Damien Doligez, report by Radek Micek)
|
|
- PR#7008: Fatal error in ocamlc with empty compilation unit name
|
|
(Damien Doligez, report by Cesar Kunz)
|
|
- PR#7012: Variable name forgotten when it starts with a capital letter
|
|
(Jacques Garrigue, Gabriel Scherer,
|
|
report by Thomas Leonard and Florian Angeletti)
|
|
- PR#7016: Stack overflow in GADT typing
|
|
- PR#7030: libasmrun_shared.so fails to build on SPARC Solaris
|
|
(report and fix by Patrick Star)
|
|
- PR#7036: Module alias is not taken into account when checking module
|
|
type compatibility (in a class type) (Jacques Garrigue)
|
|
- PR#7037: more reproducible builds, don't put temp file names into objects
|
|
(Xavier Leroy)
|
|
- PR#7038: out of memory condition in caml_io_mutex_lock
|
|
(Xavier Leroy, report by Marc Lasson)
|
|
- PR#7039: Unix.getsockname returns garbage for unnamed PF_UNIX sockets
|
|
(Xavier Leroy)
|
|
- PR#7042 and GPR#295: CSE optimization confuses the FP literals +0.0 and -0.0
|
|
(Xavier Leroy)
|
|
- PR#7082: Object type in recursive module's `with` annotation
|
|
- PR#7096: ocamldoc uses an incorrect subscript/superscript style
|
|
- GPR#205: Clear caml_backtrace_last_exn before registering as root
|
|
(report and fix by Frederic Bour)
|
|
- GPR#220: minor -dsource error on recursive modules
|
|
(Hongbo Zhang)
|
|
- GPR#228: fix a dangling internal pointer in (bytecode )debug_info
|
|
(Gabriel Scherer and Mark Shinwell and Xavier Leroy)
|
|
- GPR#233: Make CamlinternalMod.init_mod robust to optimization
|
|
(Pierre Chambart, Mark Shinwell)
|
|
- GPR#249: fix a few hardcoded ar commands
|
|
(Daniel Bünzli)
|
|
- GPR#251: fix cross-compilation with ocamldoc enabled
|
|
(whitequark)
|
|
- GPR#280: Fix stdlib dependencies for .p.cmx (Pierre Chambart,
|
|
Mark Shinwell)
|
|
- GPR#283: Fix memory leaks in intern.c when OOM is raised
|
|
(Marc Lasson, review by Alain Frisch)
|
|
- GPR#313: Prevent quadratic cases in CSE
|
|
(Pierre Chambart, review by Xavier Leroy)
|
|
- PR#6795, PR#6996: Make ocamldep report errors passed in
|
|
[%ocaml.error] extension points
|
|
(Jérémie Dimino)
|
|
|
|
Features wishes:
|
|
- PR#4518, GPR#29: change location format for reporting errors in ocamldoc
|
|
(Sergei Lebedev)
|
|
- PR#4714: List.cons
|
|
- PR#5418 (comments) : generate dependencies with $(CC) instead of gcc
|
|
- PR#6167: OCAMLPARAM support for disabling PIC generation ("pic=0")
|
|
(Gabor Pali)
|
|
- PR#6367: introduce Asttypes.arg_label to encode labelled arguments
|
|
- PR#6452, GPR#140: add internal suport for custom printing formats
|
|
(Jérémie Dimino)
|
|
- PR#6611: remove the option wrapper on optional arguments in the syntax tree
|
|
- PR#6635: support M.[], M.(), M.{< >} and M.[| |]
|
|
(Jeremy Yallop, review by Gabriel Radanne)
|
|
- PR#6691: install .cmt[i] files for stdlib and compiler-libs
|
|
(David Sheets, request by Gabriel Radanne)
|
|
- PR#6722: compatibility with x32 architecture (x86-64 in ILP32 mode).
|
|
ocamlopt is not supported, but bytecode compiles cleanly.
|
|
- PR#6742: remove duplicate virtual_flag information from Tstr_class
|
|
- PR#6719: improve Buffer.add_channel when not enough input is available
|
|
(Simon Cruanes)
|
|
* PR#6816: reject integer and float literals directly followed by an identifier.
|
|
This was prevously read as two separate tokens.
|
|
[let abc = 1 in (+) 123abc] was accepted and is now rejected.
|
|
(Hugo Heuzard)
|
|
- PR#6876: improve warning 6 by listing the omitted labels.
|
|
(Eyyüb Sari)
|
|
- PR#6924: tiny optim to avoid some spilling of floats in x87
|
|
(Alain Frisch)
|
|
- GPR#111: `(f [@taillcall]) x y` warns if `f x y` is not a tail-call
|
|
(Simon Cruanes)
|
|
- GPR#118: ocamldep -allow-approx: fallback to a lexer-based approximation
|
|
(Frédéric Bour)
|
|
- GPR#137: add untypeast.ml (in open recursion style) to compiler-libs
|
|
(Gabriel Radanne)
|
|
- GPR#142: add a CAMLdrop macro for undoing CAMLparam*/CAMLlocal*
|
|
- GPR#145: speeedup bigarray access by optimizing Cmmgen.bigarray_indexing
|
|
(Vladimir Brankov, review by Gabriel Scherer)
|
|
- GPR#147: [type 'a result = Ok of 'a | Error of 'b] in Pervasives
|
|
(Yaron Minsky)
|
|
- GPR#156, GPR#279: optimize caml_frame_descriptors realloc (dynlink speedup)
|
|
(Pierre Chambart, Alain Frisch,
|
|
review by François Bobot, Xavier Leroy and Damien Doligez)
|
|
- GPR#191: Making gc.h and some part of memory.h public
|
|
(Thomas Refis)
|
|
- GPR#196: Make [Thread.id] and [Thread.self] [noalloc]
|
|
(Clark Gaebel)
|
|
- GPR#165, GPR#221: fix windows compilation warnings
|
|
(Bernhard Schommer, Gabriel Scherer, report by Alain Frisch)
|
|
- GPR#189: Added .dylib and .so as extensions for ocamlmklib
|
|
(Edgar Aroutiounian, whitequark)
|
|
- GPR#237: a CONTRIBUTING document
|
|
(François Bobot, Gabriel Scherer, review by Xavier Leroy)
|
|
- GPR#245: remove a few remaining French comments
|
|
(Florian Angeletti)
|
|
- GPR#252: improve build instructions in MSVC Windows README
|
|
(Philip Daian)
|
|
* GPR#170: Parse arbitrary precision integers.
|
|
Accept a single [A-Za-z] as modifier for integers (generalizing 'l','L','n') and floats.
|
|
May cause breakage (ie. ppx preprocessor) because of changes in the parsetree.
|
|
This changes PR#6816 a little bit by reading the literal [123a] as a single token that can
|
|
later be rewritten by a ppx preprocessor.
|
|
(Hugo Heuzard)
|
|
- GPR#308: add experimental support for NetBSD/arm (verified on RaspberryPi)
|
|
(Rich Neswold)
|
|
|
|
OCaml 4.02.3 (27 Jul 2015):
|
|
---------------------------
|
|
|
|
Bug fixes:
|
|
- PR#6908: Top-level custom printing for GADTs: interface change in 4.02.2
|
|
(Grégoire Henry, report by Jeremy Yallop)
|
|
- PR#6919: corrupted final_table
|
|
(ygrek)
|
|
- PR#6926: Regression: ocamldoc lost unattached comment
|
|
(Damien Doligez, report by François Bobot)
|
|
- PR#6930: Aliased result type of GADT constructor results in assertion failure
|
|
(Jacques Garrigue)
|
|
|
|
Feature wishes:
|
|
- PR#6691: install .cmt[i] files for stdlib and compiler-libs
|
|
(David Sheets, request by Gabriel Radanne)
|
|
- GPR#37: New primitive: caml_alloc_dummy_function
|
|
(Hugo Heuzard)
|
|
|
|
OCaml 4.02.2 (17 Jun 2015):
|
|
---------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*")
|
|
|
|
Language features:
|
|
- PR#6583: add a new class of binary operators with the same syntactic
|
|
precedence as method calls; these operators start with # followed
|
|
by a non-empty sequence of operator symbols (for instance #+, #!?).
|
|
It is also possible to use '#' as part of these extra symbols
|
|
(for instance ##, or #+#); this is rejected by the type-checker,
|
|
but can be used e.g. by ppx rewriters.
|
|
(Alain Frisch, request by Gabriel Radanne)
|
|
* PR#6016: add a "nonrec" keyword for type declarations
|
|
(Jérémie Dimino)
|
|
|
|
Compilers:
|
|
- PR#6600: make -short-paths faster by building the printing map
|
|
incrementally
|
|
(Jacques Garrigue)
|
|
- PR#6642: replace $CAMLORIGIN in -ccopt with the path to cma or cmxa
|
|
(whitequark, Gabriel Scherer, review by Damien Doligez)
|
|
- PR#6797: new option -output-complete-obj
|
|
to output an object file with included runtime and autolink libraries
|
|
(whitequark)
|
|
- PR#6845: -no-check-prims to tell ocamlc not to check primitives in runtime
|
|
(Alain Frisch)
|
|
- GPR#149: Attach documentation comments to parse tree
|
|
(Leo White)
|
|
- GPR#159: Better locations for structure/signature items
|
|
(Leo White)
|
|
|
|
Toplevel and debugger:
|
|
- PR#5958: generalized polymorphic #install_printer
|
|
(Pierre Chambart and Grégoire Henry)
|
|
|
|
OCamlbuild:
|
|
- PR#6237: explicit "infer" tag to control or disable menhir --infer
|
|
(Hugo Heuzard)
|
|
- PR#6625: pass -linkpkg to files built with -output-obj.
|
|
(whitequark)
|
|
- PR#6702: explicit "linkpkg" and "dontlink(foo)" flags
|
|
(whitequark, Gabriel Scherer)
|
|
- PR#6712: Ignore common VCS directories
|
|
(whitequark)
|
|
- PR#6720: pass -g to C compilers when tag 'debug' is set
|
|
(whitequark, Gabriel Scherer)
|
|
- PR#6733: add .byte.so and .native.so targets to pass
|
|
-output-obj -cclib -shared.
|
|
(whitequark)
|
|
- PR#6733: "runtime_variant(X)" to pass -runtime-variant X option.
|
|
(whitequark)
|
|
- PR#6774: new menhir-specific flags "only_tokens" and "external_tokens(Foo)"
|
|
(François Pottier)
|
|
|
|
Libraries:
|
|
- PR#6285: Add support for nanosecond precision in Unix.stat()
|
|
(Jérémie Dimino, report by user 'gfxmonk')
|
|
- PR#6781: Add higher baud rates to Unix termios
|
|
(Damien Doligez, report by Berke Durak)
|
|
- PR#6834: Add Obj.{first,last}_non_constant_constructor_tag
|
|
(Mark Shinwell, request by Gabriel Scherer)
|
|
|
|
Runtime:
|
|
- PR#6078: Release the runtime system when calling caml_dlopen
|
|
(Jérémie Dimino)
|
|
- PR#6675: GC hooks
|
|
(Damien Doligez and Roshan James)
|
|
|
|
Build system:
|
|
- PR#5418 (comments) : generate dependencies with $(CC) instead of gcc
|
|
(Damien Doligez and Michael Grünewald)
|
|
- PR#6266: Cross compilation for iOs, Android etc
|
|
(whitequark, review by Damien Doligez and Mark Shinwell)
|
|
|
|
Installation procedure:
|
|
- Update instructions for x86-64 PIC mode and POWER architecture builds
|
|
(Mark Shinwell)
|
|
|
|
Bug fixes:
|
|
- PR#5271: Location.prerr_warning is hard-coded to use Format.err_formatter
|
|
(Damien Doligez, report by Rolf Rolles)
|
|
- PR#5395: OCamlbuild mishandles relative symlinks and include paths
|
|
(Damien Doligez, report by Didier Le Botlan)
|
|
- PR#5822: wrong value of Options.ext_dll on windows
|
|
(Damien Doligez and Daniel Weil)
|
|
- PR#5836, PR#6684: printing lazy values in ocamldebug may segfault
|
|
(Gabriel Scherer, request by the Coq team)
|
|
- PR#5887: move the byterun/*.h headers to byterun/caml/*.h to avoid
|
|
header name clashes
|
|
(Jérôme Vouillon and Adrien Nader and whitequark)
|
|
- PR#6281: Graphics window does not acknowledge second click (double click)
|
|
(Kyle Headley)
|
|
- PR#6490: incorrect backtraces in gdb on AArch64. Also fixes incorrect
|
|
backtraces on 32-bit ARM.
|
|
(Mark Shinwell)
|
|
- PR#6573: extern "C" for systhreads/threads.h
|
|
(Mickaël Delahaye)
|
|
- PR#6575: Array.init evaluates callback although it should not do so
|
|
(Alain Frisch, report by Gerd Stolpmann)
|
|
- PR#6607: The manual doesn't mention 0x200 flag for OCAMLRUNPARAM=v
|
|
(Alain Frisch)
|
|
- PR#6616: allow meaningful use of -use-runtime without -custom.
|
|
(whitequark)
|
|
- PR#6617: allow android build with pthreads support (since SDK r10c)
|
|
(whitequark)
|
|
- PR#6626: ocamlbuild on cygwin cannot find ocamlfind
|
|
(Gergely Szilvasy)
|
|
- PR#6628: Configure script rejects legitimate arguments
|
|
(Michael Grünewald, Damien Doligez)
|
|
- PR#6630: Failure of tests/prim-bigstring/{big,}string.ml on big-endian
|
|
architectures
|
|
(Pierre Chambart, testing by Mark Shinwell)
|
|
- PR#6640: ocamlbuild: wrong "unused tag" warning on "precious"
|
|
(report by user 'william')
|
|
- PR#6652: ocamlbuild -clean does not print a newline after output
|
|
(Damien Doligez, report by Andi McClure)
|
|
- PR#6658: cross-compiler: version check not working on OS X
|
|
(Gerd Stolpmann)
|
|
- PR#6665: Failure of tests/asmcomp on sparc
|
|
(Stéphane Glondu)
|
|
- PR#6667: wrong implementation of %bswap16 on ARM64
|
|
(Xavier Leroy)
|
|
- PR#6669: fix 4.02 regression in toplevel printing of lazy values
|
|
(Leo White, review by Gabriel Scherer)
|
|
- PR#6671: Windows: environment variable 'TZ' affects Unix.gettimeofday
|
|
(Mickael Delahaye and Damien Doligez)
|
|
- PR#6680: Missing parentheses in warning about polymorphic variant value
|
|
(Jacques Garrigue and Gabriel Scherer, report by Philippe Veber)
|
|
- PR#6686: Bug in [subst_boxed_number]
|
|
(Jérémie Dimino, Mark Shinwell)
|
|
- PR#6690: Uncaught exception (Not_found) with (wrong) wildcard or unification
|
|
type variable in place of a local abstract type
|
|
(Jacques Garrigue, report by Mikhail Mandrykin)
|
|
- PR#6693 (part two): Incorrect relocation types in x86-64 runtime system
|
|
(whitequark, review by Jacques-Henri Jourdan, Xavier Leroy and Mark Shinwell)
|
|
- PR#6717: Pprintast does not print let-pattern attributes
|
|
(Gabriel Scherer, report by whitequark)
|
|
- PR#6727: Printf.sprintf "%F" misbehavior
|
|
(Benoît Vaugon, report by Vassili Karpov)
|
|
- PR#6747: ocamlobjinfo: missing symbol caml_plugin_header due to underscore
|
|
(Damien Doligez, Maverick Woo)
|
|
- PR#6749: ocamlopt returns n for (n mod 1) instead of 0
|
|
(Mark Shinwell and Jérémie Dimino)
|
|
- PR#6753: Num.quo_num and Num.mod_num incorrect for some negative arguments
|
|
(Xavier Leroy)
|
|
- PR#6758: Ocamldoc "analyse_module: parsetree and typedtree don't match"
|
|
(Damien Doligez, report by user 'maro')
|
|
- PR#6759: big_int_of_string incorrectly parses some hexa literals
|
|
(Damien Doligez, report by Pierre-yves Strub)
|
|
- PR#6763: #show with -short-paths doesn't select shortest type paths
|
|
(Jacques Garrigue, report by David Sheets)
|
|
- PR#6768: Typechecker overflow the stack on cyclic type
|
|
(Jacques Garrigue, report by user 'darktenaibre')
|
|
- PR#6770: (duplicate of PR#6686)
|
|
- PR#6772: asmrun/signals_asm.c doesn't compile on NetBSD/i386
|
|
(Kenji Tokudome)
|
|
- PR#6775: Digest.file leaks file descriptor on error
|
|
(Valentin Gatien-Baron)
|
|
- PR#6779: Cross-compilers cannot link bytecode using custom primitives
|
|
(Damien Doligez, request by whitequark)
|
|
- PR#6787: Soundness bug with polymorphic variants
|
|
(Jacques Garrigue, with help from Leo White and Grégoire Henry,
|
|
report by Michael O'Connor)
|
|
- PR#6790: otherlibs should be built with -g
|
|
(Damien Doligez, report by whitequark)
|
|
- PR#6791: "%s@[", "%s@{" regression in Scanf
|
|
(Benoît Vaugon)
|
|
- PR#6793: ocamlbuild passes nonsensical "-ocamlc ..." commands to menhir
|
|
(Gabriel Scherer, report by Damien Doligez)
|
|
- PR#6799: include guards missing for unixsupport.h and other files
|
|
(Andreas Hauptmann)
|
|
- PR#6810: Improve documentation of Bigarray.Genarray.map_file
|
|
(Mark Shinwell and Daniel Bünzli)
|
|
- PR#6812: -short-paths and -no-alias-deps can create inconsistent assumptions
|
|
(Jacques Garrigue, report by Valentin Gatien-Baron)
|
|
- PR#6817: GADT exhaustiveness breakage with modules
|
|
(Leo White, report by Pierre Chambart)
|
|
- PR#6824: fix buffer sharing on partial application of Format.asprintf
|
|
(Gabriel Scherer, report by Alain Frisch)
|
|
- PR#6831: Build breaks for -aspp gcc on solaris-like OSs
|
|
(John Tibble)
|
|
- PR#6836: Assertion failure using -short-paths
|
|
(Jacques Garrigue, report by David Sheets)
|
|
- PR#6837: Build profiling libraries on FreeBSD and NetBSD x86-64
|
|
(Mark Shinwell, report by Michael Grünewald)
|
|
- PR#6841: Changing compilation unit name with -o breaks ocamldebug
|
|
(Jacques Garrigue, report by Jordan Walke)
|
|
- PR#6842: export Typemod.modtype_of_package
|
|
- PR#6843: record weak dependencies even when the .cmi is missing
|
|
(Leo White, Gabriel Scherer)
|
|
- PR#6849: Inverted pattern unification error
|
|
(Jacques Garrigue, report by Leo White)
|
|
- PR#6857: __MODULE__ doesn't give the current module with -o
|
|
(Jacques Garrigue, report by Valentin Gatien-Baron)
|
|
- PR#6862: Exhaustiveness check wrong for class constructor arguments
|
|
(Jacques Garrigue)
|
|
- PR#6869: Improve comment on [Hashtbl.hash_param]
|
|
(Mark Shinwell, report by Jun Furuse)
|
|
- PR#6870: Unsoundness when -rectypes fails to detect non-contractive type
|
|
(Jacques Garrigue, report by Stephen Dolan)
|
|
- PR#6872: Type-directed propagation fails to disambiguate variants
|
|
that are also exception constructors
|
|
(Jacques Garrigue, report by Romain Beauxis)
|
|
- PR#6878: AArch64 backend generates invalid asm: conditional branch
|
|
out of range (Mark Shinwell, report by Richard Jones, testing by Richard
|
|
Jones and Xavier Leroy, code review by Xavier Leroy and Thomas Refis)
|
|
- PR#6879: Wrong optimization of 1 mod n
|
|
(Mark Shinwell, report by Jean-Christophe Filliâtre)
|
|
- PR#6884: The __CYGWIN32__ #define should be replaced with __CYGWIN__
|
|
(Adrien Nader)
|
|
- PR#6886: -no-alias-deps allows to build self-referential compilation units
|
|
(Jacques Garrigue, report by Valentin Gatien-Baron)
|
|
- PR#6889: ast_mapper fails to rewrite class attributes
|
|
(Sébastien Briais)
|
|
- PR#6893: ocamlbuild: "tag not used" warning when using (p)dep
|
|
(Gabriel Scherer, report by Christiano Haesbaert)
|
|
- GPR#143: fix getsockopt behaviour for boolean socket options
|
|
(Anil Madhavapeddy and Andrew Ray)
|
|
- GPR#190: typo in pervasives
|
|
(Guillaume Bury)
|
|
- Misplaced assertion in major_gc.c for no-naked-pointers mode
|
|
(Stephen Dolan, Mark Shinwell)
|
|
|
|
Feature wishes:
|
|
- PR#6452, GPR#140: add internal suport for custom printing formats
|
|
(Jérémie Dimino)
|
|
- PR#6641: add -g, -ocamlcflags, -ocamloptflags options to ocamlmklib
|
|
(whitequark)
|
|
- PR#6693: also build libasmrun_shared.so and lib{asm,caml}run_pic.a
|
|
(whitequark, review by Mark Shinwell)
|
|
- PR#6842: export Typemod.modtype_of_package
|
|
(Jacques Garrigue, request by Jun Furuse)
|
|
- GPR#139: more versatile specification of locations of .annot
|
|
(Christophe Troestler, review by Damien Doligez)
|
|
- GPR#171: allow custom warning printers / catchers
|
|
(Benjamin Canou, review by Damien Doligez)
|
|
- GPR#191: Making gc.h and some part of memory.h public
|
|
(Thomas Refis)
|
|
|
|
OCaml 4.02.1 (14 Oct 2014):
|
|
---------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*")
|
|
|
|
Standard library:
|
|
* Add optional argument ?limit to Arg.align.
|
|
|
|
Bug Fixes:
|
|
- PR#4099: Bug in Makefile.nt: won't stop on error
|
|
(George Necula)
|
|
- PR#6181: Improve MSVC build
|
|
(Chen Gang)
|
|
- PR#6207: Configure doesn't detect features correctly on Haiku
|
|
(Jessica Hamilton)
|
|
- PR#6466: Non-exhaustive matching warning message for open types is confusing
|
|
(whitequark)
|
|
- PR#6529: fix quadratic-time algorithm in Consistbl.extract.
|
|
(Xavier Leroy, Alain Frisch, relase-worthy report by Jacques-Pascal Deplaix)
|
|
- PR#6530: Add stack overflow handling for native code (OpenBSD i386 and amd64)
|
|
(Cristopher Zimmermann)
|
|
- PR#6533: broken semantics of %(%) when substituted by a box
|
|
(Benoît Vaugon, report by Boris Yakobowski)
|
|
- PR#6534: legacy support for %.10s
|
|
(Benoît Vaugon, Gabriel Scherer, report by Nick Chapman)
|
|
- PR#6536: better documentation of flag # in format strings
|
|
(Damien Doligez, report by Nick Chapman)
|
|
- PR#6544: Bytes and CamlinternalFormat missing from threads stdlib.cma
|
|
(Christopher Zimmermann)
|
|
- PR#6546: -dsource omits parens for `List ((`String "A")::[]) in patterns
|
|
(Gabriel Scherer, report by whitequark)
|
|
- PR#6547: __MODULE__ aborts the compiler if the module name cannot be inferred
|
|
(Jacques Garrigue, report by Kaustuv Chaudhuri)
|
|
- PR#6549: Debug section is sometimes not readable when using -pack
|
|
(Hugo Heuzard, review by Gabriel Scherer)
|
|
- PR#6553: Missing command line options for ocamldoc
|
|
(Maxence Guesdon)
|
|
- PR#6554: fix race condition when retrieving backtraces
|
|
(Jérémie Dimino, Mark Shinwell).
|
|
- PR#6557: String.sub throws Invalid_argument("Bytes.sub")
|
|
(Damien Doligez, report by Oliver Bandel)
|
|
- PR#6562: Fix ocamldebug module source lookup
|
|
(Leo White)
|
|
- PR#6563: Inclusion of packs failing to run module initializers
|
|
(Jacques Garrigue, report by Mark Shinwell)
|
|
- PR#6564: infinite loop in Mtype.remove_aliases
|
|
(Jacques Garrigue, report by Mark Shinwell)
|
|
- PR#6565: compilation fails with Env.Error(_)
|
|
(Jacques Garrigue and Mark Shinwell)
|
|
- PR#6566: -short-paths and signature inclusion errors
|
|
(Jacques Garrigue, report by Mark Shinwell)
|
|
- PR#6572: Fatal error with recursive modules
|
|
(Jacques Garrigue, report by Quentin Stievenart)
|
|
- PR#6575: Array.init evaluates callback although it should not do so
|
|
(Alain Frisch, report by Gerd Stolpmann)
|
|
- PR#6578: Recursive module containing alias causes Segmentation fault
|
|
(Jacques Garrigue)
|
|
- PR#6581: Some bugs in generative functors
|
|
(Jacques Garrigue, report by Mark Shinwell)
|
|
- PR#6584: ocamldep support for "-open M"
|
|
(Gabriel Scherer, review by Damien Doligez, report by Hezekiah M. Carty)
|
|
- PR#6588: Code generation errors for ARM
|
|
(Mark Shinwell, Xavier Leroy)
|
|
- PR#6590: Improve Windows (MSVC and mingw) build
|
|
(Chen Gang)
|
|
- PR#6599: ocamlbuild: add -bin-annot when using -pack
|
|
(Christopher Zimmermann)
|
|
- PR#6602: Fatal error when tracing a function with abstract type
|
|
(Jacques Garrigue, report by Hugo Herbelin)
|
|
- ocamlbuild: add an -ocamlmklib option to change the ocamlmklib command
|
|
(Jérôme Vouillon)
|
|
|
|
OCaml 4.02.0 (29 Aug 2014):
|
|
---------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*")
|
|
|
|
Language features:
|
|
- Attributes and extension nodes
|
|
(Alain Frisch)
|
|
- Generative functors (PR#5905)
|
|
(Jacques Garrigue)
|
|
* Module aliases
|
|
(Jacques Garrigue)
|
|
* Alternative syntax for string literals {id|...|id} (can break comments)
|
|
(Alain Frisch)
|
|
- Separation between read-only strings (type string) and read-write byte
|
|
sequences (type bytes). Activated by command-line option -safe-string.
|
|
(Damien Doligez)
|
|
- PR#6318: Exception cases in pattern matching
|
|
(Jeremy Yallop, backend by Alain Frisch)
|
|
- PR#5584: Extensible open datatypes
|
|
(Leo White)
|
|
|
|
Build system for the OCaml distribution:
|
|
- Use -bin-annot when building.
|
|
- Use GNU make instead of portable makefiles.
|
|
- Updated build instructions for 32-bit Mac OS X on Intel hardware.
|
|
|
|
Shedding weight:
|
|
* Removed Camlp4 from the distribution, now available as third-party software.
|
|
* Removed Labltk from the distribution, now available as a third-party library.
|
|
|
|
Type system:
|
|
* PR#6235: Keep typing of pattern cases independent in principal mode
|
|
(i.e. information from previous cases is no longer used when typing
|
|
patterns; cf. 'PR#6235' in testsuite/test/typing-warnings/records.ml)
|
|
(Jacques Garrigue)
|
|
- Allow opening a first-class module or applying a generative functor
|
|
in the body of a generative functor. Allow it also in the body of
|
|
an applicative functor if no types are created
|
|
(Jacques Garrigue, suggestion by Leo White)
|
|
* Module aliases are now typed in a specific way, which remembers their
|
|
identity. Compiled interfaces become smaller, but may depend on the
|
|
original modules. This also changes the signature inferred by
|
|
"module type of".
|
|
(Jacques Garrigue, feedback from Leo White, Mark Shinwell and Nick Chapman)
|
|
- PR#6331: Slight change in the criterion to distinguish private
|
|
abbreviations and private row types: create a private abbreviation for
|
|
closed objects and fixed polymorphic variants.
|
|
(Jacques Garrigue)
|
|
* PR#6333: Compare first class module types structurally rather than
|
|
nominally. Value subtyping allows module subtyping as long as the internal
|
|
representation is unchanged.
|
|
(Jacques Garrigue)
|
|
|
|
Compilers:
|
|
- More aggressive constant propagation, including float and
|
|
int32/int64/nativeint arithmetic. Constant propagation for floats
|
|
can be turned off with option -no-float-const-prop, for codes that
|
|
change FP rounding modes at run-time.
|
|
(Xavier Leroy)
|
|
- New back-end optimization pass: common subexpression elimination (CSE).
|
|
(Reuses results of previous computations instead of recomputing them.)
|
|
(Xavier Leroy)
|
|
- New back-end optimization pass: dead code elimination.
|
|
(Removes arithmetic and load instructions whose results are unused.)
|
|
(Xavier Leroy)
|
|
- PR#6269: Optimization of sequences of string patterns
|
|
(Benoît Vaugon and Luc Maranget)
|
|
- Experimental native code generator for AArch64 (ARM 64 bits)
|
|
(Xavier Leroy)
|
|
- PR#6042: Optimization of integer division and modulus by constant divisors
|
|
(Xavier Leroy and Phil Denys)
|
|
- Add "-open" command line flag for opening a single module before typing
|
|
(Leo White, Mark Shinwell and Nick Chapman)
|
|
* "-o" now sets module name to the output file name up to the first "."
|
|
(it also applies when "-o" is not given, i.e. the module name is then
|
|
the input file name up to the first ".")
|
|
(Leo White, Mark Shinwell and Nick Chapman)
|
|
* PR#5779: better sharing of structured constants
|
|
(Alain Frisch)
|
|
- PR#5817: new flag to keep locations in cmi files
|
|
(Alain Frisch)
|
|
- PR#5854: issue warning 3 when referring to a value marked with
|
|
the [@@ocaml.deprecated] attribute
|
|
(Alain Frisch, suggestion by Pierre-Marie Pédrot)
|
|
- PR#6017: a new format implementation based on GADTs
|
|
(Benoît Vaugon and Gabriel Scherer)
|
|
* PR#6203: Constant exception constructors no longer allocate
|
|
(Alain Frisch)
|
|
- PR#6260: avoid unnecessary boxing in let
|
|
(Vladimir Brankov)
|
|
- PR#6345: Better compilation of optional arguments with default values
|
|
(Alain Frisch, review by Jacques Garrigue)
|
|
- PR#6389: ocamlopt -opaque option for incremental native compilation
|
|
(Pierre Chambart, Gabriel Scherer)
|
|
|
|
Toplevel interactive system:
|
|
- PR#5377: New "#show_*" directives
|
|
(ygrek, Jacques Garrigue and Alain Frisch)
|
|
|
|
Runtime system:
|
|
- New configure option "-no-naked-pointers" to improve performance by
|
|
avoiding page table tests during block darkening and the marking phase
|
|
of the major GC. In this mode, all out-of-heap pointers must point at
|
|
things that look like OCaml values: in particular they must have a valid
|
|
header. The colour of said headers should be black.
|
|
(Mark Shinwell, reviews by Damien Doligez and Xavier Leroy)
|
|
- Fixed bug in native code version of [caml_raise_with_string] that could
|
|
potentially lead to heap corruption.
|
|
(Mark Shinwell)
|
|
* Blocks initialized by [CAMLlocal*] and [caml_alloc] are now filled with
|
|
[Val_unit] rather than zero.
|
|
(Mark Shinwell)
|
|
- Fixed a major performance problem on large heaps (~1GB) by making heap
|
|
increments proportional to heap size by default
|
|
(Damien Doligez)
|
|
- PR#4765: Structural equality treats exception specifically
|
|
(Alain Frisch)
|
|
- PR#5009: efficient comparison/indexing of exceptions
|
|
(Alain Frisch, request by Markus Mottl)
|
|
- PR#6075: avoid using unsafe C library functions (strcpy, strcat, sprintf)
|
|
(Xavier Leroy, reports from user 'jfc' and Anil Madhavapeddy)
|
|
- An ISO C99-compliant C compiler and standard library is now assumed.
|
|
(Plus special exceptions for MSVC.) In particular, emulation code for
|
|
64-bit integer arithmetic was removed, the C compiler must support a
|
|
64-bit integer type.
|
|
(Xavier Leroy)
|
|
|
|
Standard library:
|
|
* Add new modules Bytes and BytesLabels for mutable byte sequences.
|
|
(Damien Doligez)
|
|
- PR#4986: add List.sort_uniq and Set.of_list
|
|
(Alain Frisch)
|
|
- PR#5935: a faster version of "raise" which does not maintain the backtrace
|
|
(Alain Frisch)
|
|
- PR#6146: support "Unix.kill pid Sys.sigkill" under Windows
|
|
(Romain Bardou and Alain Frisch)
|
|
- PR#6148: speed improvement for Buffer
|
|
(John Whitington)
|
|
- PR#6180: efficient creation of uninitialized float arrays
|
|
(Alain Frisch, request by Markus Mottl)
|
|
- PR#6355: Improve documentation regarding finalisers and multithreading
|
|
(Daniel Bünzli, Mark Shinwell)
|
|
- Trigger warning 3 for all values marked as deprecated in the documentation.
|
|
(Damien Doligez)
|
|
|
|
OCamldoc:
|
|
- PR#6257: handle full doc comments for variant constructors and
|
|
record fields
|
|
(Maxence Guesdon, request by ygrek)
|
|
- PR#6274: allow doc comments on object types
|
|
(Thomas Refis)
|
|
- PR#6310: fix ocamldoc's subscript/superscript CSS font size
|
|
(Anil Madhavapeddy)
|
|
- PR#6425: fix generation of man pages
|
|
(Maxence Guesdon, report by Anil Madhavapeddy)
|
|
|
|
Bug fixes:
|
|
- PR#2719: wrong scheduling of bound checks within a
|
|
try...with Invalid_argument -> _ ... (Xavier Leroy)
|
|
- PR#4719: Sys.executable_name wrong if executable name contains dots (Windows)
|
|
(Alain Frisch, report by Bart Jacobs)
|
|
- PR#5406 ocamlbuild: "tag 'package' does not expect a parameter"
|
|
(Gabriel Scherer)
|
|
- PR#5598, PR#6165: Alterations to handling of \013 in source files
|
|
breaking other tools
|
|
(David Allsopp and Damien Doligez)
|
|
- PR#5820: Fix camlp4 lexer roll back problem
|
|
(Hongbo Zhang)
|
|
- PR#5946: CAMLprim taking (void) as argument
|
|
(Benoît Vaugon)
|
|
- PR#6038: on x86-32, enforce 16-byte stack alignment for compatibility
|
|
with recent GCC and Clang. Win32/MSVC keeps 4-byte stack alignment.
|
|
(Xavier Leroy)
|
|
- PR#6062: Fix a 4.01 camlp4 DELETE_RULE regression caused by commit 13047
|
|
(Hongbo Zhang, report by Christophe Troestler)
|
|
- PR#6173: Typing error message is worse than before
|
|
(Jacques Garrigue and John Whitington)
|
|
- PR#6174: OCaml compiler loops on an example using GADTs (-rectypes case)
|
|
(Jacques Garrigue and Grégoire Henry, report by Chantal Keller)
|
|
- PR#6175: open! was not suppored by camlp4
|
|
(Hongbo Zhang)
|
|
- PR#6184: ocamlbuild: `ocamlfind ocamldep` does not support -predicate
|
|
(Jacques-Pascal Deplaix)
|
|
- PR#6194: Incorrect unused warning with first-class modules in patterns
|
|
(Jacques Garrigue, report by Markus Mottl and Leo White)
|
|
- PR#6211: in toplevel interactive use, bad interaction between uncaught
|
|
exceptions and multiple bindings of the form "let x = a let y = b;;".
|
|
(Xavier Leroy)
|
|
- PR#6216: inlining of GADT matches generates invalid assembly
|
|
(Xavier Leroy and Alain Frisch, report by Mark Shinwell)
|
|
- PR#6232: Don't use [mktemp] on platforms where [mkstemp] is available
|
|
(Stéphane Glondu, Mark Shinwell)
|
|
- PR#6233: out-of-bounds exceptions lose their locations on ARM, PowerPC
|
|
(Jacques-Henri Jourdan and Xavier Leroy,
|
|
report and testing by Stéphane Glondu)
|
|
- PR#6235: Issue with type information flowing through a variant pattern
|
|
(Jacques Garrigue, report by Hongbo Zhang)
|
|
- PR#6239: sometimes wrong stack alignment when raising exceptions
|
|
in -g mode with backtraces active
|
|
(Xavier Leroy, report by Yaron Minsky)
|
|
- PR#6240: Fail to expand module type abbreviation during substyping
|
|
(Jacques Garrigue, report by Leo White)
|
|
- PR#6241: Assumed inequality between paths involving functor arguments
|
|
(Jacques Garrigue, report by Jeremy Yallop)
|
|
- PR#6243: Make "ocamlopt -g" more resistant to ill-formed locations
|
|
(Xavier Leroy, report by Pierre-Marie Pédrot)
|
|
- PR#6262: equality of first-class modules take module aliases into account
|
|
(Alain Frisch and Leo White)
|
|
- PR#6268: -DMODEL_$(MODEL) not passed when building asmrun/arm.p.o
|
|
(Peter Michael Green)
|
|
- PR#6273: fix Sys.file_exists on large files (Win32)
|
|
(Christoph Bauer)
|
|
- PR#6275: Soundness bug related to type constraints
|
|
(Jacques Garrigue, report by Leo White)
|
|
- PR#6293: Assert_failure with invalid package type
|
|
(Jacques Garrigue, report by Elnatan Reisner)
|
|
- PR#6300: ocamlbuild -use-ocamlfind conflicts with -ocamlc
|
|
(Gabriel Scherer)
|
|
- PR#6302: bytecode debug information re-read from filesystem every time
|
|
(Jacques-Henri Jourdan)
|
|
- PR#6307: Behavior of 'module type of' w.r.t. module aliases
|
|
(Jacques Garrigue, report by Alain Frisch)
|
|
- PR#6332: Unix.open_process fails to pass empty arguments under Windows
|
|
(Damien Doligez, report Virgile Prevosto)
|
|
- PR#6346: Build failure with latest version of xcode on OSX
|
|
(Jérémie Dimino)
|
|
- PR#6348: Unification failure for GADT when original definition is hidden
|
|
(Leo White and Jacques Garrigue, report by Jeremy Yallop)
|
|
- PR#6352: Automatic removal of optional arguments and sequencing
|
|
(Jacques Garrigue and Alain Frisch)
|
|
- PR#6361: Hashtbl.hash not terminating on some lazy values w/ recursive types
|
|
(Xavier Leroy, report by Leo White)
|
|
- PR#6383: Exception Not_found when using object type in absent module
|
|
(Jacques Garrigue, report by Sébastien Briais)
|
|
- PR#6384: Uncaught Not_found exception with a hidden .cmi file
|
|
(Leo White)
|
|
- PR#6385: wrong allocation of large closures by the bytecode interpreter
|
|
(Xavier Leroy, report by Stephen Dolan)
|
|
- PR#6394: Assertion failed in Typecore.expand_path
|
|
(Alain Frisch and Jacques Garrigue)
|
|
- PR#6405: unsound interaction of -rectypes and GADTs
|
|
(Jacques Garrigue, report by Gabriel Scherer and Benoît Vaugon)
|
|
- PR#6408: Optional arguments given as ~?arg instead of ?arg in message
|
|
(Michael O'Connor)
|
|
- PR#6411: missing libgcc_s_sjlj-1.dll in mingw (add -static-libgcc)
|
|
(Jun Furuse and Alain Frisch, Jonathan Protzenko and Adrien Nader)
|
|
- PR#6436: Typos in @deprecated text in stdlib/arrayLabels.mli
|
|
(John Whitington)
|
|
- PR#6439: Don't use the deprecated [getpagesize] function
|
|
(John Whitington, Mark Shinwell)
|
|
- PR#6441: undetected tail-call in some mutually-recursive functions
|
|
(many arguments, and mutual block mixes functions and non-functions)
|
|
(Stefan Holdermans, review by Xavier Leroy)
|
|
- PR#6443: ocaml segfault when List.fold_left is traced then executed
|
|
(Jacques Garrigue, report by user 'Reventlov')
|
|
- PR#6451: some bugs in untypeast.ml
|
|
(Jun Furuse, review by Alain Frisch)
|
|
- PR#6460: runtime assertion failure with large [| e1;...eN |]
|
|
float array expressions
|
|
(Leo White)
|
|
- PR#6463: -dtypedtree fails on class fields
|
|
(Leo White)
|
|
- PR#6469: invalid -dsource printing of "external _pipe = ...", "Pervasives.(!)"
|
|
(Gabriel Scherer and Damien Doligez, user 'ngunn')
|
|
- PR#6482: ocamlbuild fails when _tags file in unhygienic directory
|
|
(Gabriel Scherer)
|
|
- PR#6502: ocamlbuild spurious warning on "use_menhir" tag
|
|
(Xavier Leroy)
|
|
- PR#6505: Missed Type-error leads to a segfault upon record access
|
|
(Jacques Garrigue, Jeremy Yallop, report by Christoph Höger)
|
|
- PR#6507: crash on AArch64 resulting from incorrect setting of
|
|
[caml_bottom_of_stack]. (Richard Jones, Mark Shinwell)
|
|
- PR#6509: add -linkall flag to ocamlcommon.cma
|
|
(Frédéric Bour)
|
|
- PR#6513: Fatal error Ctype.Unify(_) in functor type
|
|
- PR#6523: failure upon character bigarray access, and unnecessary change
|
|
in comparison ordering (Jeremy Yallop, Mark Shinwell)
|
|
- bound-checking bug in caml_string_{get,set}{16,32,64}
|
|
(Pierre Chambart and Gabriel Scherer, report by Nicolas Trangez)
|
|
- sometimes wrong stack alignment at out-of-bounds array access
|
|
(Gabriel Scherer and Xavier Leroy, report by Pierre Chambart)
|
|
|
|
Features wishes:
|
|
- PR#4243: make the Makefiles parallelizable
|
|
(Grégoire Henry and Damien Doligez)
|
|
- PR#4323: have "of_string" in Num and Big_int work with binary and
|
|
hex representations
|
|
(Zoe Paraskevopoulou, review by Gabriel Scherer)
|
|
- PR#4771: Clarify documentation of Dynlink.allow_only
|
|
(Damien Doligez, report by David Allsopp)
|
|
- PR#4855: 'camlp4 -I +dir' accepted, dir is relative to 'camlp4 -where'
|
|
(Jun Furuse and Hongbo Zhang, report by Dmitry Grebeniuk)
|
|
- PR#5201: ocamlbuild: add --norc to the bash invocation to help performances
|
|
(Daniel Weil)
|
|
- PR#5650: Camlp4FoldGenerator doesn't handle well "abstract" types
|
|
(Hongbo Zhang)
|
|
- PR#5808: allow simple patterns, not just identifiers, in "let p : t = ..."
|
|
(Alain Frisch)
|
|
- PR#5851: warn when -r is disabled because no _tags file is present
|
|
(Gabriel Scherer)
|
|
- PR#5899: a programmer-friendly access to backtrace information
|
|
(Jacques-Henri Jourdan and Gabriel Scherer)
|
|
- PR#6000 comment 9644: add a warning for non-principal coercions to format
|
|
(Jacques Garrigue, report by Damien Doligez)
|
|
- PR#6054: add support for M.[ foo ], M.[| foo |] etc.
|
|
(Kaustuv Chaudhuri)
|
|
- PR#6064: GADT representation for Bigarray.kind + CAML_BA_CHAR runtime kind
|
|
(Jeremy Yallop, review by Gabriel Scherer)
|
|
- PR#6071: Add a -noinit option to the toplevel
|
|
(David Sheets)
|
|
- PR#6087: ocamlbuild, improve _tags parsing of escaped newlines
|
|
(Gabriel Scherer, request by Daniel Bünzli)
|
|
- PR#6109: Typos in ocamlbuild error messages
|
|
(Gabriel Kerneis)
|
|
- PR#6116: more efficient implementation of Digest.to_hex
|
|
(ygrek)
|
|
- PR#6142: add cmt file support to ocamlobjinfo
|
|
(Anil Madhavapeddy)
|
|
- PR#6166: document -ocamldoc option of ocamlbuild
|
|
(Xavier Clerc)
|
|
- PR#6182: better message for virtual objects and class types
|
|
(Leo White, Stephen Dolan)
|
|
- PR#6183: enhanced documentation for 'Unix.shutdown_connection'
|
|
(Anil Madhavapeddy, report by Jun Furuse)
|
|
- PR#6187: ocamlbuild: warn when using -plugin-tag(s) without myocamlbuild.ml
|
|
(Jacques-Pascal Deplaix)
|
|
- PR#6246: allow wildcard _ as for-loop index
|
|
(Alain Frisch, request by ygrek)
|
|
- PR#6267: more information printed by "bt" command of ocamldebug
|
|
(Josh Watzman)
|
|
- PR#6270: remove need for -I directives to ocamldebug in common case
|
|
(Josh Watzman, review by Xavier Clerc and Alain Frisch)
|
|
- PR#6311: Improve signature mismatch error messages
|
|
(Alain Frisch, suggestion by Daniel Bünzli)
|
|
- PR#6358: obey DESTDIR in install targets
|
|
(Gabriel Scherer, request by François Berenger)
|
|
- PR#6388, PR#6424: more parsetree correctness checks for -ppx users
|
|
(Alain Frisch, request by whitequark and Jun Furuse)
|
|
- PR#6406: Expose OCaml version in C headers
|
|
(whitequark and Romain Calascibetta)
|
|
- PR#6446: improve "unused declaration" warnings wrt. name shadowing
|
|
(Alain Frisch)
|
|
- PR#6495: ocamlbuild tags 'safe_string', 'unsafe_string'
|
|
(Anil Madhavapeddy)
|
|
- PR#6497: pass context information to -ppx preprocessors
|
|
(whitequark, Alain Frisch)
|
|
- ocamllex: user-definable refill action
|
|
(Frédéric Bour, review by Gabriel Scherer and Luc Maranget)
|
|
- shorten syntax for functor signatures: "functor (M1:S1) (M2:S2) .. -> .."
|
|
(Thomas Gazagnaire and Jeremy Yallop, review by Gabriel Scherer)
|
|
- make ocamldebug -I auto-detection work with ocamlbuild
|
|
(Josh Watzman)
|
|
|
|
OCaml 4.01.0 (12 Sep 2013):
|
|
---------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*")
|
|
|
|
Other libraries:
|
|
- Labltk: updated to Tcl/Tk 8.6.
|
|
|
|
Type system:
|
|
- PR#5759: use well-disciplined type information propagation to
|
|
disambiguate label and constructor names
|
|
(Jacques Garrigue, Alain Frisch and Leo White)
|
|
* Propagate type information towards pattern-matching, even in the presence of
|
|
polymorphic variants (discarding only information about possibly-present
|
|
constructors). As a result, matching against absent constructors is no longer
|
|
allowed for exact and fixed polymorphic variant types.
|
|
(Jacques Garrigue)
|
|
* PR#6035: Reject multiple declarations of the same method or instance variable
|
|
in an object
|
|
(Alain Frisch)
|
|
|
|
Compilers:
|
|
- PR#5861: raise an error when multiple private keywords are used in type
|
|
declarations
|
|
(Hongbo Zhang)
|
|
- PR#5634: parsetree rewriter (-ppx flag)
|
|
(Alain Frisch)
|
|
- ocamldep now supports -absname
|
|
(Alain Frisch)
|
|
- PR#5768: On "unbound identifier" errors, use spell-checking to suggest names
|
|
present in the environment
|
|
(Gabriel Scherer)
|
|
- ocamlc has a new option -dsource to visualize the parsetree
|
|
(Alain Frisch, Hongbo Zhang)
|
|
- tools/eqparsetree compares two parsetree ignoring location
|
|
(Hongbo Zhang)
|
|
- ocamlopt now uses clang as assembler on OS X if available, which enables
|
|
CFI support for OS X.
|
|
(Benedikt Meurer)
|
|
- Added a new -short-paths option, which attempts to use the shortest
|
|
representation for type constructors inside types, taking open modules
|
|
into account. This can make types much more readable if your code
|
|
uses lots of functors.
|
|
(Jacques Garrigue)
|
|
- PR#5986: added flag -compat-32 to ocamlc, ensuring that the generated
|
|
bytecode executable can be loaded on 32-bit hosts.
|
|
(Xavier Leroy)
|
|
- PR#5980: warning on open statements which shadow an existing
|
|
identifier (if it is actually used in the scope of the open); new
|
|
open! syntax to silence it locally
|
|
(Alain Frisch, thanks to a report of Daniel Bünzli)
|
|
* warning 3 is extended to warn about other deprecated features:
|
|
- ISO-latin1 characters in identifiers
|
|
- uses of the (&) and (or) operators instead of (&&) and (||)
|
|
(Damien Doligez)
|
|
- Experimental OCAMLPARAM for ocamlc and ocamlopt
|
|
(Fabrice Le Fessant)
|
|
- PR#5571: incorrect ordinal number in error message
|
|
(Alain Frisch, report by John Carr)
|
|
- PR#6073: add signature to Tstr_include
|
|
(patch by Leo White)
|
|
|
|
Standard library:
|
|
- PR#5899: expose a way to inspect the current call stack,
|
|
Printexc.get_callstack
|
|
(Gabriel Scherer, Jacques-Henri Jourdan, Alain Frisch)
|
|
- PR#5986: new flag Marshal.Compat_32 for the serialization functions
|
|
(Marshal.to_*), forcing the output to be readable on 32-bit hosts.
|
|
(Xavier Leroy)
|
|
- infix application operators |> and @@ in Pervasives
|
|
(Fabrice Le Fessant)
|
|
- PR#6176: new Format.asprintf function with a %a formatter
|
|
compatible with Format.fprintf (unlike Format.sprintf)
|
|
(Pierre Weis)
|
|
|
|
Other libraries:
|
|
- PR#5568: add O_CLOEXEC flag to Unix.openfile, so that the returned
|
|
file descriptor is created in close-on-exec mode
|
|
(Xavier Leroy)
|
|
|
|
Runtime system:
|
|
* PR#6019: more efficient implementation of caml_modify() and caml_initialize().
|
|
The new implementations are less lenient than the old ones: now,
|
|
the destination pointer of caml_modify() must point within the minor or
|
|
major heaps, and the destination pointer of caml_initialize() must
|
|
point within the major heap.
|
|
(Xavier Leroy, from an experiment by Brian Nigito, with feedback
|
|
from Yaron Minsky and Gerd Stolpmann)
|
|
|
|
Internals:
|
|
- Moved debugger/envaux.ml to typing/envaux.ml to publish env_of_only_summary
|
|
as part of compilerlibs, to be used on bin-annot files.
|
|
(Fabrice Le Fessant)
|
|
- The test suite can now be run without installing OCaml first.
|
|
(Damien Doligez)
|
|
|
|
Bug fixes:
|
|
- PR#3236: Document the fact that queues are not thread-safe
|
|
(Damien Doligez)
|
|
- PR#3468: (part 1) Sys_error documentation
|
|
(Damien Doligez)
|
|
- PR#3679: Warning display problems
|
|
(Fabrice Le Fessant)
|
|
- PR#3963: Graphics.wait_next_event in Win32 hangs if window closed
|
|
(Damien Doligez)
|
|
- PR#4079: Queue.copy is now tail-recursive
|
|
(patch by Christophe Papazian)
|
|
- PR#4138: Documentation for Unix.mkdir
|
|
(Damien Doligez)
|
|
- PR#4469: emacs mode: caml-set-compile-command is annoying with ocamlbuild
|
|
(Daniel Bünzli)
|
|
- PR#4485: Graphics: Keyboard events incorrectly delivered in native code
|
|
(Damien Doligez, report by Sharvil Nanavati)
|
|
- PR#4502: ocamlbuild now reliably excludes the build-dir from hygiene check
|
|
(Gabriel Scherer, report by Romain Bardou)
|
|
- PR#4762: ?? is not used at all, but registered as a lexer token
|
|
(Alain Frisch)
|
|
- PR#4788: wrong error message when executable file is not found for backtrace
|
|
(Damien Doligez, report by Claudio Sacerdoti Coen)
|
|
- PR#4812: otherlibs/unix: add extern int code_of_unix_error (value error);
|
|
(Goswin von Berdelow)
|
|
- PR#4887: input_char after close_in crashes ocaml (msvc runtime)
|
|
(Alain Frisch and Christoph Bauer, report by ygrek)
|
|
- PR#4994: ocaml-mode doesn't work with xemacs21
|
|
(Damien Doligez, report by Stéphane Glondu)
|
|
- PR#5098: creating module values may lead to memory leaks
|
|
(Alain Frisch, report by Milan Stanojević)
|
|
- PR#5102: ocamlbuild fails when using an unbound variable in rule dependency
|
|
(Xavier Clerc, report by Daniel Bünzli)
|
|
* PR#5119: camlp4 now raises a specific exception when 'DELETE_RULE' fails,
|
|
rather than raising 'Not_found'
|
|
(ygrek)
|
|
- PR#5121: %( %) in Format module seems to be broken
|
|
(Pierre Weis, first patch by Valentin Gatien-Baron, report by Khoo Yit Phang)
|
|
- PR#5178: document in INSTALL how to build a 32-bit version under Linux x86-64
|
|
(Benjamin Monate)
|
|
- PR#5212: Improve ocamlbuild error messages of _tags parser
|
|
(ygrek)
|
|
- PR#5240: register exception printers for Unix.Unix_error and Dynlink.Error
|
|
(Jérémie Dimino)
|
|
- PR#5300: ocamlbuild: verbose parameter should implicitly set classic display
|
|
(Xavier Clerc, report by Robert Jakob)
|
|
- PR#5327: (Windows) Unix.select blocks if same socket listed in first and
|
|
third arguments
|
|
(David Allsopp, displaying impressive MSDN skills)
|
|
- PR#5343: ocaml -rectypes is unsound wrt module subtyping (was still unsound)
|
|
(Jacques Garrigue)
|
|
- PR#5350: missing return code checks in the runtime system
|
|
(Xavier Leroy)
|
|
- PR#5468: ocamlbuild should preserve order of parametric tags
|
|
(Wojciech Meyer, report by Dario Texeira)
|
|
- PR#5551: Avoid repeated lookups for missing cmi files
|
|
(Alain Frisch)
|
|
- PR#5552: unrecognized gcc option -no-cpp-precomp
|
|
(Damien Doligez, report by Markus Mottl)
|
|
* PR#5580: missed opportunities for constant propagation
|
|
(Xavier Leroy and John Carr)
|
|
- PR#5611: avoid clashes betwen .cmo files and output files during linking
|
|
(Wojciech Meyer)
|
|
- PR#5662: typo in md5.c
|
|
(Olivier Andrieu)
|
|
- PR#5673: type equality in a polymorphic field
|
|
(Jacques Garrigue, report by Jean-Louis Giavitto)
|
|
- PR#5674: Methods call are 2 times slower with 4.00 than with 3.12
|
|
(Jacques Garrigue, Gabriel Scherer, report by Jean-Louis Giavitto)
|
|
- PR#5694: Exception raised by type checker
|
|
(Jacques Garrigue, report by Markus Mottl)
|
|
- PR#5695: remove warnings on sparc code emitter
|
|
(Fabrice Le Fessant)
|
|
- PR#5697: better location for warnings on statement expressions
|
|
(Dan Bensen)
|
|
- PR#5698: remove harcoded limit of 200000 labels in emitaux.ml
|
|
(Fabrice Le Fessant, report by Marcin Sawicki)
|
|
- PR#5702: bytecomp/bytelibrarian lib_sharedobjs was defined but never used
|
|
(Hongbo Zhang, Fabrice Le Fessant)
|
|
- PR#5708: catch Failure"int_of_string" in ocamldebug
|
|
(Fabrice Le Fessant, report by user 'schommer')
|
|
- PR#5712: (9) new option -bin-annot is not documented
|
|
(Damien Doligez, report by Hendrik Tews)
|
|
- PR#5731: instruction scheduling forgot to account for destroyed registers
|
|
(Xavier Leroy, Benedikt Meurer, reported by Jeffrey Scofield)
|
|
- PR#5734: improved Win32 implementation of Unix.gettimeofday
|
|
(David Allsopp)
|
|
- PR#5735: %apply and %revapply not first class citizens
|
|
(Fabrice Le Fessant, reported by Jun Furuse)
|
|
- PR#5738: first class module patterns not handled by ocamldep
|
|
(Fabrice Le Fessant, Jacques Garrigue, reported by Hongbo Zhang)
|
|
- PR#5739: Printf.printf "%F" (-.nan) returns -nan
|
|
(Xavier Leroy, David Allsopp, reported by Samuel Mimram)
|
|
- PR#5741: make pprintast.ml in compiler_libs
|
|
(Alain Frisch, Hongbo Zhang)
|
|
- PR#5747: 'unused open' warning not given when compiling with -annot
|
|
(Alain Frisch, reported by Valentin Gatien-Baron)
|
|
- PR#5752: missing dependencies at byte-code link with mlpack
|
|
(Wojciech Meyer, Nicholas Lucaroni)
|
|
- PR#5763: ocamlbuild does not give correct flags when running menhir
|
|
(Gabriel Scherer, reported by Philippe Veber)
|
|
- PR#5765: ocamllex doesn't preserve line directives
|
|
(Damien Doligez, reported by Martin Jambon)
|
|
- PR#5770: Syntax error messages involving unclosed parens are sometimes
|
|
incorrect
|
|
(Michel Mauny)
|
|
- PR#5772: problem with marshaling of mutually-recursive functions
|
|
(Jacques-Henri Jourdan, reported by Cédric Pasteur)
|
|
- PR#5775: several bug fixes for tools/pprintast.ml
|
|
(Hongbo Zhang)
|
|
- PR#5784: -dclambda option is ignored
|
|
(Pierre Chambart)
|
|
- PR#5785: misbehaviour with abstracted structural type used as GADT index
|
|
(Jacques Garrigue, report by Jeremy Yallop)
|
|
- PR#5787: Bad behavior of 'Unused ...' warnings in the toplevel
|
|
(Alain Frisch)
|
|
- PR#5793: integer marshalling is inconsistent between architectures
|
|
(Xavier Clerc, report by Pierre-Marie Pédrot)
|
|
- PR#5798: add ARM VFPv2 support for Raspbian (ocamlopt)
|
|
(Jeffrey Scofield and Anil Madhavapeddy, patch review by Benedikt Meurer)
|
|
- PR#5802: Avoiding "let" as a value name
|
|
(Jacques Garrigue, report by Tiphaine Turpin)
|
|
- PR#5805: Assert failure with warning 34 on pre-processed file
|
|
(Alain Frisch, report by Tiphaine Turpin)
|
|
- PR#5806: ensure that backtrace tests are always run (testsuite)
|
|
(Xavier Clerc, report by user 'michi')
|
|
- PR#5809: Generating .cmt files takes a long time, in case of type error
|
|
(Alain Frisch)
|
|
- PR#5810: error in switch printing when using -dclambda
|
|
(Pierre Chambart)
|
|
- PR#5811: Untypeast produces singleton tuples for constructor patterns
|
|
with only one argument
|
|
(Tiphaine Turpin)
|
|
- PR#5813: GC not called when unmarshaling repeatedly in a tight loop (ocamlopt)
|
|
(Xavier Leroy, report by David Waern)
|
|
- PR#5814: read_cmt -annot does not report internal references
|
|
(Alain Frisch)
|
|
- PR#5815: Multiple exceptions in signatures gives an error
|
|
(Leo White)
|
|
- PR#5816: read_cmt -annot does not work for partial .cmt files
|
|
(Alain Frisch)
|
|
- PR#5819: segfault when using [with] on large recursive record (ocamlopt)
|
|
(Xavier Leroy, Damien Doligez)
|
|
- PR#5821: Wrong record field is reported as duplicate
|
|
(Alain Frisch, report by Martin Jambon)
|
|
- PR#5824: Generate more efficient code for immediate right shifts.
|
|
(Pierre Chambart, review by Xavier Leroy)
|
|
- PR#5825: Add a toplevel primitive to use source file wrapped with the
|
|
coresponding module
|
|
(Grégoire Henry, Wojciech Meyer, caml-list discussion)
|
|
- PR#5833: README.win32 can leave the wrong flexlink in the path
|
|
(Damien Doligez, report by William Smith)
|
|
- PR#5835: nonoptional labeled arguments can be passed with '?'
|
|
(Jacques Garrigue, report by Elnatan Reisner)
|
|
- PR#5840: improved documentation for 'Unix.lseek'
|
|
(Xavier Clerc, report by Matej Košík)
|
|
- PR#5848: Assertion failure in type checker
|
|
(Jacques Garrigue, Alain Frisch, report by David Waern)
|
|
- PR#5858: Assert failure during typing of class
|
|
(Jacques Garrigue, report by Julien Signoles)
|
|
- PR#5865: assert failure when reporting undefined field label
|
|
(Jacques Garrigue, report by Anil Madhavapeddy)
|
|
- PR#5872: Performance: Buffer.add_char is not inlined
|
|
(Gerd Stolpmann, Damien Doligez)
|
|
- PR#5876: Uncaught exception with a typing error
|
|
(Alain Frisch, Gabriel Scherer, report by Julien Moutinho)
|
|
- PR#5877: multiple "open" can become expensive in memory
|
|
(Fabrice Le Fessant and Alain Frisch)
|
|
- PR#5880: 'Genlex.make_lexer' documention mentions the wrong exception
|
|
(Xavier Clerc, report by Virgile Prevosto)
|
|
- PR#5885: Incorrect rule for compiling C stubs when shared libraries are not
|
|
supported.
|
|
(Jérôme Vouillon)
|
|
- PR#5891: ocamlbuild: support rectypes tag for mlpack
|
|
(Khoo Yit Phang)
|
|
- PR#5892: GADT exhaustiveness check is broken
|
|
(Jacques Garrigue and Leo White)
|
|
- PR#5906: GADT exhaustiveness check is still broken
|
|
(Jacques Garrigue, report by Sébastien Briais)
|
|
- PR#5907: Undetected cycle during typecheck causes exceptions
|
|
(Jacques Garrigue, report by Pascal Zimmer)
|
|
- PR#5910: Fix code generation bug for "mod 1" on ARM.
|
|
(Benedikt Meurer, report by user 'jteg68')
|
|
- PR#5911: Signature substitutions fail in submodules
|
|
(Jacques Garrigue, report by Markus Mottl)
|
|
- PR#5912: add configure option -no-cfi (for OSX 10.6.x with XCode 4.0.2)
|
|
(Damien Doligez against XCode versions, report by Thomas Gazagnaire)
|
|
- PR#5914: Functor breaks with an equivalent argument signature
|
|
(Jacques Garrigue, report by Markus Mottl and Grégoire Henry)
|
|
- PR#5920, PR#5957: linking failure for big bytecodes on 32bit architectures
|
|
(Benoît Vaugon and Chet Murthy, report by Jun Furuse and Sebastien Mondet)
|
|
- PR#5928: Missing space between words in manual page for ocamlmktop
|
|
(Damien Doligez, report by Matej Košík)
|
|
- PR#5930: ocamldep leaks temporary preprocessing files
|
|
(Gabriel Scherer, report by Valentin Gatien-Baron)
|
|
- PR#5933: Linking is slow when there are functions with large arities
|
|
(Valentin Gatien-Baron, review by Gabriel Scherer)
|
|
- PR#5934: integer shift by negative amount (in otherlibs/num)
|
|
(Xavier Leroy, report by John Regehr)
|
|
- PR#5944: Bad typing performances of big variant type declaration
|
|
(Benoît Vaugon)
|
|
- PR#5945: Mix-up of Minor_heap_min and Minor_heap_max units
|
|
(Benoît Vaugon)
|
|
- PR#5948: GADT with polymorphic variants bug
|
|
(Jacques Garrigue, report by Leo White)
|
|
- PR#5953: Unix.system does not handle EINTR
|
|
(Jérémie Dimino)
|
|
- PR#5965: disallow auto-reference to a recursive module in its definition
|
|
(Alain Frisch, report by Arthur Windler via Gabriel Scherer)
|
|
- PR#5973: Format module incorrectly parses format string
|
|
(Pierre Weis, report by Frédéric Bour)
|
|
- PR#5974: better documentation for Str.regexp
|
|
(Damien Doligez, report by william)
|
|
- PR#5976: crash after recovering from two stack overflows (ocamlopt on MacOS X)
|
|
(Xavier Leroy, report by Pierre Boutillier)
|
|
- PR#5977: Build failure on raspberry pi: "input_value: integer too large"
|
|
(Alain Frisch, report by Sylvain Le Gall)
|
|
- PR#5981: Incompatibility check assumes abstracted types are injective
|
|
(Jacques Garrigue, report by Jeremy Yallop)
|
|
- PR#5982: caml_leave_blocking section and errno corruption
|
|
(Jérémie Dimino)
|
|
- PR#5985: Unexpected interaction between variance and GADTs
|
|
(Jacques Garrigue, Jeremy Yallop and Leo White and Gabriel Scherer)
|
|
- PR#5988: missing from the documentation: -impl is a valid flag for ocamlopt
|
|
(Damien Doligez, report by Vincent Bernardoff)
|
|
- PR#5989: Assumed inequalities involving private rows
|
|
(Jacques Garrigue, report by Jeremy Yallop)
|
|
- PR#5992: Crash when pattern-matching lazy values modifies the scrutinee
|
|
(Luc Maranget, Leo White)
|
|
- PR#5993: Variance of private type abbreviations not checked for modules
|
|
(Jacques Garrigue)
|
|
- PR#5997: Non-compatibility assumed for concrete types with same constructor
|
|
(Jacques Garrigue, report by Gabriel Scherer)
|
|
- PR#6004: Type information does not flow to "inherit" parameters
|
|
(Jacques Garrigue, report by Alain Frisch)
|
|
- PR#6005: Type unsoundness with recursive modules
|
|
(Jacques Garrigue, report by Jérémie Dimino and Josh Berdine)
|
|
- PR#6010: Big_int.extract_big_int gives wrong results on negative arguments
|
|
(Xavier Leroy, report by Drake Wilson via Stéphane Glondu)
|
|
- PR#6024: Format syntax for printing @ is incompatible with 3.12.1
|
|
(Damien Doligez, report by Boris Yakobowski)
|
|
- PR#6001: Reduce the memory used by compiling Camlp4
|
|
(Hongbo Zhang and Gabriel Scherer, report by Henri Gouraud)
|
|
- PR#6031: Camomile problem with -with-frame-pointers
|
|
(Fabrice Le Fessant, report by Anil Madhavapeddy)
|
|
- PR#6032: better Random.self_init under Windows
|
|
(Alain Frisch, Xavier Leroy)
|
|
- PR#6033: Matching.inline_lazy_force needs eta-expansion (command-line flags)
|
|
(Pierre Chambart, Xavier Leroy and Luc Maranget,
|
|
regression report by Gabriel Scherer)
|
|
- PR#6046: testsuite picks up the wrong ocamlrun dlls
|
|
(Anil Madhavapeddy)
|
|
- PR#6056: Using 'match' prevents generalization of values
|
|
(Jacques Garrigue, report by Elnatan Reisner)
|
|
- PR#6058: 'ocamlbuild -use-ocamlfind -tag thread -package threads t.cma' fails
|
|
(Gabriel Scherer, report by Hezekiah M. Carty)
|
|
- PR#6069: ocamldoc: lexing: empty token
|
|
(Maxence Guesdon, Grégoire Henry, report by ygrek)
|
|
- PR#6072: configure does not handle FreeBSD current (i.e. 10) correctly
|
|
(Damien Doligez, report by Prashanth Mundkur)
|
|
- PR#6074: Wrong error message for failing Condition.broadcast
|
|
(Markus Mottl)
|
|
- PR#6084: Define caml_modify and caml_initialize as weak symbols to help
|
|
with Netmulticore
|
|
(Xavier Leroy, Gerd Stolpmann)
|
|
- PR#6090: Module constraint + private type seems broken in ocaml 4.01.0
|
|
(Jacques Garrigue, report by Jacques-Pascal Deplaix)
|
|
- PR#6109: Typos in ocamlbuild error messages
|
|
(Gabriel Kerneis)
|
|
- PR#6123: Assert failure when self escapes its class
|
|
(Jacques Garrigue, report by whitequark)
|
|
- PR#6158: Fatal error using GADTs
|
|
(Jacques Garrigue, report by Jeremy Yallop)
|
|
- PR#6163: Assert_failure using polymorphic variants in GADTs
|
|
(Jacques Garrigue, report by Leo White)
|
|
- PR#6164: segmentation fault on Num.power_num of 0/1
|
|
(Fabrice Le Fessant, report by Johannes Kanig)
|
|
- PR#6210: Camlp4 location error
|
|
(Hongbo Zhang, report by Jun Furuse)
|
|
|
|
Feature wishes:
|
|
- PR#5181: Merge common floating point constants in ocamlopt
|
|
(Benedikt Meurer)
|
|
- PR#5243: improve the ocamlbuild API documentation in signatures.mli
|
|
(Christophe Troestler)
|
|
- PR#5546: moving a function into an internal module slows down its use
|
|
(Alain Frisch, report by Fabrice Le Fessant)
|
|
- PR#5597: add instruction trace option 't' to OCAMLRUNPARAM
|
|
(Anil Madhavapeddy, Wojciech Meyer)
|
|
- PR#5676: IPv6 support under Windows
|
|
(Jérôme Vouillon, review by Jonathan Protzenko)
|
|
- PR#5721: configure -with-frame-pointers for Linux perf profiling
|
|
(Fabrice Le Fessant, test by Jérémie Dimino)
|
|
- PR#5722: toplevel: print full module path only for first record field
|
|
(Jacques Garrigue, report by ygrek)
|
|
- PR#5762: Add primitives for fast access to bigarray dimensions
|
|
(Pierre Chambart)
|
|
- PR#5769: Allow propagation of Sys.big_endian in native code
|
|
(Pierre Chambart, stealth commit by Fabrice Le Fessant)
|
|
- PR#5771: Add primitives for reading 2, 4, 8 bytes in strings and bigarrays
|
|
(Pierre Chambart)
|
|
- PR#5774: Add bswap primitives for amd64 and arm
|
|
(Pierre Chambart, test by Alain Frisch)
|
|
- PR#5795: Generate sqrtsd opcode instead of external call to sqrt on amd64
|
|
(Pierre Chambart)
|
|
- PR#5827: provide a dynamic command line parsing mechanism
|
|
(Hongbo Zhang)
|
|
- PR#5832: patch to improve "wrong file naming" error messages
|
|
(William Smith)
|
|
- PR#5864: Add a find operation to Set
|
|
(François Berenger)
|
|
- PR#5886: Small changes to compile for Android
|
|
(Jérôme Vouillon, review by Benedikt Meurer)
|
|
- PR#5902: -ppx based pre-processor executables accept arguments
|
|
(Alain Frisch, report by Wojciech Meyer)
|
|
- PR#5986: Protect against marshaling 64-bit integers in bytecode
|
|
(Xavier Leroy, report by Alain Frisch)
|
|
- PR#6049: support for OpenBSD/macppc platform
|
|
(Anil Madhavapeddy, review by Benedikt Meurer)
|
|
- PR#6059: add -output-obj rules for ocamlbuild
|
|
(Anil Madhavapeddy)
|
|
- PR#6060: ocamlbuild tags 'principal', 'strict_sequence' and 'short_paths'
|
|
(Anil Madhavapeddy)
|
|
- ocamlbuild tag 'no_alias_deps'
|
|
(Daniel Bünzli)
|
|
|
|
Tools:
|
|
- OCamlbuild now features a bin_annot tag to generate .cmt files.
|
|
(Jonathan Protzenko)
|
|
- OCamlbuild now features a strict_sequence tag to trigger the
|
|
strict-sequence option.
|
|
(Jonathan Protzenko)
|
|
- OCamlbuild now picks the non-core tools like ocamlfind and menhir from PATH
|
|
(Wojciech Meyer)
|
|
- PR#5884: Misc minor fixes and cleanup for emacs mode
|
|
(Stefan Monnier)
|
|
- PR#6030: Improve performance of -annot
|
|
(Guillaume Melquiond, Alain Frisch)
|
|
|
|
|
|
OCaml 4.00.1 (5 Oct 2012):
|
|
--------------------------
|
|
|
|
Bug fixes:
|
|
- PR#4019: better documentation of Str.matched_string
|
|
- PR#5111: ocamldoc, heading tags inside spans tags is illegal in html
|
|
- PR#5278: better error message when typing "make"
|
|
- PR#5468: ocamlbuild should preserve order of parametric tags
|
|
- PR#5563: harden Unix.select against file descriptors above FD_SETSIZE
|
|
- PR#5690: "ocamldoc ... -text README" raises exception
|
|
- PR#5700: crash with native-code stack backtraces under MacOS 10.8 x86-64
|
|
- PR#5707: AMD64 code generator: do not use r10 and r11 for parameter passing,
|
|
as these registers can be destroyed by the dynamic loader
|
|
- PR#5712: some documentation problems
|
|
- PR#5715: configuring with -no-shared-libs breaks under cygwin
|
|
- PR#5718: false positive on 'unused constructor' warning
|
|
- PR#5719: ocamlyacc generates code that is not warning 33-compliant
|
|
- PR#5725: ocamldoc output of preformatted code
|
|
- PR#5727: emacs caml-mode indents shebang line in toplevel scripts
|
|
- PR#5729: tools/untypeast.ml creates unary Pexp_tuple
|
|
- PR#5731: instruction scheduling forgot to account for destroyed registers
|
|
- PR#5735: %apply and %revapply not first class citizens
|
|
- PR#5738: first class module patterns not handled by ocamldep
|
|
- PR#5742: missing bound checks in Array.sub
|
|
- PR#5744: ocamldoc error on "val virtual"
|
|
- PR#5757: GC compaction bug (crash)
|
|
- PR#5758: Compiler bug when matching on floats
|
|
- PR#5761: Incorrect bigarray custom block size
|
|
|
|
|
|
OCaml 4.00.0 (26 Jul 2012):
|
|
---------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*")
|
|
|
|
- The official name of the language is now OCaml.
|
|
|
|
Language features:
|
|
- Added Generalized Algebraic Data Types (GADTs) to the language.
|
|
See chapter "Language extensions" of the reference manual for documentation.
|
|
- It is now possible to omit type annotations when packing and unpacking
|
|
first-class modules. The type-checker attempts to infer it from the context.
|
|
Using the -principal option guarantees forward compatibility.
|
|
- New (module M) and (module M : S) syntax in patterns, for immediate
|
|
unpacking of a first-class module.
|
|
|
|
Compilers:
|
|
- Revised simplification of let-alias (PR#5205, PR#5288)
|
|
- Better reporting of compiler version mismatch in .cmi files
|
|
* Warning 28 is now enabled by default.
|
|
- New option -absname to use absolute paths in error messages
|
|
- Optimize away compile-time beta-redexes, e.g. (fun x y -> e) a b.
|
|
- Added option -bin-annot to dump the AST with type annotations.
|
|
- Added lots of new warnings about unused variables, opens, fields,
|
|
constructors, etc.
|
|
* New meaning for warning 7: it is now triggered when a method is overridden
|
|
with the "method" keyword. Use "method!" to avoid the warning.
|
|
|
|
Native-code compiler:
|
|
- Optimized handling of partially-applied functions (PR#5287)
|
|
- Small improvements in code generated for array bounds checks (PR#5345,
|
|
PR#5360).
|
|
* New ARM backend (PR#5433):
|
|
. Supports both Linux/EABI (armel) and Linux/EABI+VFPv3 (armhf).
|
|
. Added support for the Thumb-2 instruction set with average code size
|
|
savings of 28%.
|
|
. Added support for position-independent code, natdynlink, profiling and
|
|
exception backtraces.
|
|
- Generation of CFI information, and filename/line number debugging (with -g)
|
|
annotations, enabling in particular precise stack backtraces with
|
|
the gdb debugger. Currently supported for x86 32-bits and 64-bits only.
|
|
(PR#5487)
|
|
- New tool: ocamloptp, the equivalent of ocamlcp for the native-code compiler.
|
|
|
|
OCamldoc:
|
|
- PR#5645: ocamldoc doesn't handle module/type substitution in signatures
|
|
- PR#5544: improve HTML output (less formatting in html code)
|
|
- PR#5522: allow refering to record fields and variant constructors
|
|
- fix PR#5419 (error message in french)
|
|
- fix PR#5535 (no cross ref to class after dump+load)
|
|
* Use first class modules for custom generators, to be able to
|
|
load various plugins incrementally adding features to the current
|
|
generator
|
|
* PR#5507: Use Location.t structures for locations.
|
|
- fix: do not keep code when not told to keep code.
|
|
|
|
Standard library:
|
|
- Added float functions "hypot" and "copysign" (PR#3806, PR#4752, PR#5246)
|
|
* Arg: options with empty doc strings are no longer included in the usage string
|
|
(PR#5437)
|
|
- Array: faster implementations of "blit", "copy", "sub", "append" and "concat"
|
|
(PR#2395, PR#2787, PR#4591)
|
|
* Hashtbl:
|
|
. Statistically-better generic hash function based on Murmur 3 (PR#5225)
|
|
. Fixed behavior of generic hash function w.r.t. -0.0 and NaN (PR#5222)
|
|
. Added optional "random" parameter to Hashtbl.create to randomize
|
|
collision patterns and improve security (PR#5572, CVE-2012-0839)
|
|
. Added "randomize" function and "R" parameter to OCAMLRUNPARAM
|
|
to turn randomization on by default (PR#5572, CVE-2012-0839)
|
|
. Added new functorial interface "MakeSeeded" to support randomization
|
|
with user-provided seeded hash functions.
|
|
. Install new header <caml/hash.h> for C code.
|
|
- Filename: on-demand (lazy) initialization of the PRNG used by "temp_file".
|
|
- Marshal: marshalling of function values (flag Marshal.Closures) now
|
|
also works for functions that come from dynamically-loaded modules (PR#5215)
|
|
- Random:
|
|
. More random initialization (Random.self_init()), using /dev/urandom
|
|
when available (e.g. Linux, FreeBSD, MacOS X, Solaris)
|
|
* Faster implementation of Random.float (changes the generated sequences)
|
|
- Format strings for formatted input/output revised to correct PR#5380
|
|
. Consistently treat %@ as a plain @ character
|
|
. Consistently treat %% as a plain % character
|
|
- Scanf: width and precision for floating point numbers are now handled
|
|
- Scanf: new function "unescaped" (PR#3888)
|
|
- Set and Map: more efficient implementation of "filter" and "partition"
|
|
- String: new function "map" (PR#3888)
|
|
|
|
Installation procedure:
|
|
- Compiler internals are now installed in `ocamlc -where`/compiler-libs.
|
|
The files available there include the .cmi interfaces for all compiler
|
|
modules, plus the following libraries:
|
|
ocamlcommon.cma/.cmxa modules common to ocamlc, ocamlopt, ocaml
|
|
ocamlbytecomp.cma/.cmxa modules for ocamlc and ocaml
|
|
ocamloptcomp.cma/.cmxa modules specific to ocamlopt
|
|
ocamltoplevel.cma modules specific to ocaml
|
|
(PR#1804, PR#4653, frequently-asked feature).
|
|
* Some .cmi for toplevel internals that used to be installed in
|
|
`ocamlc -where` are now to be found in `ocamlc -where`/compiler-libs.
|
|
Add "-I +compiler-libs" where needed.
|
|
* toplevellib.cma is no longer installed because subsumed by
|
|
ocamlcommon.cma ocamlbytecomp.cma ocamltoplevel.cma
|
|
- Added a configuration option (-with-debug-runtime) to compile and install
|
|
a debug version of the runtime system, and a compiler option
|
|
(-runtime-variant) to select the debug runtime.
|
|
|
|
Bug Fixes:
|
|
|
|
- PR#1643: functions of the Lazy module whose named started with 'lazy_' have
|
|
been deprecated, and new ones without the prefix added
|
|
- PR#3571: in Bigarrays, call msync() before unmapping to commit changes
|
|
- PR#4292: various documentation problems
|
|
- PR#4511, PR#4838: local modules remove polymorphism
|
|
* PR#4549: Filename.dirname is not handling multiple / on Unix
|
|
- PR#4688: (Windows) special floating-point values aren't converted to strings
|
|
correctly
|
|
- PR#4697: Unix.putenv leaks memory on failure
|
|
- PR#4705: camlp4 does not allow to define types with `True or `False
|
|
- PR#4746: wrong detection of stack overflows in native code under Linux
|
|
- PR#4869: rare collisions between assembly labels for code and data
|
|
- PR#4880: "assert" constructs now show up in the exception stack backtrace
|
|
- PR#4892: Array.set could raise "out of bounds" before evaluating 3rd arg
|
|
- PR#4937: camlp4 incorrectly handles optional arguments if 'option' is
|
|
redefined
|
|
- PR#5024: camlp4r now handles underscores in irrefutable pattern matching of
|
|
records
|
|
- PR#5064, PR#5485: try to ensure that 4K words of stack are available
|
|
before calling into C functions, raising a Stack_overflow exception
|
|
otherwise. This reduces (but does not eliminate) the risk of
|
|
segmentation faults due to stack overflow in C code
|
|
- PR#5073: wrong location for 'Unbound record field label' error
|
|
- PR#5084: sub-sub-module building fails for native code compilation
|
|
- PR#5120: fix the output function of Camlp4.Debug.formatter
|
|
- PR#5131: compilation of custom runtime with g++ generates lots of warnings
|
|
- PR#5137: caml-types-explore does not work
|
|
- PR#5159: better documentation of type Lexing.position
|
|
- PR#5171: Map.join does more comparisons than needed
|
|
- PR#5176: emacs mode: stack overflow in regexp matcher
|
|
- PR#5179: port OCaml to mingw-w64
|
|
- PR#5211: updated Genlex documentation to state that camlp4 is mandatory for
|
|
'parser' keyword and associated notation
|
|
- PR#5214: ocamlfind plugin invokes 'cut' utility
|
|
- PR#5218: use $(MAKE) instead of "make" in Makefiles
|
|
- PR#5224: confusing error message in non-regular type definition
|
|
- PR#5231: camlp4: fix parsing of <:str_item< type t = $x$ >>
|
|
- PR#5233: finaliser on weak array gives dangling pointers (crash)
|
|
- PR#5238, PR#5277: Sys_error when getting error location
|
|
- PR#5261, PR#5497: Ocaml source-code examples are not "copy-paste-able"
|
|
* PR#5279: executable name is not initialized properly in caml_startup_code
|
|
- PR#5290: added hash functions for channels, nats, mutexes, conditions
|
|
- PR#5291: undetected loop in class initialization
|
|
- PR#5295: OS threads: problem with caml_c_thread_unregister()
|
|
- PR#5301: camlp4r and exception equal to another one with parameters
|
|
- PR#5305: prevent ocamlbuild from complaining about links to _build/
|
|
- PR#5306: comparing to Thread.self() raises exception at runtime
|
|
- PR#5309: Queue.add is not thread/signal safe
|
|
- PR#5310: Ratio.create_ratio/create_normalized_ratio have misleading names
|
|
- PR#5311: better message for warning 23
|
|
* PR#5312: command-line arguments @reponsefile auto-expansion feature
|
|
removed from the Windows OCaml runtime, to avoid conflicts with "-w @..."
|
|
- PR#5313: ocamlopt -g misses optimizations
|
|
- PR#5214: ocamlfind plugin invokes 'cut' utility
|
|
- PR#5316: objinfo now shows ccopts/ccobjs/force_link when applicable
|
|
- PR#5318: segfault on stack overflow when reading marshaled data
|
|
- PR#5319: %r11 clobbered by Lswitch in Windows AMD64 native-code compilation
|
|
- PR#5322: type abbreviations expanding to a universal type variable
|
|
- PR#5328: under Windows, Unix.select leaves sockets in non-blocking mode
|
|
- PR#5330: thread tag with '.top' and '.inferred.mli' targets
|
|
- PR#5331: ocamlmktop is not always a shell script
|
|
- PR#5335: Unix.environment segfaults after a call to clearenv
|
|
- PR#5338: sanitize.sh has windows style end-of-lines (mingw)
|
|
- PR#5344: some predefined exceptions need special printing
|
|
- PR#5349: Hashtbl.replace uses new key instead of reusing old key
|
|
- PR#5356: ocamlbuild handling of 'predicates' for ocamlfind
|
|
- PR#5364: wrong compilation of "((val m : SIG1) : SIG2)"
|
|
- PR#5370: ocamldep omits filename in syntax error message
|
|
- PR#5374: camlp4 creates wrong location for type definitions
|
|
- PR#5380: strange sscanf input segfault
|
|
- PR#5382: EOPNOTSUPP and ENOTSUPP different on exotic platforms
|
|
- PR#5383: build failure in Win32/MSVC
|
|
- PR#5387: camlp4: str_item and other syntactic elements with Nils are
|
|
not very usable
|
|
- PR#5389: compaction sometimes leaves a very large heap
|
|
- PR#5393: fails to build from source on GNU/kFreeBSD because of -R link option
|
|
- PR#5394: documentation for -dtypes is missing in manpage
|
|
- PR#5397: Filename.temp_dir_name should be mutable
|
|
- PR#5410: fix printing of class application with Camlp4
|
|
- PR#5416: (Windows) Unix.(set|clear)_close_on_exec now preserves blocking mode
|
|
- PR#5435: ocamlbuild does not find .opt executables on Windows
|
|
- PR#5436: update object ids on unmarshaling
|
|
- PR#5442: camlp4: quotation issue with strings
|
|
- PR#5453: configure doesn't find X11 under Ubuntu/MultiarchSpec
|
|
- PR#5461: Double linking of bytecode modules
|
|
- PR#5463: Bigarray.*.map_file fail if empty array is requested
|
|
- PR#5465: increase stack size of ocamlopt.opt for windows
|
|
- PR#5469: private record type generated by functor loses abbreviation
|
|
- PR#5475: Wrapper script for interpreted LablTk wrongly handles command line
|
|
parameters
|
|
- PR#5476: bug in native code compilation of let rec on float arrays
|
|
- PR#5477: use pkg-config to configure graphics on linux
|
|
- PR#5481: update camlp4 magic numbers
|
|
- PR#5482: remove bashism in test suite scripts
|
|
- PR#5495: camlp4o dies on infix definition (or)
|
|
- PR#5498: Unification with an empty object only checks the absence of
|
|
the first method
|
|
- PR#5503: error when ocamlbuild is passed an absolute path as build directory
|
|
- PR#5509: misclassification of statically-allocated empty array that
|
|
falls exactly at beginning of an otherwise unused data page.
|
|
- PR#5510: ocamldep has duplicate -ml{,i}-synonym options
|
|
- PR#5511: in Bigarray.reshape, unwarranted limitation on new array dimensions.
|
|
- PR#5513: Int64.div causes floating point exception (ocamlopt, x86)
|
|
- PR#5516: in Bigarray C stubs, use C99 flexible array types if possible
|
|
- PR#5518: segfault with lazy empty array
|
|
- PR#5531: Allow ocamlbuild to add ocamldoc flags through -docflag
|
|
and -docflags switches
|
|
- PR#5538: combining -i and -annot in ocamlc
|
|
- PR#5543: in Bigarray.map_file, try to avoid using lseek() when growing file
|
|
- PR#5648: (probably fixed) test failures in tests/lib-threads
|
|
- PR#5551: repeated calls to find_in_path degrade performance
|
|
- PR#5552: Mac OS X: unrecognized gcc option "-no-cpp-precomp"
|
|
- PR#5555: add Hashtbl.reset to resize the bucket table to its initial size
|
|
- PR#5560: incompatible type for tuple pattern with -principal
|
|
- PR#5575: Random states are not marshallable across architectures
|
|
- PR#5579: camlp4: when a plugin is loaded in the toplevel,
|
|
Token.Filter.define_filter has no effect before the first syntax error
|
|
- PR#5585: typo: "explicitely"
|
|
- PR#5587: documentation: "allows to" is not correct English
|
|
- PR#5593: remove C file when -output-obj fails
|
|
- PR#5597: register names for instrtrace primitives in embedded bytecode
|
|
- PR#5598: add backslash-space support in strings in ocamllex
|
|
- PR#5603: wrong .file debug info generated by ocamlopt -g
|
|
- PR#5604: fix permissions of files created by ocamlbuild itself
|
|
- PR#5610: new unmarshaler (from PR#5318) fails to freshen object identifiers
|
|
- PR#5614: add missing -linkall flag when compiling ocamldoc.opt
|
|
- PR#5616: move ocamlbuild documentation to the reference manual
|
|
- PR#5619: Uncaught CType.Unify exception in the compiler
|
|
- PR#5620: invalid printing of type manifest (camlp4 revised syntax)
|
|
- PR#5637: invalid printing of anonymous type parameters (camlp4 revised syntax)
|
|
- PR#5643: issues with .cfi and .loc directives generated by ocamlopt -g
|
|
- PR#5644: Stream.count broken when used with Sapp or Slazy nodes
|
|
- PR#5647: Cannot use install_printer in debugger
|
|
- PR#5651: printer for abstract data type (camlp4 revised syntax)
|
|
- PR#5654: self pattern variable location tweak
|
|
- PR#5655: ocamlbuild doesn't pass cflags when building C stubs
|
|
- PR#5657: wrong error location for abbreviated record fields
|
|
- PR#5659: ocamlmklib -L option breaks with MSVC
|
|
- PR#5661: fixes for the test suite
|
|
- PR#5668: Camlp4 produces invalid syntax for "let _ = ..."
|
|
- PR#5671: initialization of compare_ext field in caml_final_custom_operations()
|
|
- PR#5677: do not use "value" as identifier (genprintval.ml)
|
|
- PR#5687: dynlink broken when used from "output-obj" main program (bytecode)
|
|
- problem with printing of string literals in camlp4 (reported on caml-list)
|
|
- emacs mode: colorization of comments and strings now works correctly
|
|
- problem with forall and method (reported on caml-list on 2011-07-26)
|
|
- crash when using OCAMLRUNPARAM=a=X with invalid X (reported in private)
|
|
|
|
Feature wishes:
|
|
- PR#352: new option "-stdin" to make ocaml read stdin as a script
|
|
- PR#1164: better error message when mixing -a and .cmxa
|
|
- PR#1284: documentation: remove restriction on mixed streams
|
|
- PR#1496: allow configuring LIBDIR, BINDIR, and MANDIR relative to $(PREFIX)
|
|
- PR#1835: add Digest.from_hex
|
|
- PR#1898: toplevel: add option to suppress continuation prompts
|
|
- PR#4278: configure: option to disable "graph" library
|
|
- PR#4444: new String.trim function, removing leading and trailing whistespace
|
|
- PR#4549: make Filename.dirname/basename POSIX compliant
|
|
- PR#4830: add option -v to expunge.ml
|
|
- PR#4898: new Sys.big_endian boolean for machine endianness
|
|
- PR#4963, PR#5467: no extern "C" into ocaml C-stub headers
|
|
- PR#5199: tests are run only for bytecode if either native support is missing,
|
|
or a non-empty value is set to "BYTECODE_ONLY" Makefile variable
|
|
- PR#5215: marshalling of dynlinked closure
|
|
- PR#5236: new '%revapply' primitive with the semantics 'revapply x f = f x',
|
|
and '%apply' with semantics 'apply f x = f x'.
|
|
- PR#5255: natdynlink detection on powerpc, hurd, sparc
|
|
- PR#5295: OS threads: problem with caml_c_thread_unregister()
|
|
- PR#5297: compiler now checks existence of builtin primitives
|
|
- PR#5329: (Windows) more efficient Unix.select if all fd's are sockets
|
|
- PR#5357: warning for useless open statements
|
|
- PR#5358: first class modules don't allow "with type" declarations for types
|
|
in sub-modules
|
|
- PR#5385: configure: emit a warning when MACOSX_DEPLOYMENT_TARGET is set
|
|
- PR#5396: ocamldep: add options -sort, -all, and -one-line
|
|
- PR#5397: Filename.temp_dir_name should be mutable
|
|
- PR#5403: give better error message when emacs is not found in PATH
|
|
- PR#5411: new directive for the toplevel: #load_rec
|
|
- PR#5420: Unix.openfile share mode (Windows)
|
|
- PR#5421: Unix: do not leak fds in various open_proc* functions
|
|
- PR#5434: implement Unix.times in win32unix (partially)
|
|
- PR#5438: new warnings for unused declarations
|
|
- PR#5439: upgrade config.guess and config.sub
|
|
- PR#5445 and others: better printing of types with user-provided names
|
|
- PR#5454: Digest.compare is missing and md5 doc update
|
|
- PR#5455: .emacs instructions, add lines to recognize ocaml scripts
|
|
- PR#5456: pa_macro: replace __LOCATION__ after macro expansion; add LOCATION_OF
|
|
- PR#5461: bytecode: emit warning when linking two modules with the same name
|
|
- PR#5478: ocamlopt assumes ar command exists
|
|
- PR#5479: Num.num_of_string may raise an exception, not reflected in the
|
|
documentation.
|
|
- PR#5501: increase IO_BUFFER_SIZE to 64KiB
|
|
- PR#5532: improve error message when bytecode file is wrong
|
|
- PR#5555: add function Hashtbl.reset to resize the bucket table to
|
|
its initial size.
|
|
- PR#5586: increase UNIX_BUFFER_SIZE to 64KiB
|
|
- PR#5597: register names for instrtrace primitives in embedded bytecode
|
|
- PR#5599: Add warn() tag in ocamlbuild to control -w compiler switch
|
|
- PR#5628: add #remove_directory and Topdirs.remove_directory to remove
|
|
a directory from the load path
|
|
- PR#5636: in system threads library, issue with linking of pthread_atfork
|
|
- PR#5666: C includes don't provide a revision number
|
|
- ocamldebug: ability to inspect values that contain code pointers
|
|
- ocamldebug: new 'environment' directive to set environment variables
|
|
for debuggee
|
|
- configure: add -no-camlp4 option
|
|
|
|
Shedding weight:
|
|
* Removed the obsolete native-code generators for Alpha, HPPA, IA64 and MIPS.
|
|
* The "DBM" library (interface with Unix DBM key-value stores) is no
|
|
longer part of this distribution. It now lives its own life at
|
|
https://forge.ocamlcore.org/projects/camldbm/
|
|
* The "OCamlWin" toplevel user interface for MS Windows is no longer
|
|
part of this distribution. It now lives its own life at
|
|
https://forge.ocamlcore.org/projects/ocamltopwin/
|
|
|
|
Other changes:
|
|
- Copy VERSION file to library directory when installing.
|
|
|
|
|
|
OCaml 3.12.1 (4 Jul 2011):
|
|
--------------------------
|
|
|
|
Bug fixes:
|
|
- PR#4345, PR#4767: problems with camlp4 printing of float values
|
|
- PR#4380: ocamlbuild should not use tput on windows
|
|
- PR#4487, PR#5164: multiple 'module type of' are incompatible
|
|
- PR#4552: ocamlbuild does not create symlinks when using '.itarget' file
|
|
- PR#4673, PR#5144: camlp4 fails on object copy syntax
|
|
- PR#4702: system threads: cleanup tick thread at exit
|
|
- PR#4732: camlp4 rejects polymorphic variants using keywords from macros
|
|
- PR#4778: Win32/MSVC port: rare syntax error in generated MASM assembly file
|
|
- PR#4794, PR#4959: call annotations not generated by ocamlopt
|
|
- PR#4820: revised syntax pretty printer crashes with 'Stack_overflow'
|
|
- PR#4928: wrong printing of classes and class types by camlp4
|
|
- PR#4939: camlp4 rejects patterns of the '?x:_' form
|
|
- PR#4967: ocamlbuild passes wrong switches to ocamldep through menhir
|
|
- PR#4972: mkcamlp4 does not include 'dynlink.cma'
|
|
- PR#5039: ocamlbuild should use '-linkpkg' only when linking programs
|
|
- PR#5066: ocamldoc: add -charset option used in html generator
|
|
- PR#5069: fcntl() in caml_sys_open may block, do it within blocking section
|
|
- PR#5071, PR#5129, PR#5134: inconsistencies between camlp4 and camlp4* binaries
|
|
- PR#5080, PR#5104: regression in type constructor handling by camlp4
|
|
- PR#5090: bad interaction between toplevel and camlp4
|
|
- PR#5095: ocamlbuild ignores some tags when building bytecode objects
|
|
- PR#5100: ocamlbuild always rebuilds a 'cmxs' file
|
|
- PR#5103: build and install objinfo when building with ocamlbuild
|
|
- PR#5109: crash when a parser calls a lexer that calls another parser
|
|
- PR#5110: invalid module name when using optional argument
|
|
- PR#5115: bytecode executables produced by msvc64 port crash on 32-bit versions
|
|
- PR#5117: bigarray: wrong function name without HAS_MMAP; missing include
|
|
- PR#5118: Camlp4o and integer literals
|
|
- PR#5122: camlp4 rejects lowercase identifiers for module types
|
|
- PR#5123: shift_right_big_int returns a wrong zero
|
|
- PR#5124: substitution inside a signature leads to odd printing
|
|
- PR#5128: typo in 'Camlp4ListComprehension' syntax extension
|
|
- PR#5136: obsolete function used in emacs mode
|
|
- PR#5145: ocamldoc: missing html escapes
|
|
- PR#5146: problem with spaces in multi-line string constants
|
|
- PR#5149: (partial) various documentation problems
|
|
- PR#5156: rare compiler crash with objects
|
|
- PR#5165: ocamlbuild does not pass '-thread' option to ocamlfind
|
|
- PR#5167: camlp4r loops when printing package type
|
|
- PR#5172: camlp4 support for 'module type of' construct
|
|
- PR#5175: in bigarray accesses, make sure bigarray expr is evaluated only once
|
|
- PR#5177: Gc.compact implies Gc.full_major
|
|
- PR#5182: use bytecode version of ocamldoc to generate man pages
|
|
- PR#5184: under Windows, alignment issue with bigarrays mapped from files
|
|
- PR#5188: double-free corruption in bytecode system threads
|
|
- PR#5192: mismatch between words and bytes in interpreting max_young_wosize
|
|
- PR#5202: error in documentation of atan2
|
|
- PR#5209: natdynlink incorrectly detected on BSD systems
|
|
- PR#5213: ocamlbuild should pass '-rectypes' to ocamldoc when needed
|
|
- PR#5217: ocamlfind plugin should add '-linkpkg' for toplevel
|
|
- PR#5228: document the exceptions raised by functions in 'Filename'
|
|
- PR#5229: typo in build script ('TAG_LINE' vs 'TAGLINE')
|
|
- PR#5230: error in documentation of Scanf.Scanning.open_in
|
|
- PR#5234: option -shared reverses order of -cclib options
|
|
- PR#5237: incorrect .size directives generated for x86-32 and x86-64
|
|
- PR#5244: String.compare uses polymorphic compare_val (regression of PR#4194)
|
|
- PR#5248: regression introduced while fixing PR#5118
|
|
- PR#5252: typo in docs
|
|
- PR#5258: win32unix: unix fd leak under windows
|
|
- PR#5269: (tentative fix) Wrong ext_ref entries in .annot files
|
|
- PR#5272: caml.el doesn't recognize downto as a keyword
|
|
- PR#5276: issue with ocamlc -pack and recursively-packed modules
|
|
- PR#5280: alignment constraints incorrectly autodetected on MIPS 32
|
|
- PR#5281: typo in error message
|
|
- PR#5308: unused variables not detected in "include (struct .. end)"
|
|
- camlp4 revised syntax printing bug in the toplevel (reported on caml-list)
|
|
- configure: do not define _WIN32 under cygwin
|
|
- Hardened generic comparison in the case where two custom blocks
|
|
are compared and have different sets of custom operations.
|
|
- Hardened comparison between bigarrays in the case where the two
|
|
bigarrays have different kinds.
|
|
- Fixed wrong autodetection of expm1() and log1p().
|
|
- don't add .exe suffix when installing the ocamlmktop shell script
|
|
- ocamldoc: minor fixes related to the display of ocamldoc options
|
|
- fixed bug with huge values in OCAMLRUNPARAM
|
|
- mismatch between declaration and definition of caml_major_collection_slice
|
|
|
|
Feature wishes:
|
|
- PR#4992: added '-ml-synonym' and '-mli-synonym' options to ocamldep
|
|
- PR#5065: added '-ocamldoc' option to ocamlbuild
|
|
- PR#5139: added possibility to add options to ocamlbuild
|
|
- PR#5158: added access to current camlp4 parsers and printers
|
|
- PR#5180: improved instruction selection for float operations on amd64
|
|
- stdlib: added a 'usage_string' function to Arg
|
|
- allow with constraints to add a type equation to a datatype definition
|
|
- ocamldoc: allow to merge '@before' tags like other ones
|
|
- ocamlbuild: allow dependency on file "_oasis"
|
|
|
|
Other changes:
|
|
- Changed default minor heap size from 32k to 256k words.
|
|
- Added new operation 'compare_ext' to custom blocks, called when
|
|
comparing a custom block value with an unboxed integer.
|
|
|
|
|
|
Objective Caml 3.12.0 (2 Aug 2010):
|
|
-----------------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*" )
|
|
|
|
Language features:
|
|
- Shorthand notation for records: in expressions and patterns,
|
|
{ lbl } stands for { lbl = lbl } and { M.lbl } for { M.lbl = lbl }
|
|
- Record patterns of the form { lbl = pat; _ } to mark that not all
|
|
labels are listed, purposefully. (See new warning below.)
|
|
- Explicit naming of a generic type; in an expression
|
|
"fun ... (type t) ... -> e", the type t is considered abstract in its
|
|
scope (the arguments that follow it and the body of the function),
|
|
and then replaced by a fresh type variable. In particular, the type
|
|
t can be used in contexts where a type variable is not allowed
|
|
(e.g. for defining an exception in a local module).
|
|
- Explicit polymorphic types and polymorphic recursion. In let
|
|
definitions, one can write an explicit polymorphic type just
|
|
immediately the function name; the polymorphism will be enforced,
|
|
and recursive calls may use the polymorphism.
|
|
The syntax is the same as for polymorphic methods:
|
|
"let [rec] <ident> : 'a1 ... 'an. <typexp> = ..."
|
|
- First-class packages modules.
|
|
New kind of type expression, for packaged modules: (module PT).
|
|
New kind of expression, to pack a module as a first-class value:
|
|
(module MODEXPR : PT).
|
|
New kind of module expression, to unpack a first-class value as a module:
|
|
(val EXPR : PT).
|
|
PT is a package type of the form "S" or
|
|
"S with type t1 = ... and ... and type tn = ..." (S refers to a module type).
|
|
- Local opening of modules in a subexpression.
|
|
Syntax: "let open M in e", or "M.(e)"
|
|
- In class definitions, method and instance variable override can now
|
|
be made explicit, by writing "method!", "val!" or "inherit!" in place of
|
|
"method", "val" and "inherit". It is an error to override an
|
|
undefined member (or to use overriding inheritance when nothing get
|
|
overridden). Additionally, these constructs disactivate respectively
|
|
warnings 7 (method override, code 'M') and 13 (instance variable
|
|
override, code 'V'). Note that, by default, warning 7 is inactive
|
|
and warning 13 is active.
|
|
- "Destructive" substitution in signatures.
|
|
By writing "<signature> with type t := <typeconstr>" and
|
|
"<signature> with module M := <module-path>" one replaces "t" and "M"
|
|
inside the signature, removing their respective fields. Among other
|
|
uses, this allows to merge two signatures containing identically
|
|
named fields.
|
|
* While fixing PR#4824, also corrected a gaping hole in the type checker,
|
|
which allowed instantiating separately object parameters and instance
|
|
variables in an interface. This hole was here since the beginning of
|
|
ocaml, and as a result many programs using object inheritance in a non
|
|
trivial way will need to be corrected. You can look at lablgtk2 for an
|
|
example.
|
|
|
|
Compilers and toplevel:
|
|
- Warnings are now numbered and can be switched on and off individually.
|
|
The old system with letters referring to sets of warnings is still
|
|
supported.
|
|
- New warnings:
|
|
+ 9 (code 'R') to signal record patterns without "; _" where
|
|
some labels of the record type are not listed in the pattern.
|
|
+ 28 when giving a wildcard argument to a constant constructor in
|
|
a pattern-matching.
|
|
+ 29 when an end-of-line appears unescaped in a string constant.
|
|
+ 30 when the same constructor or record field is defined twice in
|
|
mutually-recursive type definitions.
|
|
* The semantics of warning 7 (code 'M', method override) have changed
|
|
(it now detects all overrides, not just repeated definitions inside
|
|
the same class body), and it is now inactive by default.
|
|
- Better error report in case of unbound qualified identifier: if the module
|
|
is unbound this error is reported in the first place.
|
|
- Added option '-strict-sequence' to force left hand part of sequence to have
|
|
type unit.
|
|
- Added option '-no-app-funct' to turn applicative functors off.
|
|
This option can help working around mysterious type incompatibilities
|
|
caused by the incomplete comparison of applicative paths F(X).t.
|
|
|
|
Native-code compiler:
|
|
- AMD64: shorter and slightly more efficient code generated for
|
|
float comparisons.
|
|
|
|
Standard library:
|
|
- Format: new function ikfprintf analoguous to ifprintf with a continuation
|
|
argument.
|
|
* PR#4210, #4245: stricter range checking in string->integer conversion
|
|
functions (int_of_string, Int32.of_string, Int64.of_string,
|
|
Nativeint.of_string). The decimal string corresponding to
|
|
max_int + 1 is no longer accepted.
|
|
- Scanf: to prevent confusion when mixing Scanf scanning functions and direct
|
|
low level input, value Scanf.stdin has been added.
|
|
* Random: changed the algorithm to produce better randomness. Now passes the
|
|
DieHard tests.
|
|
- Map: implement functions from Set that make sense for Map.
|
|
|
|
Other libraries:
|
|
* Str: letters that constitute a word now include digits 0-9 and
|
|
underscore _. This changes the interpretation of '\b' (word boundary)
|
|
in regexps, but is more consistent with other regexp libraries. (PR#4874).
|
|
|
|
Ocamlbuild:
|
|
- Add support for native dynlink.
|
|
|
|
New tool:
|
|
- ocamlobjinfo: displays various information, esp. dependencies, for
|
|
compiled OCaml files (.cmi, .cmo, .cma, .cmx, .cmxa, .cmxs, and bytecode
|
|
executables). Extends and makes more official the old objinfo tool
|
|
that was installed by some OCaml packages.
|
|
|
|
All tools:
|
|
- PR#4857: add a -vnum option to display the version number and nothing else
|
|
|
|
Bug Fixes:
|
|
- PR#4012: Map.map and Map.mapi do not conform to specification
|
|
- PR#4478: better error messages for type definition mismatches
|
|
- PR#4683: labltk script uses fixed path on windows
|
|
- PR#4742: finalisation function raising an exception blocks other finalisations
|
|
- PR#4775: compiler crash on crazy types (temporary fix)
|
|
- PR#4824: narrowing the type of class parameters with a module specification
|
|
- PR#4862: relaxed value restriction and records
|
|
- PR#4884: optional arguments do not work when Some is redefined
|
|
- PR#4964: parenthesized names for infix functions in annot files
|
|
- PR#4970: better error message for instance variables
|
|
- PR#4975: spelling mistakes
|
|
- PR#4988: contravariance lost with ocamlc -i
|
|
- PR#5004: problem in Buffer.add_channel with very large lengths.
|
|
- PR#5008: on AMD64/MSVC port, rare float corruption during GC.
|
|
- PR#5018: wrong exception raised by Dynlink.loadfile.
|
|
- PR#5057: fatal typing error with local module + functor + polymorphic variant
|
|
- Wrong type for Obj.add_offset.
|
|
- Small problem with representation of Int32, Int64, and Nativeint constants.
|
|
- Use RTLD_LOCAL for native dynlink in private mode.
|
|
|
|
Objective Caml 3.11.2 (20 Jan 2010):
|
|
------------------------------------
|
|
|
|
Bug fixes:
|
|
- PR#4151: better documentation for min and max w.r.t. NaN
|
|
- PR#4421: ocamlbuild uses wrong compiler for C files
|
|
- PR#4710, PR#4720: ocamlbuild does not use properly configuration information
|
|
- PR#4750: under some Windows installations, high start-up times for Unix lib
|
|
- PR#4777: problem with scanf and CRLF
|
|
- PR#4783: ocamlmklib problem under Windows
|
|
- PR#4810: BSD problem with socket addresses, e.g. in Unix.getnameinfo
|
|
- PR#4813: issue with parsing of float literals by the GNU assembler
|
|
- PR#4816: problem with modules and private types
|
|
- PR#4818: missed opportunity for type-based optimization of bigarray accesses
|
|
- PR#4821: check for duplicate method names in classes
|
|
- PR#4823: build problem on Mac OS X
|
|
- PR#4836: spurious errors raised by Unix.single_write under Windows
|
|
- PR#4841, PR#4860, PR#4930: problem with ocamlopt -output-obj under Mac OS X
|
|
- PR#4847: C compiler error with ocamlc -output-obj under Win64
|
|
- PR#4856: ocamlbuild uses ocamlrun to execute a native plugin
|
|
- PR#4867, PR#4760: ocamlopt -shared fails on Mac OS X 64bit
|
|
- PR#4873: ocamlbuild ignores "thread" tag when building a custom toplevel
|
|
- PR#4890: ocamlbuild tries to use native plugin on bytecode-only arch
|
|
- PR#4896: ocamlbuild should always pass -I to tools for external libraries
|
|
- PR#4900: small bug triggering automatic compaction even if max_overhead = 1M
|
|
- PR#4902: bug in %.0F printf format
|
|
- PR#4910: problem with format concatenation
|
|
- PR#4922: ocamlbuild recompiles too many files
|
|
- PR#4923: missing \xff for scanf %S
|
|
- PR#4933: functors not handling private types correctly
|
|
- PR#4940: problem with end-of-line in DOS text mode, tentative fix
|
|
- PR#4953: problem compiling bytecode interpreter on ARM in Thumb mode.
|
|
- PR#4955: compiler crash when typing recursive type expression with constraint
|
|
- Module Printf: the simple conversion %F (without width indication) was not
|
|
treated properly.
|
|
- Makefile: problem with cygwin, flexdll, and symbolic links
|
|
- Various build problems with ocamlbuild under Windows with msvc
|
|
|
|
Feature wishes:
|
|
- PR#9: (tentative implementation) make ocamldebug use #linenum annotations
|
|
- PR#123, PR#4477: custom exception printers
|
|
- PR#3456: Obj.double_field and Obj.set_double_field functions
|
|
- PR#4003: destination directory can be given to Filename.[open_]temp_file
|
|
- PR#4647: Buffer.blit function
|
|
- PR#4685: access to Filename.dir_sep
|
|
- PR#4703: support for debugging embedded applications
|
|
- PR#4723: "clear_rules" function to empty the set of ocamlbuild rules
|
|
- PR#4921: configure option to help cross-compilers
|
|
|
|
Objective Caml 3.11.1 (12 Jun 2009):
|
|
------------------------------------
|
|
|
|
Bug fixes:
|
|
- PR#4095: ocamldebug: strange behaviour of control-C
|
|
- PR#4403: ocamldebug: improved handling of packed modules
|
|
- PR#4650: Str.regexp_case_fold mis-handling complemented character sets [^a]
|
|
- PR#4660: Scanf.format_from_string: handling of double quote
|
|
- PR#4666: Unix.exec* failure in multithread programs under MacOS X and FreeBSD
|
|
- PR#4667: debugger out of sync with dynlink changes
|
|
- PR#4678: random "out of memory" error with systhreads
|
|
- PR#4690: issue with dynamic loading under MacOS 10.5
|
|
- PR#4692: wrong error message with options -i and -pack passed to ocamlc
|
|
- PR#4699: in otherlibs/dbm, fixed construction of dlldbm.so.
|
|
- PR#4704: error in caml_modify_generational_global_root()
|
|
- PR#4708: (ocamldoc) improved printing of infix identifiers such as "lor".
|
|
- PR#4722: typo in configure script
|
|
- PR#4729: documented the fact that PF_INET6 is not available on all platforms
|
|
- PR#4730: incorrect typing involving abbreviation "type 'a t = 'a"
|
|
- PR#4731: incorrect quoting of arguments passed to the assembler on x86-64
|
|
- PR#4735: Unix.LargeFile.fstat cannot report size over 32bits on Win32
|
|
- PR#4740: guard against possible processor error in
|
|
{Int32,Int64,Nativeint}.{div,rem}
|
|
- PR#4745: type inference wrongly produced non-generalizable type variables.
|
|
- PR#4749: better pipe size for win32unix
|
|
- PR#4756: printf: no error reported for wrong format '%_s'
|
|
- PR#4758: scanf: handling of \<newline> by format '%S'
|
|
- PR#4766: incorrect simplification of some type abbreviations.
|
|
- PR#4768: printf: %F does not respect width and precision specifications
|
|
- PR#4769: Format.bprintf fails to flush
|
|
- PR#4775: fatal error Ctype.Unify during module type-checking (temporary fix)
|
|
- PR#4776: bad interaction between exceptions and classes
|
|
- PR#4780: labltk build problem under Windows.
|
|
- PR#4790: under Windows, map ERROR_NO_DATA Win32 error to EPIPE Unix error.
|
|
- PR#4792: bug in Big_int.big_int_of_int64 on 32-bit platforms.
|
|
- PR#4796: ocamlyacc: missing NUL termination of string
|
|
- PR#4804: bug in Big_int.int64_of_big_int on 32-bit platforms.
|
|
- PR#4805: improving compatibility with the clang C compiler
|
|
- PR#4809: issue with Unix.create_process under Win32
|
|
- PR#4814: ocamlbrowser: crash when editing comments
|
|
- PR#4816: module abbreviations remove 'private' type restrictions
|
|
- PR#4817: Object type gives error "Unbound type parameter .."
|
|
- Module Parsing: improved computation of locations when an ocamlyacc rule
|
|
starts with an empty nonterminal
|
|
- Type-checker: fixed wrong variance computation for private types
|
|
- x86-32 code generator, MSVC port: wrong "fld" instruction generated.
|
|
- ocamlbuild: incorrectly using the compile-time value of $OCAMLLIB
|
|
- Makefile problem when configured with -no-shared-libs
|
|
- ocamldoc: use dynamic loading in native code
|
|
|
|
Other changes:
|
|
- Improved wording of various error messages
|
|
(contributed by Jonathan Davies, Citrix).
|
|
- Support for 64-bit mode in Solaris/x86 (PR#4670).
|
|
|
|
|
|
Objective Caml 3.11.0 (03 Dec 2008):
|
|
------------------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*" )
|
|
|
|
Language features:
|
|
- Addition of lazy patterns: "lazy <pat>" matches suspensions whose values,
|
|
after forcing, match the pattern <pat>.
|
|
- Introduction of private abbreviation types "type t = private <type-expr>",
|
|
for abstracting the actual manifest type in type abbreviations.
|
|
- Subtyping is now allowed between a private abbreviation and its definition,
|
|
and between a polymorphic method and its monomorphic instance.
|
|
|
|
Compilers:
|
|
- The file name for a compilation unit should correspond to a valid
|
|
identifier (Otherwise dynamic linking and other things can fail, and
|
|
a warning is emitted.)
|
|
* Revised -output-obj: the output name must now be provided; its
|
|
extension must be one of .o/.obj, .so/.dll, or .c for the
|
|
bytecode compiler. The compilers can now produce a shared library
|
|
(with all the needed -ccopts/-ccobjs options) directly.
|
|
- -dtypes renamed to -annot, records (in .annot files) which function calls
|
|
are tail calls.
|
|
- All compiler error messages now include a file name and location, for
|
|
better interaction with Emacs' compilation mode.
|
|
- Optimized compilation of "lazy e" when the argument "e" is
|
|
already evaluated.
|
|
- Optimized compilation of equality tests with a variant constant constructor.
|
|
- The -dllib options recorded in libraries are no longer ignored when
|
|
-use_runtime or -use_prims is used (unless -no_auto_link is
|
|
explicitly used).
|
|
- Check that at most one of -pack, -a, -shared, -c, -output-obj is
|
|
given on the command line.
|
|
- Optimized compilation of private types as regular manifest types
|
|
(e.g. abbreviation to float, float array or record types with only
|
|
float fields).
|
|
|
|
Native-code compiler:
|
|
- New port: Mac OS X / Intel in 64-bit mode (configure with -cc "gcc -m64").
|
|
- A new option "-shared" to produce a plugin that can be dynamically
|
|
loaded with the native version of Dynlink.
|
|
- A new option "-nodynlink" to enable optimizations valid only for code
|
|
that is never dynlinked (no-op except for AMD64).
|
|
- More aggressive unboxing of floats and boxed integers.
|
|
- Can select which assembler and asm options to use at configuration time.
|
|
|
|
Run-time system:
|
|
- New implementation of the page table describing the heap (two-level
|
|
array in 32 bits, sparse hashtable in 64 bits), fixes issues with address
|
|
space randomization on 64-bit OS (PR#4448).
|
|
- New "generational" API for registering global memory roots with the GC,
|
|
enables faster scanning of global roots.
|
|
(The functions are caml_*_generational_global_root in <caml/memory.h>.)
|
|
- New function "caml_raise_with_args" to raise an exception with several
|
|
arguments from C.
|
|
- Changes in implementation of dynamic linking of C code:
|
|
under Win32, use Alain Frisch's flexdll implementation of the dlopen
|
|
API; under MacOSX, use dlopen API instead of MacOSX bundle API.
|
|
- Programs may now choose a first-fit allocation policy instead of
|
|
the default next-fit. First-fit reduces fragmentation but is
|
|
slightly slower in some cases.
|
|
|
|
Standard library:
|
|
- Parsing library: new function "set_trace" to programmatically turn
|
|
on or off the printing of a trace during parsing.
|
|
- Printexc library: new functions "print_backtrace" and "get_backtrace"
|
|
to obtain a stack backtrace of the most recently raised exception.
|
|
New function "record_backtrace" to turn the exception backtrace mechanism
|
|
on or off from within a program.
|
|
- Scanf library: fine-tuning of meta format implementation;
|
|
fscanf behaviour revisited: only one input buffer is allocated for any
|
|
given input channel;
|
|
the %n conversion does not count a lookahead character as read.
|
|
|
|
Other libraries:
|
|
- Dynlink: on some platforms, the Dynlink library is now available in
|
|
native code. The boolean Dynlink.is_native allows the program to
|
|
know whether it has been compiled in bytecode or in native code.
|
|
- Bigarrays: added "unsafe_get" and "unsafe_set"
|
|
(non-bound-checking versions of "get" and "set").
|
|
- Bigarrays: removed limitation "array dimension < 2^31".
|
|
- Labltk: added support for TK 8.5.
|
|
- Num: added conversions between big_int and int32, nativeint, int64.
|
|
More efficient implementation of Num.quo_num and Num.mod_num.
|
|
- Threads: improved efficiency of mutex and condition variable operations;
|
|
improved interaction with Unix.fork (PR#4577).
|
|
- Unix: added getsockopt_error returning type Unix.error.
|
|
Added support for TCP_NODELAY and IPV6_ONLY socket options.
|
|
- Win32 Unix: "select" now supports all kinds of file descriptors.
|
|
Improved emulation of "lockf" (PR#4609).
|
|
|
|
Tools:
|
|
- ocamldebug now supported under Windows (MSVC and Mingw ports),
|
|
but without the replay feature. (Contributed by Dmitry Bely
|
|
and Sylvain Le Gall at OCamlCore with support from Lexifi.)
|
|
- ocamldoc: new option -no-module-constraint-filter to include functions
|
|
hidden by signature constraint in documentation.
|
|
- ocamlmklib and ocamldep.opt now available under Windows ports.
|
|
- ocamlmklib no longer supports the -implib option.
|
|
- ocamlnat: an experimental native toplevel (not built by default).
|
|
|
|
Camlp4:
|
|
* programs linked with camlp4lib.cma now also need dynlink.cma.
|
|
|
|
Bug fixes:
|
|
- Major GC and heap compaction: fixed bug involving lazy values and
|
|
out-of-heap pointers.
|
|
- PR#3915: updated most man pages.
|
|
- PR#4261: type-checking of recursive modules
|
|
- PR#4308: better stack backtraces for "spontaneous" exceptions such as
|
|
Stack_overflow, Out_of_memory, etc.
|
|
- PR#4338: Str.global_substitute, Str.global_replace and the Str.*split*
|
|
functions are now tail-recursive.
|
|
- PR#4503: fixed bug in classify_float on ARM.
|
|
- PR#4512: type-checking of recursive modules
|
|
- PR#4517: crash in ocamllex-generated lexers.
|
|
- PR#4542: problem with return value of Unix.nice.
|
|
- PR#4557: type-checking of recursive modules.
|
|
- PR#4562: strange %n semantics in scanf.
|
|
- PR#4564: add note "stack is not executable" to object files generated by
|
|
ocamlopt (Linux/x86, Linux/AMD64).
|
|
- PR#4566: bug in Ratio.approx_ratio_fix and Num.approx_num_fix.
|
|
- PR#4582: clarified the documentation of functions in the String module.
|
|
- PR#4583: stack overflow in "ocamlopt -g" during closure conversion pass.
|
|
- PR#4585: ocamldoc and "val virtual" declarations.
|
|
- PR#4587: ocamldoc and escaped @ characters.
|
|
- PR#4605: Buffer.add_substitute was sometime wrong when target string had
|
|
backslashes.
|
|
- PR#4614: Inconsistent declaration of CamlCBCmd in LablTk library.
|
|
|
|
|
|
Objective Caml 3.10.2 (29 Feb 2008):
|
|
------------------------------------
|
|
|
|
Bug fixes:
|
|
- PR#1217 (partial) Typo in ocamldep man page
|
|
- PR#3952 (partial) ocamlopt: allocation problems on ARM
|
|
- PR#4339 (continued) ocamlopt: problems on HPPA
|
|
- PR#4455 str.mli not installed under Windows
|
|
- PR#4473 crash when accessing float array with polymorphic method
|
|
- PR#4480 runtime would not compile without gcc extensions
|
|
- PR#4481 wrong typing of exceptions with object arguments
|
|
- PR#4490 typo in error message
|
|
- Random crash on 32-bit when major_heap_increment >= 2^22
|
|
- Big performance bug in Weak hashtables
|
|
- Small bugs in the make-package-macosx script
|
|
- Bug in typing of polymorphic variants (reported on caml-list)
|
|
|
|
|
|
Objective Caml 3.10.1 (11 Jan 2008):
|
|
------------------------------------
|
|
|
|
Bug fixes:
|
|
- PR#3830 small bugs in docs
|
|
- PR#4053 compilers: improved compilation time for large variant types
|
|
- PR#4174 ocamlopt: fixed ocamlopt -nopervasives
|
|
- PR#4199 otherlibs: documented a small problem in Unix.utimes
|
|
- PR#4280 camlp4: parsing of identifier (^)
|
|
- PR#4281 camlp4: parsing of type constraint
|
|
- PR#4285 runtime: cannot compile under AIX
|
|
- PR#4286 ocamlbuild: cannot compile under AIX and SunOS
|
|
- PR#4288 compilers: including a functor application with side effects
|
|
- PR#4295 camlp4 toplevel: synchronization after an error
|
|
- PR#4300 ocamlopt: crash with backtrace and illegal array access
|
|
- PR#4302 camlp4: list comprehension parsing problem
|
|
- PR#4304 ocamlbuild: handle -I correctly
|
|
- PR#4305 stdlib: alignment of Arg.Symbol
|
|
- PR#4307 camlp4: assertion failure
|
|
- PR#4312 camlp4: accept "let _ : int = 1"
|
|
- PR#4313 ocamlbuild: -log and missing directories
|
|
- PR#4315 camlp4: constraints in classes
|
|
- PR#4316 compilers: crash with recursive modules and Lazy
|
|
- PR#4318 ocamldoc: installation problem with Cygwin (tentative fix)
|
|
- PR#4322 ocamlopt: stack overflow under Windows
|
|
- PR#4325 compilers: wrong error message for unused var
|
|
- PR#4326 otherlibs: marshal Big_int on win64
|
|
- PR#4327 ocamlbuild: make emacs look for .annot in _build directory
|
|
- PR#4328 camlp4: stack overflow with nil nodes
|
|
- PR#4331 camlp4: guards on fun expressions
|
|
- PR#4332 camlp4: parsing of negative 32/64 bit numbers
|
|
- PR#4336 compilers: unsafe recursive modules
|
|
- PR#4337 (note) camlp4: invalid character escapes
|
|
- PR#4339 ocamlopt: problems on HP-UX (tentative fix)
|
|
- PR#4340 camlp4: wrong pretty-printing of optional arguments
|
|
- PR#4348 ocamlopt: crash on Mac Intel
|
|
- PR#4349 camlp4: bug in private type definitions
|
|
- PR#4350 compilers: type errors with records and polymorphic variants
|
|
- PR#4352 compilers: terminal recursion under Windows (tentative fix)
|
|
- PR#4354 ocamlcp: mismatch with ocaml on polymorphic let
|
|
- PR#4358 ocamlopt: float constants wrong on ARM
|
|
- PR#4360 ocamldoc: string inside comment
|
|
- PR#4365 toplevel: wrong pretty-printing of polymorphic variants
|
|
- PR#4373 otherlibs: leaks in win32unix
|
|
- PR#4374 otherlibs: threads module not initialized
|
|
- PR#4375 configure: fails to build on bytecode-only architectures
|
|
- PR#4377 runtime: finalisation of infix pointers
|
|
- PR#4378 ocamlbuild: typo in plugin.ml
|
|
- PR#4379 ocamlbuild: problem with plugins under Windows
|
|
- PR#4382 compilers: typing of polymorphic record fields
|
|
- PR#4383 compilers: including module with private type
|
|
- PR#4385 stdlib: Int32/Int64.format are unsafe
|
|
- PR#4386 otherlibs: wrong signal numbers with Unix.sigprocmask etc.
|
|
- PR#4387 ocamlbuild: build directory not used properly
|
|
- PR#4392 ocamldep: optional argument of class
|
|
- PR#4394 otherlibs: infinite loops in Str
|
|
- PR#4397 otherlibs: wrong size for flag arrays in win32unix
|
|
- PR#4402 ocamldebug: doesn't work with -rectypes
|
|
- PR#4410 ocamlbuild: problem with plugin and -build
|
|
- PR#4411 otherlibs: crash with Unix.access under Windows
|
|
- PR#4412 stdlib: marshalling broken on 64 bit architectures
|
|
- PR#4413 ocamlopt: crash on AMD64 with out-of-bound access and reraise
|
|
- PR#4417 camlp4: pretty-printing of unary minus
|
|
- PR#4419 camlp4: problem with constraint in type class
|
|
- PR#4426 compilers: problem with optional labels
|
|
- PR#4427 camlp4: wrong pretty-printing of lists of functions
|
|
- PR#4433 ocamlopt: fails to build on MacOSX 10.5
|
|
- PR#4435 compilers: crash with objects
|
|
- PR#4439 fails to build on MacOSX 10.5
|
|
- PR#4441 crash when build on sparc64 linux
|
|
- PR#4442 stdlib: crash with weak pointers
|
|
- PR#4446 configure: fails to detect X11 on MacOSX 10.5
|
|
- PR#4448 runtime: huge page table on 64-bit architectures
|
|
- PR#4450 compilers: stack overflow with recursive modules
|
|
- PR#4470 compilers: type-checking of recursive modules too restrictive
|
|
- PR#4472 configure: autodetection of libX11.so on Fedora x86_64
|
|
- printf: removed (partially implemented) positional specifications
|
|
- polymorphic < and <= comparisons: some C compiler optimizations
|
|
were causing incorrect results when arguments are incomparable
|
|
|
|
New features:
|
|
- made configure script work on PlayStation 3
|
|
- ARM port: brought up-to-date for Debian 4.0 (Etch)
|
|
- many other small changes and bugfixes in camlp4, ocamlbuild, labltk,
|
|
emacs files
|
|
|
|
|
|
Objective Caml 3.10.0 (18 May 2007):
|
|
------------------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*" )
|
|
|
|
Language features:
|
|
- Added virtual instance variables in classes "val virtual v : t"
|
|
* Changed the behaviour of instance variable overriding; the new
|
|
definition replaces the old one, rather than creating a new
|
|
variable.
|
|
|
|
New tools:
|
|
- ocamlbuild: compilation manager for OCaml applications and libraries.
|
|
See draft documentation at http://gallium.inria.fr/~pouillar/
|
|
* Camlp4: heavily revised implementation, new API.
|
|
|
|
New ports:
|
|
- MacOS X PowerPC 64 bits.
|
|
- MS Windows 64 bits (x64) using the Microsoft PSDK toolchain.
|
|
- MS Windows 32 bits using the Visual Studio 2005 toolchain.
|
|
|
|
Compilers:
|
|
- Faster type-checking of functor applications.
|
|
- Referencing an interface compiled with -rectypes from a module
|
|
not compiled with -rectypes is now an error.
|
|
- Revised the "fragile matching" warning.
|
|
|
|
Native-code compiler:
|
|
- Print a stack backtrace on an uncaught exception.
|
|
(Compile and link with ocamlopt -g; execute with OCAMLRUNPARAM=b.)
|
|
Supported on Intel/AMD in 32 and 64 bits, PPC in 32 and 64 bits.
|
|
- Stack overflow detection on MS Windows 32 bits (courtesy O. Andrieu).
|
|
- Stack overflow detection on MacOS X PPC and Intel.
|
|
- Intel/AMD 64 bits: generate position-independent code by default.
|
|
- Fixed bug involving -for-pack and missing .cmx files (PR#4124).
|
|
- Fixed bug causing duplication of literals (PR#4152).
|
|
|
|
Run-time system:
|
|
- C/Caml interface functions take "char const *" arguments
|
|
instead of "char *" when appropriate.
|
|
- Faster string comparisons (fast case if strings are ==).
|
|
|
|
Standard library:
|
|
- Refined typing of format strings (type format6).
|
|
- Printf, Format: new function ifprintf that consumes its arguments
|
|
and prints nothing (useful to print conditionally).
|
|
- Scanf:
|
|
new function format_from_string to convert a string to a format string;
|
|
new %r conversion to accomodate user defined scanners.
|
|
- Filename: improved Win32 implementation of Filename.quote.
|
|
- List: List.nth now tail-recursive.
|
|
- Sys: added Sys.is_directory. Some functions (e.g. Sys.command) that
|
|
could incorrectly raise Sys_io_blocked now raise Sys_error as intended.
|
|
- String and Char: the function ``escaped'' now escapes all the characters
|
|
especially handled by the compiler's lexer (PR#4220).
|
|
|
|
Other libraries:
|
|
- Bigarray: mmap_file takes an optional argument specifying
|
|
the start position of the data in the mapped file.
|
|
- Dynlink: now defines only two modules, Dynlink and Dynlinkaux (internal),
|
|
reducing risks of name conflicts with user modules.
|
|
- Labltk under Win32: now uses Tcl/Tk 8.4 instead of 8.3 by default.
|
|
- VM threads: improved performance of I/O operations (less polling).
|
|
- Unix: new function Unix.isatty.
|
|
- Unix emulation under Win32:
|
|
fixed incorrect error reporting in several functions (PR#4097);
|
|
better handling of channels opened on sockets (PR#4098);
|
|
fixed GC bug in Unix.system (PR#4112).
|
|
|
|
Documentation generator (OCamldoc):
|
|
- correctly handle '?' in value names (PR#4215)
|
|
- new option -hide-warnings not to print ocamldoc warnings
|
|
|
|
Lexer generator (ocamllex): improved error reporting.
|
|
|
|
License: fixed a typo in the "special exception" to the LGPL.
|
|
|
|
|
|
Objective Caml 3.09.3 (15 Sep 2006):
|
|
------------------------------------
|
|
|
|
Bug fixes:
|
|
- ocamldoc: -using modtype constraint to filter module elements displayed
|
|
in doc PR#4016
|
|
- ocamldoc: error in merging of top dependencies of modules PR#4007
|
|
- ocamldoc: -dot-colors has no effect PR#3981
|
|
- ocamdloc: missing crossref in text from intro files PR#4066
|
|
- compilers: segfault with recursive modules PR#4008
|
|
- compilers: infinite loop when compiling objects PR#4018
|
|
- compilers: bad error message when signature mismatch PR#4001
|
|
- compilers: infinite loop with -rectypes PR#3999
|
|
- compilers: contravariance bug in private rows
|
|
- compilers: unsafe cast with polymorphic exception PR#4002
|
|
- native compiler: bad assembly code generated for AMD64 PR#4067
|
|
- native compiler: stack alignment problems on MacOSX/i386 PR#4036
|
|
- stdlib: crash in marshalling PR#4030
|
|
- stdlib: crash when closing a channel twice PR#4039
|
|
- stdlib: memory leak in Sys.readdir PR#4093
|
|
- C interface: better definition of CAMLreturn PR#4068
|
|
- otherlibs/unix: crash in gethostbyname PR#3043
|
|
- tools: subtle problem with unset in makefile PR#4048
|
|
- camlp4: install pa_o_fast.o PR#3812
|
|
- camlp4: install more modules PR#3689
|
|
|
|
New features:
|
|
- ocamldoc: name resolution in cross-referencing {!name}: if name is not
|
|
found, then it is searched in the parent module/class, and in the parent
|
|
of the parent, and so on until it is found.
|
|
- ocamldoc: new option -short-functors to use a short form to display
|
|
functors in html generator PR#4017
|
|
- ocamlprof: added "-version" option
|
|
|
|
|
|
|
|
Objective Caml 3.09.2 (14 Apr 2006):
|
|
------------------------------------
|
|
|
|
Bug fixes:
|
|
- Makefile: problem with "make world.opt" PR#3954
|
|
- compilers: problem compiling several modules with one command line PR#3979
|
|
- compilers,ocamldoc: error message that Emacs cannot parse
|
|
- compilers: crash when printing type error PR#3968
|
|
- compilers: -dtypes wrong for monomorphic type variables PR#3894
|
|
- compilers: wrong warning on optional arguments PR#3980
|
|
- compilers: crash when wrong use of type constructor in let rec PR#3976
|
|
- compilers: better wording of "statement never returns" warning PR#3889
|
|
- runtime: inefficiency of signal handling PR#3990
|
|
- runtime: crashes with I/O in multithread programs PR#3906
|
|
- camlp4: empty file name in error messages PR#3886
|
|
- camlp4: stack overflow PR#3948
|
|
- otherlibs/labltk: ocamlbrowser ignores its command line options PR#3961
|
|
- otherlibs/unix: Unix.times wrong under Mac OS X PR#3960
|
|
- otherlibs/unix: wrong doc for execvp and execvpe PR#3973
|
|
- otherlibs/win32unix: random crash in Unix.stat PR#3998
|
|
- stdlib: update_mod not found under Windows PR#3847
|
|
- stdlib: Filename.dirname/basename wrong on Win32 PR#3933
|
|
- stdlib: incomplete documentation of Pervasives.abs PR#3967
|
|
- stdlib: Printf bugs PR#3902, PR#3955
|
|
- tools/checkstack.c: missing include
|
|
- yacc: crash when given argument "-" PR#3956
|
|
|
|
New features:
|
|
- ported to MacOS X on Intel PR#3985
|
|
- configure: added support for GNU Hurd PR#3991
|
|
|
|
Objective Caml 3.09.1 (4 Jan 2006):
|
|
-----------------------------------
|
|
|
|
Bug fixes:
|
|
- compilers: raise not_found with -principal PR#3855
|
|
- compilers: assert failure in typeclass.cml PR#3856
|
|
- compilers: assert failure in typing/ctype.ml PR#3909
|
|
- compilers: fatal error exception Ctype.Unify PR#3918
|
|
- compilers: spurious warning Y in objects PR#3868
|
|
- compilers: spurious warning Z on loop index PR#3907
|
|
- compilers: error message that emacs cannot parse
|
|
- ocamlopt: problems with -for-pack/-pack PR#3825, PR#3826, PR#3919
|
|
- ocamlopt: can't produce shared libraries on x86_64 PR#3869, PR#3924
|
|
- ocamlopt: float alignment problem on SPARC PR#3944
|
|
- ocamlopt: can't compile on MIPS PR#3936
|
|
- runtime: missing dependence for ld.conf
|
|
- runtime: missing dependence for .depend.nt PR#3880
|
|
- runtime: memory leak in caml_register_named_value PR#3940
|
|
- runtime: crash in Marshal.to_buffer PR#3879
|
|
- stdlib: Sys.time giving wrong results on Mac OS X PR#3850
|
|
- stdlib: Weak.get_copy causing random crashes in rare cases
|
|
- stdlib, debugger, labltk: use TMPDIR if set PR#3895
|
|
- stdlib: scanf bug on int32 and nativeint PR#3932
|
|
- camlp4: mkcamlp4 option parsing problem PR#3941
|
|
- camlp4: bug in pretty-printing of lazy/assert/new
|
|
- camlp4: update the unmaintained makefile for _loc name
|
|
- ocamldoc: several fixes see ocamldoc/Changes.txt
|
|
- otherlibs/str: bug in long sequences of alternatives PR#3783
|
|
- otherlibs/systhreads: deadlock in Windows PR#3910
|
|
- tools: update dumpobj to handle new event format PR#3873
|
|
- toplevel: activate warning Y in toplevel PR#3832
|
|
|
|
New features:
|
|
- otherlibs/labltk: browser uses menu bars instead of menu buttons
|
|
|
|
Objective Caml 3.09.0 (27 Oct 2006):
|
|
------------------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*" )
|
|
|
|
Language features:
|
|
- Introduction of private row types, for abstracting the row in object
|
|
and variant types.
|
|
|
|
Type checking:
|
|
- Polymorphic variants with at most one constructor [< `A of t] are no
|
|
longer systematically promoted to the exact type [`A of t]. This was
|
|
more confusing than useful, and created problems with private row
|
|
types.
|
|
|
|
Both compilers:
|
|
- Added warnings 'Y' and 'Z' for local variables that are bound but
|
|
never used.
|
|
- Added warning for some uses non-returning functions (e.g. raise), when they
|
|
are passed extra arguments, or followed by extra statements.
|
|
- Pattern matching: more prudent compilation in case of guards; fixed PR#3780.
|
|
- Compilation of classes: reduction in size of generated code.
|
|
- Compilation of "module rec" definitions: fixed a bad interaction with
|
|
structure coercion (to a more restrictive signature).
|
|
|
|
Native-code compiler (ocamlopt):
|
|
* Revised implementation of the -pack option (packing of several compilation
|
|
units into one). The .cmx files that are to be packed with
|
|
"ocamlopt -pack -o P.cmx" must be compiled with "ocamlopt -for-pack P".
|
|
In exchange for this additional constraint, ocamlopt -pack is now
|
|
available on all platforms (no need for binutils).
|
|
* Fixed wrong evaluation order for arguments to certain inlined functions.
|
|
- Modified code generation for "let rec ... and ..." to reduce compilation
|
|
time (which was quadratic in the number of mutually-recursive functions).
|
|
- x86 port: support tail-calls for functions with up to 21 arguments.
|
|
- AMD64 port, Linux: recover from system stack overflow.
|
|
- Sparc port: more portable handling of out-of-bound conditions
|
|
on systems other than Solaris.
|
|
|
|
Standard library:
|
|
- Pervasives: faster implementation of close_in, close_out.
|
|
set_binary_mode_{out,in} now working correctly under Cygwin.
|
|
- Printf: better handling of partial applications of the printf functions.
|
|
- Scanf: new function sscanf_format to read a format from a
|
|
string. The type of the resulting format is dynamically checked and
|
|
should be the type of the template format which is the second argument.
|
|
- Scanf: no more spurious lookahead attempt when the end of file condition
|
|
is set and a correct token has already been read and could be returned.
|
|
|
|
Other libraries:
|
|
- System threads library: added Thread.sigmask; fixed race condition
|
|
in signal handling.
|
|
- Bigarray library: fixed bug in Array3.of_array.
|
|
- Unix library: use canonical signal numbers in results of Unix.wait*;
|
|
hardened Unix.establish_server against EINTR errors.
|
|
|
|
Run-time system:
|
|
- Support platforms where sizeof(void *) = 8 and sizeof(long) = 4.
|
|
- Improved and cleaned up implementation of signal handling.
|
|
|
|
Replay debugger:
|
|
- Improved handling of locations in source code.
|
|
|
|
OCamldoc:
|
|
- extensible {foo } syntax
|
|
- user can give .txt files on the command line, containing ocamldoc formatted
|
|
text, to be able to include bigger texts out of source files
|
|
- -o option is now used by the html generator to indicate the prefix
|
|
of generated index files (to avoid conflict when a Index module exists
|
|
on case-insensitive file systems).
|
|
|
|
Miscellaneous:
|
|
- Configuration information is installed in `ocamlc -where`/Makefile.config
|
|
and can be used by client Makefiles or shell scripts.
|
|
|
|
Objective Caml 3.08.4 (11 Aug 2005):
|
|
------------------------------------
|
|
|
|
New features:
|
|
- configure: find X11 config in some 64-bit Linux distribs
|
|
- ocamldoc: (**/**) can be canceled with another (**/**) PR#3665
|
|
- graphics: added resize_window
|
|
- graphics: check for invalid arguments to drawing primitives PR#3595
|
|
- ocamlbrowser: use windows subsystem on mingw
|
|
|
|
Bug fixes:
|
|
- ocamlopt: code generation problem on AMD64 PR#3640
|
|
- wrong code generated for some classes PR#3576
|
|
- fatal error when compiling some OO code PR#3745
|
|
- problem with comparison on constant constructors PR#3608
|
|
- camlp4: cryptic error message PR#3592
|
|
- camlp4: line numbers in multi-line antiquotations PR#3549
|
|
- camlp4: problem with make depend
|
|
- camlp4: parse error with :> PR#3561
|
|
- camlp4: ident conversion problem with val/contents/contents__
|
|
- camlp4: several small parsing problems PR#3688
|
|
- ocamldebug: handling of spaces in executable file name PR#3736
|
|
- emacs-mode: problem when caml-types-buffer is deleted by user PR#3704
|
|
- ocamldoc: extra backslash in ocamldoc man page PR#3687
|
|
- ocamldoc: improvements to HTML display PR#3698
|
|
- ocamldoc: escaping of @ in info files
|
|
- ocamldoc: escaping of . and \ in man pages PR#3686
|
|
- ocamldoc: better error reporting of misplaced comments
|
|
- graphics: fixed .depend file PR#3558
|
|
- graphics: segfault with threads and graphics PR#3651
|
|
- nums: several bugs: PR#3718, PR#3719, others
|
|
- nums: inline asm problems with gcc 4.0 PR#3604, PR#3637
|
|
- threads: problem with backtrace
|
|
- unix: problem with getaddrinfo PR#3565
|
|
- stdlib: documentation of Int32.rem and Int64.rem PR#3573
|
|
- stdlib: documentation of List.rev_map2 PR#3685
|
|
- stdlib: wrong order in Map.fold PR#3607
|
|
- stdlib: documentation of maximum float array length PR#3714
|
|
- better detection of cycles when using -rectypes
|
|
- missing case of module equality PR#3738
|
|
- better error messages for unbound type variables
|
|
- stack overflow while printing type error message PR#3705
|
|
- assert failure when typing some classes PR#3638
|
|
- bug in type_approx
|
|
- better error messages related to type variance checking
|
|
- yacc: avoid name capture for idents of the Parsing module
|
|
|
|
|
|
Objective Caml 3.08.3 (24 Mar 2005):
|
|
------------------------------------
|
|
|
|
New features:
|
|
- support for ocamlopt -pack under Mac OS X (PR#2634, PR#3320)
|
|
- ignore unknown warning options for forward and backward compatibility
|
|
- runtime: export caml_compare_unordered (PR#3479)
|
|
- camlp4: install argl.* files (PR#3439)
|
|
- ocamldoc: add -man-section option
|
|
- labltk: add the "solid" relief option (PR#3343)
|
|
|
|
Bug fixes:
|
|
- typing: fix unsoundness in type declaration variance inference.
|
|
Type parameters which are constrained must now have an explicit variant
|
|
annotation, otherwise they are invariant. This is not backward
|
|
compatible, so this might break code which either uses subtyping or
|
|
uses the relaxed value restriction (i.e. was not typable before 3.07)
|
|
- typing: erroneous partial match warning for polymorphic variants (PR#3424)
|
|
- runtime: handle the case of an empty command line (PR#3409, PR#3444)
|
|
- stdlib: make Sys.executable_name an absolute path in native code (PR#3303)
|
|
- runtime: fix memory leak in finalise.c
|
|
- runtime: auto-trigger compaction even if gc is called manually (PR#3392)
|
|
- stdlib: fix segfault in Obj.dup on zero-sized values (PR#3406)
|
|
- camlp4: correct parsing of the $ identifier (PR#3310, PR#3469)
|
|
- windows (MS tools): use link /lib instead of lib (PR#3333)
|
|
- windows (MS tools): change default install destination
|
|
- autoconf: better checking of SSE2 instructions (PR#3329, PR#3330)
|
|
- graphics: make close_graph close the X display as well as the window (PR#3312)
|
|
- num: fix big_int_of_string (empty string) (PR#3483)
|
|
- num: fix big bug on 64-bit architecture (PR#3299)
|
|
- str: better documentation of string_match and string_partial_match (PR#3395)
|
|
- unix: fix file descriptor leak in Unix.accept (PR#3423)
|
|
- unix: miscellaneous clean-ups
|
|
- unix: fix documentation of Unix.tm (PR#3341)
|
|
- graphics: fix problem when allocating lots of images under Windows (PR#3433)
|
|
- compiler: fix error message with -pack when .cmi is missing (PR#3028)
|
|
- cygwin: fix problem with compilation of camlheader (PR#3485)
|
|
- stdlib: Filename.basename doesn't return an empty string any more (PR#3451)
|
|
- stdlib: better documentation of Open_excl flag (PR#3450)
|
|
- ocamlcp: accept -thread option (PR#3511)
|
|
- ocamldep: handle spaces in file names (PR#3370)
|
|
- compiler: remove spurious warning in pattern-matching on variants (PR#3424)
|
|
- windows: better handling of InterpreterPath registry entry (PR#3334, PR#3432)
|
|
|
|
|
|
Objective Caml 3.08.2 (22 Nov 2004):
|
|
------------------------------------
|
|
|
|
Bug fixes:
|
|
- runtime: memory leak when unmarshalling big data structures (PR#3247)
|
|
- camlp4: incorrect line numbers in errors (PR#3188)
|
|
- emacs: xemacs-specific code, wrong call to "sit-for"
|
|
- ocamldoc: "Lexing: empty token" (PR#3173)
|
|
- unix: problem with close_process_* (PR#3191)
|
|
- unix: possible coredumps (PR#3252)
|
|
- stdlib: wrong order in Set.fold (PR#3161)
|
|
- ocamlcp: array out of bounds in profiled programs (PR#3267)
|
|
- yacc: problem with polymorphic variant types for grammar entries (PR#3033)
|
|
|
|
Misc:
|
|
- export <caml/printexc.h> for caml_format_exception (PR#3080)
|
|
- clean up caml_search_exe_in_path (maybe PR#3079)
|
|
- camlp4: new function "make_lexer" for new-style locations
|
|
- unix: added missing #includes (PR#3088)
|
|
|
|
|
|
Objective Caml 3.08.1 (19 Aug 2004):
|
|
------------------------------------
|
|
|
|
Licence:
|
|
- The emacs files are now under GPL
|
|
- Slightly relaxed some conditions of the QPL
|
|
|
|
Bug fixes:
|
|
- ld.conf now generated at compile-time instead of install-time
|
|
- fixed -pack on Windows XP (PR#2935)
|
|
- fixed Obj.tag (PR#2946)
|
|
- added support for multiple dlopen in Darwin
|
|
- run ranlib when installing camlp4 libraries (PR#2944)
|
|
- link camlp4opt with -linkall (PR#2949)
|
|
- camlp4 parsing of patterns now conforms to normal parsing (PR#3015)
|
|
- install camlp4 *.cmx files (PR#2955)
|
|
- fixed handling of linefeed in string constants in camlp4 (PR#3074)
|
|
- ocamldoc: fixed display of class parameters in HTML and LaTeX (PR#2994)
|
|
- ocamldoc: fixed display of link to class page in html (PR#2994)
|
|
- Windows toplevel GUI: assorted fixes (including PR#2932)
|
|
|
|
Misc:
|
|
- added -v option to ocamllex
|
|
- ocamldoc: new -intf and -impl options supported (PR#3036)
|
|
|
|
Objective Caml 3.08.0 (13 Jul 2004):
|
|
------------------------------------
|
|
|
|
(Changes that can break existing programs are marked with a "*" )
|
|
|
|
Language features:
|
|
- Support for immediate objects, i.e. objects defined without going
|
|
through a class. (Syntax is "object <fields and methods> end".)
|
|
|
|
Type-checking:
|
|
- When typing record construction and record patterns, can omit
|
|
the module qualification on all labels except one. I.e.
|
|
{ M.l1 = ...; l2 = ... } is interpreted as { M.l1 = ...; M.l2 = ... }
|
|
|
|
Both compilers:
|
|
- More compact compilation of classes.
|
|
- Much more efficient handling of class definitions inside functors
|
|
or local modules.
|
|
- Simpler representation for method tables. Objects can now be marshaled
|
|
between identical programs with the flag Marshal.Closures.
|
|
- Improved error messages for objects and variants.
|
|
- Improved printing of inferred module signatures (toplevel and ocamlc -i).
|
|
Recursion between type, class, class type and module definitions is now
|
|
correctly printed.
|
|
- The -pack option now accepts compiled interfaces (.cmi files) in addition
|
|
to compiled implementations (.cmo or .cmx).
|
|
* A compile-time error is signaled if an integer literal exceeds the
|
|
range of representable integers.
|
|
- Fixed code generation error for "module rec" definitions.
|
|
- The combination of options -c -o sets the name of the generated
|
|
.cmi / .cmo / .cmx files.
|
|
|
|
Bytecode compiler:
|
|
- Option -output-obj is now compatible with Dynlink and
|
|
with embedded toplevels.
|
|
|
|
Native-code compiler:
|
|
- Division and modulus by zero correctly raise exception Division_by_zero
|
|
(instead of causing a hardware trap).
|
|
- Improved compilation time for the register allocation phase.
|
|
- The float constant -0.0 was incorrectly treated as +0.0 on some processors.
|
|
- AMD64: fixed bugs in asm glue code for GC invocation and exception raising
|
|
from C.
|
|
- IA64: fixed incorrect code generated for "expr mod 1".
|
|
- PowerPC: minor performance tweaks for the G4 and G5 processors.
|
|
|
|
Standard library:
|
|
* Revised handling of NaN floats in polymorphic comparisons.
|
|
The polymorphic boolean-valued comparisons (=, <, >, etc) now treat
|
|
NaN as uncomparable, as specified by the IEEE standard.
|
|
The 3-valued comparison (compare) treats NaN as equal to itself
|
|
and smaller than all other floats. As a consequence, x == y
|
|
no longer implies x = y but still implies compare x y = 0.
|
|
* String-to-integer conversions now fail if the result overflows
|
|
the range of integers representable in the result type.
|
|
* All array and string access functions now raise
|
|
Invalid_argument("index out of bounds") when a bounds check fails.
|
|
In earlier releases, different exceptions were raised
|
|
in bytecode and native-code.
|
|
- Module Buffer: new functions Buffer.sub, Buffer.nth
|
|
- Module Int32: new functions Int32.bits_of_float, Int32.float_of_bits.
|
|
- Module Map: new functions is_empty, compare, equal.
|
|
- Module Set: new function split.
|
|
* Module Gc: in-order finalisation, new function finalise_release.
|
|
|
|
Other libraries:
|
|
- The Num library: complete reimplementation of the C/asm lowest
|
|
layer to work around potential licensing problems.
|
|
Improved speed on the PowerPC and AMD64 architectures.
|
|
- The Graphics library: improved event handling under MS Windows.
|
|
- The Str library: fixed bug in "split" functions with nullable regexps.
|
|
- The Unix library:
|
|
. Added Unix.single_write.
|
|
. Added support for IPv6.
|
|
. Bug fixes in Unix.closedir.
|
|
. Allow thread switching on Unix.lockf.
|
|
|
|
Runtime System:
|
|
* Name space depollution: all global C identifiers are now prefixed
|
|
with "caml" to avoid name clashes with other libraries. This
|
|
includes the "external" primitives of the standard runtime.
|
|
|
|
Ports:
|
|
- Windows ports: many improvements in the OCamlWin toplevel application
|
|
(history, save inputs to file, etc). Contributed by Christopher A. Watford.
|
|
- Native-code compilation supported for HPPA/Linux. Contributed by Guy Martin.
|
|
- Removed support for MacOS9. Mac OS 9 is obsolete and the port was not
|
|
updated since 3.05.
|
|
- Removed ocamlopt support for HPPA/Nextstep and Power/AIX.
|
|
|
|
Ocamllex:
|
|
- #line directives in the input file are now accepted.
|
|
- Added character set concatenation operator "cset1 # cset2".
|
|
|
|
Ocamlyacc:
|
|
- #line directives in the input file are now accepted.
|
|
|
|
Camlp4:
|
|
* Support for new-style locations (line numbers, not just character numbers).
|
|
- See camlp4/CHANGES and camlp4/ICHANGES for more info.
|
|
|
|
|
|
Objective Caml 3.07 (29 Sep 2003):
|
|
----------------------------------
|
|
|
|
Language features:
|
|
- Experimental support for recursive module definitions
|
|
module rec A : SIGA = StructA and B : SIGB = StructB and ...
|
|
- Support for "private types", or more exactly concrete data types
|
|
with private constructors or labels. These data types can be
|
|
de-structured normally in pattern matchings, but values of these
|
|
types cannot be constructed directly outside of their defining module.
|
|
- Added integer literals of types int32, nativeint, int64
|
|
(written with an 'l', 'n' or 'L' suffix respectively).
|
|
|
|
Type-checking:
|
|
- Allow polymorphic generalization of covariant parts of expansive
|
|
expressions. For instance, if f: unit -> 'a list, "let x = f ()"
|
|
gives "x" the generalized type forall 'a. 'a list, instead of '_a list
|
|
as before.
|
|
- The typing of polymorphic variants in pattern matching has changed.
|
|
It is intended to be more regular, sticking to the principle of "closing
|
|
only the variants which would be otherwise incomplete". Two potential
|
|
consequences: (1) some types may be left open which were closed before,
|
|
and the resulting type might not match the interface anymore (expected to
|
|
be rare); (2) in some cases an incomplete match may be generated.
|
|
- Lots of bug fixes in the handling of polymorphism and recursion inside
|
|
types.
|
|
- Added a new "-dtypes" option to ocamlc/ocamlopt, and an emacs extension
|
|
"emacs/caml-types.el". The compiler option saves inferred type information
|
|
to file *.annot, and the emacs extension allows the user to look at the
|
|
type of any subexpression in the source file. Works even in the case
|
|
of a type error (all the types computed up to the error are available).
|
|
This new feature is also supported by ocamlbrowser.
|
|
- Disable "method is overridden" warning when the method was explicitly
|
|
redefined as virtual beforehand (i.e. not through inheritance). Typing
|
|
and semantics are unchanged.
|
|
|
|
Both compilers:
|
|
- Added option "-dtypes" to dump detailed type information to a file.
|
|
- The "-i" option no longer generates compiled files, it only prints
|
|
the inferred types.
|
|
- The sources for the module named "Mod" can be placed either in Mod.ml or
|
|
in mod.ml.
|
|
- Compilation of "let rec" on non-functional values: tightened some checks,
|
|
relaxed some other checks.
|
|
- Fixed wrong code that was generated for "for i = a to max_int"
|
|
or "for i = a downto min_int".
|
|
- An explicit interface Mod.mli can now be provided for the module obtained
|
|
by ocamlc -pack -o Mod.cmo ... or ocamlopt -pack -o Mod.cmx ...
|
|
- Revised internal handling of source code locations, now handles
|
|
preprocessed code better.
|
|
- Pattern-matching bug on float literals fixed.
|
|
- Minor improvements on pattern-matching over variants.
|
|
- More efficient compilation of string comparisons and the "compare" function.
|
|
- More compact code generated for arrays of constants.
|
|
- Fixed GC bug with mutable record fields of type "exn".
|
|
- Added warning "E" for "fragile patterns": pattern matchings that would
|
|
not be flagged as partial if new constructors were added to the data type.
|
|
|
|
Bytecode compiler:
|
|
- Added option -vmthread to select the threads library with VM-level
|
|
scheduling. The -thread option now selects the system threads library.
|
|
|
|
Native-code compiler:
|
|
- New port: AMD64 (Opteron).
|
|
- Fixed instruction selection bug on expressions of the kind (raise Exn)(arg).
|
|
- Several bug fixes in ocamlopt -pack (tracking of imported modules,
|
|
command line too long).
|
|
- Signal handling bug fixed.
|
|
- x86 port:
|
|
Added -ffast-math option to use inline trigo and log functions.
|
|
Small performance tweaks for the Pentium 4.
|
|
Fixed illegal "imul" instruction generated by reloading phase.
|
|
- Sparc port:
|
|
Enhanced code generation for Sparc V8 (option -march=v8) and
|
|
Sparc V9 (option -march=v9).
|
|
Profiling support added for Solaris.
|
|
- PowerPC port:
|
|
Keep stack 16-aligned for compatibility with C calling conventions.
|
|
|
|
Toplevel interactive system:
|
|
- Tightened interface consistency checks between .cmi files, .cm[oa] files
|
|
loaded by #load, and the running toplevel.
|
|
- #trace on mutually-recursive functions was broken, works again.
|
|
- Look for .ocamlinit file in home directory in addition to the current dir.
|
|
|
|
Standard library:
|
|
- Match_failure and Assert_failure exceptions now report
|
|
(file, line, column), instead of (file, starting char, ending char).
|
|
- float_of_string, int_of_string: some ill-formed input strings were not
|
|
rejected.
|
|
- Added format concatenation, string_of_format, format_of_string.
|
|
- Module Arg: added new option handlers Set_string, Set_int, Set_float,
|
|
Symbol, Tuple.
|
|
- Module Format: tag handling is now turned off by default,
|
|
use [Format.set_tags true] to activate.
|
|
- Modules Lexing and Parsing: added better handling of positions
|
|
in source file. Added function Lexing.flush_input.
|
|
- Module Scanf: %n and %N formats to count characters / items read so far;
|
|
assorted bug fixes, %! to match end of input. New ``_'' special
|
|
flag to skip reresulting value.
|
|
- Module Format: tags are not activated by default.
|
|
- Modules Set and Map: fixed bugs causing trees to become unbalanced.
|
|
- Module Printf: less restrictive typing of kprintf.
|
|
- Module Random: better seeding; functions to generate random int32, int64,
|
|
nativeint; added support for explicit state management.
|
|
- Module Sys: added Sys.readdir for reading the contents of a directory.
|
|
|
|
Runtime system:
|
|
- output_value/input_value: fixed bug with large blocks (>= 4 Mwords)
|
|
produced on a 64-bit platform and incorrectly read back on a 32-bit
|
|
platform.
|
|
- Fixed memory compaction bug involving input_value.
|
|
- Added MacOS X support for dynamic linking of C libraries.
|
|
- Improved stack backtraces on uncaught exceptions.
|
|
- Fixed float alignment problem on Sparc V9 with gcc 3.2.
|
|
|
|
Other libraries:
|
|
- Dynlink:
|
|
By default, dynamically-loaded code now has access to all
|
|
modules defined by the program; new functions Dynlink.allow_only
|
|
and Dynlink.prohibit implement access control.
|
|
Fixed Dynlink problem with files generated with ocamlc -pack.
|
|
Protect against references to modules not yet fully initialized.
|
|
- LablTK/CamlTK: added support for TCL/TK 8.4.
|
|
- Str: reimplemented regexp matching engine, now less buggy, faster,
|
|
and LGPL instead of GPL.
|
|
- Graphics: fixed draw_rect and fill_rect bug under X11.
|
|
- System threads and bytecode threads libraries can be both installed.
|
|
- System threads: better implementation of Thread.exit.
|
|
- Bytecode threads: fixed two library initialization bugs.
|
|
- Unix: make Unix.openfile blocking to account for named pipes;
|
|
GC bug in Unix.*stat fixed; fixed problem with Unix.dup2 on Windows.
|
|
|
|
Ocamllex:
|
|
- Can name parts of the matched input text, e.g.
|
|
"0" (['0'-'7']+ as s) { ... s ... }
|
|
|
|
Ocamldebug:
|
|
- Handle programs that run for more than 2^30 steps.
|
|
|
|
Emacs mode:
|
|
- Added file caml-types.el to interactively display the type information
|
|
saved by option -dtypes.
|
|
|
|
Win32 ports:
|
|
- Cygwin port: recognize \ as directory separator in addition to /
|
|
- MSVC port: ocamlopt -pack works provided GNU binutils are installed.
|
|
- Graphics library: fixed bug in Graphics.blit_image; improved event handling.
|
|
|
|
OCamldoc:
|
|
- new ty_code field for types, to keep code of a type (with option -keep-code)
|
|
- new ex_code field for types, to keep code of an exception
|
|
(with option -keep-code)
|
|
- some fixes in html generation
|
|
- don't overwrite existing style.css file when generating HTML
|
|
- create the ocamldoc.sty file when generating LaTeX (if nonexistent)
|
|
- man pages are now installed in man/man3 rather than man/mano
|
|
- fix: empty [] in generated HTML indexes
|
|
|
|
|
|
Objective Caml 3.06 (20 Aug 2002):
|
|
----------------------------------
|
|
|
|
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 (29 Jul 2002):
|
|
----------------------------------
|
|
|
|
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 Francois 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 (13 Dec 2001):
|
|
----------------------------------
|
|
|
|
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 (12 Oct 2001):
|
|
----------------------------------------
|
|
|
|
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 (30 Jul 2001):
|
|
----------------------------------
|
|
|
|
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 (09 Mar 2001):
|
|
----------------------------------
|
|
|
|
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 (25 Apr 2000):
|
|
----------------------------------
|
|
|
|
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 (26 Nov 1999):
|
|
----------------------------------
|
|
|
|
- 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 (19 Nov 1999):
|
|
----------------------------------
|
|
|
|
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 (04 Mar 1999):
|
|
----------------------------------
|
|
|
|
* 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 (09 Dec 1998):
|
|
----------------------------------
|
|
|
|
* 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 (19 Aug 1998):
|
|
----------------------------------
|
|
|
|
* 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 (11 Dec 1997):
|
|
----------------------------------
|
|
|
|
* 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 (18 Nov 1997):
|
|
----------------------------------
|
|
|
|
* 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 (21 Mar 1997):
|
|
----------------------------------
|
|
|
|
* 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 (11 Mar 1997):
|
|
----------------------------------
|
|
|
|
* 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 (29 Oct 1996):
|
|
----------------------------------
|
|
|
|
* 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 (27 Sep 1996):
|
|
----------------------------------
|
|
|
|
* 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 (12 Jun 1996):
|
|
----------------------------------
|
|
|
|
* 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 (9 May 1996):
|
|
---------------------------------
|
|
|
|
* 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 (15 Mar 1996):
|
|
--------------------------------------
|
|
|
|
* 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 (8 Feb 1996):
|
|
-------------------------------------
|
|
|
|
* 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 (4 Jan 1996):
|
|
-------------------------------------
|
|
|
|
* 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 (30 Nov 1995):
|
|
--------------------------------------
|
|
|
|
* Fixed an embarrassing bug with references to floats.
|
|
|
|
Caml Special Light 1.11 (29 Nov 1995):
|
|
--------------------------------------
|
|
|
|
* 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 (07 Nov 1995):
|
|
--------------------------------------
|
|
|
|
* 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 (20 Sep 1995):
|
|
--------------------------------------
|
|
|
|
* 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 (12 Sep 1995):
|
|
--------------------------------------
|
|
|
|
* First public release.
|