OCaml Changelog

What's new in OCaml 4.03.0

Jun 11, 2016
  • Highlights:
  • A new intermediate representation, called Flambda, was added to the native-code compiler, along with several new optimizations over the Flambda representation, such as aggressive function inlining. (The Flambda optimizer needs to be activated at configuration time by ./configure -flambda.)
  • New language feature: inline records as arguments to datatype constructors. This makes it possible to name the arguments of a constructor, and use convenient record notation to access them, without the cost of declaring a separate record type for the arguments.
  • The @unboxed and @untagged attributes are supported on external function declarations to pass parameters and results to C stub functions in a more efficient way. Other attributes honored by the compiler include @tailcall and @inline.
  • Improvements to the garbage collector, resulting in better GC latency (shorter GC pauses).
  • Support for ephemerons, a more general form of GC finalization of data structures.
  • The runtime system is now compiled at higher levels of C optimization, resulting in significant speedups for the bytecode interpreter.
  • New native code generators supporting the PowerPC 64-bit architecture (in big and little-endian modes) and the IBM zSystem architecture.
  • The whole code base (compilers, libraries and tools) is now licensed under the LGPL v2.1 with static linking exception.
  • The ocamlbuild compilation manager was split off and lives as an independent project.

New in OCaml 4.02.2 (Jun 19, 2015)

  • 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 (Peter Zotov, Gabriel Scherer, review by Damien Doligez)
  • PR#6797: new option -output-complete-obj to output an object file with included runtime and autolink libraries (Peter Zotov)
  • 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. (Peter Zotov)
  • PR#6702: explicit "linkpkg" and "dontlink(foo)" flags (Peter Zotov, Gabriel Scherer)
  • PR#6712: Ignore common VCS directories (Peter Zotov)
  • PR#6720: pass -g to C compilers when tag 'debug' is set (Peter Zotov, Gabriel Scherer)
  • PR#6733: add .byte.so and .native.so targets to pass -output-obj -cclib -shared. (Peter Zotov)
  • PR#6733: "runtime_variant(X)" to pass -runtime-variant X option. (Peter Zotov)
  • 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 (Peter Zotov, 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 Peter Zotov)
  • 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. (Peter Zotov)
  • PR#6617: allow android build with pthreads support (since SDK r10c) (Peter Zotov)
  • 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 (Peter Zotov, review by Jacques-Henri Jourdan, Xavier Leroy and Mark Shinwell)
  • PR#6717: Pprintast does not print let-pattern attributes (Gabriel Scherer, report by Peter Zotov)
  • 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#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 Peter Zotov)
  • 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 Peter Zotov)
  • 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#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 (Peter Zotov)
  • PR#6693: also build libasmrun_shared.so and lib{asm,caml}run_pic.a (Peter Zotov, 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#157: store the path of cmos inside debug section at link time (Hugo Heuzard, review by Damien Doligez)
  • GPR#191: Making gc.h and some part of memory.h public (Thomas Refis)

New in OCaml 4.02.1 (Oct 16, 2014)

  • Standard library:
  • Add optional argument ?limit to Arg.align.
  • 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 (Peter Zotov)
  • 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 substitued 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 Peter Zotov)
  • 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#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)

New in OCaml 4.02 (Oct 16, 2014)

  • In a first step towards making strings immutable, a type bytes of mutable byte arrays and a supporting library module Bytes were introduced. By default, bytes is a synonymous for string, so existing code that mutates values of type string still compiles, with warnings. Option -safe-string separates the types string and bytes, making strings immutable.
  • The match construct was extended to discriminate not just on the value of its argument expression, but also on exceptions arising out of the evaluation of this expression. This solves an old problem: in a let x = a in b, catch exceptions raised by a but not those raised by b.
  • Module aliases (giving an alternative name to an existing module or compilation unit, as in module M = AnotherModule) are now tracked specially by the type system and the compiler. This enables not only more precise typing of applicative functors, but also more precise dependency analysis at link-time, potentially reducing the size of executables.
  • Annotations can now be attached to most syntactic elements of OCaml sources (expressions, definitions, type declarations, etc). These annotations are used by the compiler (e.g. to warn on uses of functions annotated as deprecated) but also by "ppx" preprocessors, to guide rewriting of abstract syntax trees.
  • Extensible data types can be declared (type t = ...) then later extended with new constructors (type t += A of int). This generalizes the handling of the exn type of exception values.
  • Functors and functor applications can now take a special () argument to force generativity of abstract types.
  • New toplevel directives #show_type, #show_modules, etc, to query the toplevel environment.
  • Performance of ocamlopt-generated code is improved on some programs through more aggressive constant propagation, two new optimization passes (dead code elimination and common subexpression elimination), better compilation of pattern-matching over strings, optimized representation of constant exceptions, and GC tuning for large memory heaps.
  • The format strings argument of printf functions are now represented as a GADT. This speeds up the printf functions considerably, and leads to more precise typechecking of format strings.
  • The native-code compiler now supports the AArch64 (ARM 64 bits) architecture.
  • The Camlp4 preprocessor and the Labltk library were split off the distribution. They are now separate projects.

New in OCaml 4.01.0 (Sep 12, 2013)

  • 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 P. 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 P. 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)
  • 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 P. 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 P. 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 P. 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 P. 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 P. 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#6060: ocamlbuild rules for -principal, -strict-sequence and -short-paths (Anil Madhavapeddy)
  • 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 P. White)
  • PR#6164: segmentation fault on Num.power_num of 0/1 (Fabrice Le Fessant, report by Johannes Kanig)
  • 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)
  • 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)

New in OCaml 4.01.0 RC 1 (Sep 3, 2013)

  • Bug fixes:
  • PR#5712: (9) new option -bin-annot is not documented
  • PR#5912: add configure option -no-cfi (for OSX 10.6.x with XCode 4.0.2)
  • PR#6123: Assert failure when self escapes its class
  • Tools:
  • PR#6030: Improve performance of -annot

New in OCaml 4.01.0 Beta 1 (Aug 16, 2013)

  • Other libraries:
  • Labltk: updated to Tcl/Tk 8.6.
  • Type system:
  • 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.
  • PR#6035: Reject multiple declarations of the same method or instance variable in an object
  • Compilers:
  • PR#5861: raise an error when multiple private keywords are used in type declarations
  • PR#5634: parsetree rewriter (-ppx flag)
  • ocamldep now supports -absname
  • PR#5768: On "unbound identifier" errors, use spell-checking to suggest names present in the environment
  • ocamlc has a new option -dsource to visualize the parsetree
  • tools/eqparsetree compares two parsetree ignoring location
  • ocamlopt now uses clang as assembler on OS X if available, which enables CFI support for OS X.
  • 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.
  • PR#5986: added flag -compat-32 to ocamlc, ensuring that the generated bytecode executable can be loaded on 32-bit hosts.
  • PR#5980: warning on open statements which shadow an existing identifier (if it is actually used in the scope of the open)
  • warning 3 is extended to warn about other deprecated features: ISO-latin1 characters in identifiers uses of the (&) and (or) operators instead of (&&) and (||)
  • Experimental OCAMLCOMPPARAM for ocamlc and ocamlopt
  • PR#5571: incorrect ordinal number in error message
  • PR#6073: add signature to Tstr_include
  • Standard library:
  • PR#5899: expose a way to inspect the current call stack (Printexc.get_callstack)
  • PR#5986: new flag Marshal.Compat_32 for the serialization functions (Marshal.to_*), forcing the output to be readable on 32-bit hosts.
  • Add optimized composition operators |> and @@ in Pervasives
  • Other libraries:
  • PR#5568: add O_CLOEXEC flag to Unix.openfile, so that the returned file descriptor is created in close-on-exec mode
  • 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.
  • 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.
  • The test suite can now be run without installing OCaml first.
  • Bug fixes:
  • PR#3236: Document the fact that queues are not thread-safe
  • PR#3468: (part 1) Sys_error documentation
  • PR#3679: Warning display problems
  • PR#3963: Graphics.wait_next_event in Win32 hangs if window closed
  • PR#4079: Queue.copy is now tail-recursive
  • PR#4138: Documentation for Unix.mkdir
  • PR#4469: emacs mode: caml-set-compile-command is annoying with ocamlbuild
  • PR#4485: Graphics: Keyboard events incorrectly delivered in native code
  • PR#4502: ocamlbuild now reliably excludes the build-dir from hygiene check
  • PR#4762: ?? is not used at all, but registered as a lexer token
  • PR#4788: wrong error message when executable file is not found for backtrace
  • PR#4812: otherlibs/unix: add extern int code_of_unix_error (value error);
  • PR#4887: input_char after close_in crashes ocaml (msvc runtime)
  • PR#4994: ocaml-mode doesn't work with xemacs21
  • PR#5098: creating module values may lead to memory leaks
  • PR#5102: ocamlbuild fails when using an unbound variable in rule dependency
  • PR#5119: camlp4 now raises a specific exception when 'DELETE_RULE' fails, rather than raising 'Not_found'
  • PR#5121: %( %) in Format module seems to be broken
  • PR#5178: document in INSTALL how to build a 32-bit version under Linux x86-64
  • PR#5212: Improve ocamlbuild error messages of _tags parser
  • PR#5240: register exception printers for Unix.Unix_error and Dynlink.Error
  • PR#5300: ocamlbuild: verbose parameter should implicitly set classic display
  • PR#5327: (Windows) Unix.select blocks if same socket listed in first and third arguments
  • PR#5343: ocaml -rectypes is unsound wrt module subtyping (was still unsound)
  • PR#5350: missing return code checks in the runtime system
  • PR#5468: ocamlbuild should preserve order of parametric tags
  • PR#5551: Avoid repeated lookups for missing cmi files
  • PR#5552: try to use camlp4.opt if it's possible
  • PR#5580: missed opportunities for constant propagation
  • PR#5611: avoid clashes betwen .cmo files and output files during linking
  • PR#5662: typo in md5.c
  • PR#5673: type equality in a polymorphic field
  • PR#5674: Methods call are 2 times slower with 4.00 than with 3.12
  • PR#5694: Exception raised by type checker
  • PR#5695: remove warnings on sparc code emitter
  • PR#5697: better location for warnings on statement expressions
  • PR#5698: remove harcoded limit of 200000 labels in emitaux.ml
  • PR#5702: bytecomp/bytelibrarian lib_sharedobjs was defined but never used
  • PR#5708: catch Failure"int_of_string" in ocamldebug
  • PR#5731: instruction scheduling forgot to account for destroyed registers
  • PR#5734: improved Win32 implementation of Unix.gettimeofday
  • PR#5735: %apply and %revapply not first class citizens
  • PR#5738: first class module patterns not handled by ocamldep
  • PR#5739: Printf.printf "%F" (-.nan) returns -nan
  • PR#5741: make pprintast.ml in compiler_libs
  • PR#5747: 'unused open' warning not given when compiling with -annot
  • PR#5752: missing dependencies at byte-code link with mlpack
  • PR#5758: Compiler bug when matching on floats
  • PR#5763: ocamlbuild does not give correct flags when running menhir
  • PR#5765: ocamllex doesn't preserve line directives
  • PR#5770: Syntax error messages involving unclosed parens are sometimes incorrect
  • PR#5772: problem with marshaling of mutually-recursive functions
  • PR#5775: several bug fixes for tools/pprintast.ml
  • PR#5784: -dclambda option is ignored
  • PR#5785: misbehaviour with abstracted structural type used as GADT index
  • PR#5787: Bad behavior of 'Unused ...' warnings in the toplevel
  • PR#5793: integer marshalling is inconsistent between architectures
  • PR#5798: add ARM VFPv2 support for Raspbian (ocamlopt)
  • PR#5802: Avoiding "let" as a value name
  • PR#5805: Assert failure with warning 34 on pre-processed file
  • PR#5806: ensure that backtrace tests are always run (testsuite)
  • PR#5809: Generating .cmt files takes a long time, in case of type error
  • PR#5810: error in switch printing when using -dclambda
  • PR#5811: Untypeast produces singleton tuples for constructor patterns with only one argument
  • PR#5813: GC not called when unmarshaling repeatedly in a tight loop (ocamlopt)
  • PR#5814: read_cmt -annot does not report internal references
  • PR#5815: Multiple exceptions in signatures gives an error
  • PR#5816: read_cmt -annot does not work for partial .cmt files
  • PR#5819: segfault when using [with] on large recursive record (ocamlopt)
  • PR#5821: Wrong record field is reported as duplicate
  • PR#5824: Generate more efficient code for immediate right shifts.
  • PR#5825: Add a toplevel primitive to use source file wrapped with the coresponding module
  • PR#5835: nonoptional labeled arguments can be passed with '?'
  • PR#5840: improved documentation for 'Unix.lseek'
  • PR#5848: Assertion failure in type checker
  • PR#5858: Assert failure during typing of class
  • PR#5865: assert failure when reporting undefined field label
  • PR#5872: Performance: Buffer.add_char is not inlined
  • PR#5876: Uncaught exception with a typing error
  • PR#5877: multiple "open" can become expensive in memory
  • PR#5880: 'Genlex.make_lexer' documention mentions the wrong exception
  • PR#5885: Incorrect rule for compiling C stubs when shared libraries are not supported.
  • PR#5891: ocamlbuild: support rectypes tag for mlpack
  • PR#5892: GADT exhaustiveness check is broken
  • PR#5906: GADT exhaustiveness check is still broken
  • PR#5907: Undetected cycle during typecheck causes exceptions
  • PR#5910: Fix code generation bug for "mod 1" on ARM.
  • PR#5911: Signature substitutions fail in submodules
  • PR#5914: Functor breaks with an equivalent argument signature
  • PR#5920, PR#5957: linking failure for big bytecodes on 32bit architectures
  • PR#5928: Missing space between words in manual page for ocamlmktop
  • PR#5930: ocamldep leaks temporary preprocessing files
  • PR#5933: Linking is slow when there are functions with large arities
  • PR#5934: integer shift by negative amount (in otherlibs/num)
  • PR#5944: Bad typing performances of big variant type declaration
  • PR#5945: Mix-up of Minor_heap_min and Minor_heap_max units
  • PR#5948: GADT with polymorphic variants bug
  • PR#5953: Unix.system does not handle EINTR
  • PR#5965: disallow auto-reference to a recursive module in its definition
  • PR#5973: Format module incorrectly parses format string
  • PR#5974: better documentation for Str.regexp
  • PR#5976: crash after recovering from two stack overflows (ocamlopt on MacOS X)
  • PR#5977: Build failure on raspberry pi: "input_value: integer too large"
  • PR#5981: Incompatibility check assumes abstracted types are injective
  • PR#5982: caml_leave_blocking section and errno corruption
  • PR#5985: Unexpected interaction between variance and GADTs
  • PR#5986: Protect against marshaling 64-bit integers in bytecode
  • PR#5988: missing from the documentation: -impl is a valid flag for ocamlopt
  • PR#5989: Assumed inequalities involving private rows
  • PR#5992: Crash when pattern-matching lazy values modifies the scrutinee
  • PR#5993: Variance of private type abbreviations not checked for modules
  • PR#5997: Non-compatibility assumed for concrete types with same constructor
  • PR#6004: Type information does not flow to "inherit" parameters
  • PR#6005: Type unsoundness with recursive modules
  • PR#6010: Big_int.extract_big_int gives wrong results on negative arguments
  • PR#6024: Format syntax for printing @ is incompatible with 3.12.1
  • PR#6001: Reduce the memory used by compiling Camlp4
  • PR#6031: Camomile problem with -with-frame-pointers
  • PR#6032: better Random.self_init under Windows
  • PR#6033: Matching.inline_lazy_force needs eta-expansion (command-line flags)
  • PR#6046: testsuite picks up the wrong ocamlrun dlls
  • PR#6056: Using 'match' prevents generalization of values
  • PR#6058: 'ocamlbuild -use-ocamlfind -tag thread -package threads t.cma' fails
  • PR#6060: ocamlbuild rules for -principal, -strict-sequence and -short-paths
  • PR#6069: ocamldoc: lexing: empty token
  • PR#6072: configure does not handle FreeBSD current (i.e. 10) correctly
  • PR#6074: Wrong error message for failing Condition.broadcast
  • PR#6084: Define caml_modify and caml_initialize as weak symbols to help with Netmulticore
  • PR#6090: Module constraint + private type seems brocken in ocaml 4.01.0
  • PR#6109: Typos in ocamlbuild error messages
  • Feature wishes:
  • PR#5181: Merge common floating point constants in ocamlopt
  • PR#5546: moving a function into an internal module slows down its use
  • PR#5597: add instruction trace option 't' to OCAMLRUNPARAM
  • PR#5676: IPv6 support under Windows
  • PR#5721: configure -with-frame-pointers for Linux perf profiling
  • PR#5722: toplevel: print full module path only for first record field
  • PR#5762: Add primitives for fast access to bigarray dimensions
  • PR#5769: Allow propagation of Sys.big_endian in native code
  • PR#5771: Add primitives for reading 2, 4, 8 bytes in strings and bigarrays
  • PR#5774: Add bswap primitives for amd64 and arm
  • PR#5795: Generate sqrtsd opcode instead of external call to sqrt on amd64
  • PR#5827: provide a dynamic command line parsing mechanism
  • PR#5832: patch to improve "wrong file naming" error messages
  • PR#5864: Add a find operation to Set
  • PR#5886: Small changes to compile for Android
  • PR#5902: -ppx based pre-processor executables accept arguments
  • PR#6049: support for OpenBSD/macppc platform
  • PR#6059: add -output-obj rules for ocamlbuild
  • Tools:
  • OCamlbuild now features a bin_annot tag to generate .cmt files.
  • OCamlbuild now features a strict_sequence tag to trigger the strict-sequence option.
  • OCamlbuild now picks the non-core tools like ocamlfind and menhir from PATH
  • PR#5884: Misc minor fixes and cleanup for emacs mode
  • PR#6030: Improve performance of -annot

New in OCaml 4.00.1 (Mar 8, 2013)

  • 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