From : Damien Doligez <damien.doligez AT inria.fr>

: Damien Doligez <damien.doligez AT inria.fr> To : caml announce <caml-announce AT inria.fr>, caml users <caml-list AT inria.fr>

: caml announce <caml-announce AT inria.fr>, caml users <caml-list AT inria.fr> Subject : [Caml-list] OCaml release 4.03.0

: [Caml-list] OCaml release 4.03.0 Date: Mon, 25 Apr 2016 21:35:09 +0200

Dear OCaml users,We have the pleasure of celebrating the birthday of Andrey Kolmogorovby announcing the release of OCaml version 4.03.0.It is available as a bunch of OPAM switches, or as a sourcedownload here: < http://caml.inria.fr/pub/distrib/ocaml-4.03/ >.The OPAM switches are:4.03.0 Official 4.03.0 release4.03.0+flambda Official 4.03.0 release with flambda enabled4.03.0+fp Official 4.03.0 release with frame pointers4.03.0+fp+flambda Official 4.03.0 release with frame pointers and flambdaenabledHappy hacking,-- Damien Doligez for the OCaml team.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 patternof the pattern is actually inhabited, exploding at most one wild card.This is also done for exhaustiveness when there is only one case.Additionally, 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 typeconstructors(Alain Frisch)- PR#6714: allow [@@ocaml.warning] on most structure and signature items:values, modules, module types(whitequark)- PR#6806: Syntax shortcut for putting a type annotation on a record field:{ f1 : typ = e } is sugar for { f1 = (e : typ) }{ f1 : typ } is sugar for { f1 = (f1 : typ) }(Valentin Gatien-Baron, review by Jérémie Dimino)- PR#6806: Allow type annotations before the "->" in "fun -> "fun x y : (int * int) -> (x, y)(Valentin Gatien-Baron, review by Jérémie Dimino)- 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#112: octal escape sequences for char and string literals"Make it \o033[1mBOLD\o033[0m"(Rafaël Bocquet, request by John Whitingthon)- GPR#167: allow to annotate externals' arguments and result types sothey can be unboxed or untagged: [@unboxed], [@untagged]. Supportsuntagging int and unboxing int32, int64, nativeint and float.(Jérémie Dimino, Mark Shinwell)- GPR#173: [@inline] and [@inlined] attributes (for function declarationsand call sites respectively) to control inlining(Pierre Chambart, Mark Shinwell)- GPR#188: accept [@@immediate] attribute on type declarations to mark typesthat are represented at runtime by an integer(Will Crichton, reviewed by Leo White)* GPR#234: allow "[]" as a user-defined constructor. Demand parenthesisaround "::" when using "::" as user-defined constructor:code using "| :: of ..." must change to "| (::) of ...".(Runhang Li, review by Damien Doligez)- GPR#240: 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 towarn when the argument is matches against a constant pattern. Thisattribute is applied on predefined exception constructors whichcarry purely informational (with no stability guarantee) messages.(Alain Frisch)- GPR#268: hexadecimal notation for floating-point literals: -0x1.ffffp+987In OCaml source code, FP literals can be written using the hexadecimalnotation 0x p from ISO C99.(Xavier Leroy)- GPR#273: allow to get the extension slot of an extension constructorby writing [%extension_constructor ](Jérémie Dimino)- GPR#282: change short-paths penalty heuristic to assign the same cost toidents containing double underscores as to idents starting with anunderscore(Thomas Refis, Leo White)- PR#6681 GPR#326: signature items are now accepted as payloads forextension and attributes, using the syntax [%foo: SIG ] or [@foo: SIG ].Examples: "[%%client: val foo : int]" or "val%client foo : int".(Alain Frisch and Gabriel Radanne)* GPR#342: Allow shortcuts for extension and attributes on all keywords:module%foo, class[@foo], etc.The attribute in "let[@foo] .. in .." is now attached to the value binding,not to the expression.(Gabriel Radanne)Compilers:==========* PR#4231, PR#5461: warning 31 is now fatal by default(Warning 31: A module is linked twice in the same executable.)This is an interim solution; double-linking of modules has dangeroussemantics, eg. exception constructors end up with two distinct declarations.(Alain Frisch)- PR#4800: better compilation of tuple assignment(Gabriel Scherer and Alain Frisch)- PR#5995: keep -for-pack into account to name exceptions;-for-pack should now be used during bytecode compilation 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)- PR#6679: fix pprintast printing of constraints in type declarations(Alain Frisch, report by Jun Furuse)- PR#6737: fix Typedtree attributes on (fun x -> body) expressions(Alain Frisch, report by Oleg Kiselyov)* PR#6865: remove special case for parsing "let _ = expr" in structures(Jérémie Dimino, Alain Frisch)* PR#6438, PR#7059, GPR#315: Pattern guard disables exhaustiveness check(function Some x when x = 0 -> ()) will now raise warning 8 (non-exhaustive)instead of warning 25 (all clauses are guarded). 25 isn't raised anymore.Projects that set warning 8 as an error may fail to compile (presumablythis is the semantics they wanted).(Alain Frisch, request by Martin Jambon and John Whitington)- PR#6920: fix debug informations around uses of %apply or %revapply(Jérémie Dimino, report by Daniel Bünzli)- PR#6939: Segfault with improper use of let-rec(Alain Frisch)- PR#6943: native-code generator for POWER/PowerPC 64 bits, both inbig-endian (ppc64) and little-endian (ppc64le) configuration.(Xavier Leroy, with inspiration from RedHat's unofficial ppc64 and ppc64leports)- PR#6979: better code generation in x86-32 backend for copying floats tothe stack(Marc Lasson, review by Xavier Leroy)- PR#7018: fix missing identifier renaming during inlining(Alain Frisch, review by Xavier Leroy)- PR#7022, GPR#259: unbox float and boxed ints earlier, avoid second pass(Alain Frisch)- PR#7026, GPR#288: remove write barrier for polymorphic variants withoutarguments(Simon Cruanes)- PR#7031: new warning 57, ambiguous guarded or-patterns(Luc Maranget, Gabriel Scherer, report by Martin Clochard and Claude Marché)- PR#7064, GPR#316: allowing to mark compilation units and sub-modules asdeprecated(Alain Frisch)- PR#7067: fix performance regression (wrt. 4.01) in the native compilerfor long nested structures(Alain Frisch, report by Daniel Bünzli, review by Jacques Garrigue)- PR#7097: fix strange syntax error message around illegal packaged modulesignature constraints(Alain Frisch, report by Jun Furuse)- PR#7118, PR#7120, GPR#408, GPR#476: Bug fixed in stack unwindingmetadata generation. Was a cause of crashes in GUI programs on OS X.(Bart Jacobs, review by Mark Shinwell)- PR#7168: Exceeding stack limit in bytecode can lead to a crash.(Jacques-Henri Jourdan)- PR#7232: Strange Pprintast output with ppx_deriving(Damien Doligez, report by Anton Bachin)- GPR#17: some cmm optimizations of integer operations with constants(Stephen Dolan, review by Pierre Chambart)- GPR#89: improve type-specialization of unapplied primitives:unapplied annotations (compare : int -> _),type propagation (List.sort compare [1;2;3])and propagation from module signatures now lead to specialization(Frédéric Bour, review by Gabriel Scherer)- GPR#107: Prevent more unnecessary float boxing, especially in `if` and`match`(Vladimir Brankov, review by Alain Frisch)- GPR#109: new (lazy) unboxing strategy for float and int references(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#132: Flambda: new intermediate language and "middle-end" optimizers(Pierre Chambart, Mark Shinwell, Leo White)- GPR#212, PR#7226, GPR#542: emit column position in gas assembly `.loc`(Frédéric Bour, Anton Bachin)- GPR#207: Colors in compiler messages (warnings, errors)configure with -color {auto|always|never} or TERM=dumb(Simon Cruanes, review by Gabriel Scherer)- GPR#258: more precise information on PowerPC instruction sizes(Pierre Chambart, Xavier Leroy)- GPR#263: improve code generation for if-equivalents of (&&) and (||)(Pierre Chambart)- GPR#270: Make [transl_exception_constructor] generate [Immutable] blocks(Mark Shinwell)- GPR#271: Fix incorrect mutability flag when records are built using "with"(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, takepenalty into account while building the printing map.(Thomas Refis, Leo White)- GPR#306: Instrument the compiler to debug performance regressions(Pierre Chambart)- GPR#319: add warning 58 for missing cmx files, andextend -opaque option to mli files: a missing .cmx does not warnif the corresponding .cmi is compiled -opaque.(Leo White)- GPR#388: OCAML_FLEXLINK environment variable allows overriding flexlinkcommand (David Allsopp)- GPR#392: put all parsetree invariants in a new module Ast_invariants(Jérémie Dimino)- GPR#407: don't display the name of compiled .c files when calling theMicrosoft C Compiler (same as the assembler).(David Allsopp)- GPR#431: permit constant float arrays to be eligible for pattern matchbranch merging(Pierre Chambart)- GPR#455: provide more debugging information to Js_of_ocaml(Jérôme Vouillon)- GPR#514, GPR#554: Added several command-line flags to explicitly enablesettings that are currently the default:`-alias-deps`, `-app-funct`, `-no-keep-docs`, `-no-keep-locs`,`-no-principal`, `-no-rectypes`, `-no-strict-formats`(Demi Obenour)- GPR#545: use reraise to preserve backtrace on`match .. with exception e -> raise e`(Nicolas Ojeda Bar, review by Gabriel Scherer)Runtime system:===============- PR#3612, PR#92: allow allocating custom block with finalizersin the minor heap.(Pierre Chambart)* PR#6517: use ISO C99 types {,u}int{32,64}_t in preference to our homegrowntypes {,u}int{32,64}.C stubs may have to be updated as {,u}int{32,64}_t are not defined anymore.(Xavier Leroy)- PR#6760: closures evaluated in the toplevel can now be marshalled(whitequark, review by Jacques-Henri Jourdan)- PR#6902, GPR#210: emit a runtime warning on stderrwhen finalizing an I/O channel which is still open:"channel opened on file '...' dies without being closed"this is controlled by OCAMLRUNPARAM=W=1 or with Sys.enable_runtime_warnings.The behavior of affected program is not changed,but they should still be fixed.(Alain Frisch, review by Damien Doligez)- Signal handling: for read-and-clear, use GCC/Clang atomic builtinsif 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 >= 3.4 and Clangwhen compiling the run-time system and C stub code."-std=gnu99 -O2 -fno-strict-aliasing -fwrapv" is used by default.This also affects default flags for user stubs compiled with "ocamlc -cfoo.c"and may uncover bugs in them.(Xavier Leroy)- GPR#262: Multiple GC roots per compilation unit(Pierre Chambart, Mark Shinwell, review by Damien Doligez)* GPR#297: Several changes to improve the worst-case GC pause time.Changes Gc.control and Gc.major_slice and adds functions to the Gc module.(Damien Doligez, with help from Francois Bobot, Thomas Braibant, Leo White)- GPR#325: Add v=0x400 flag to OCAMLRUNPARAM to display GC stats on exit(Louis Gesbert, review by Alain Frisch)Standard library:=================- PR#1460, GPR#230: Array.map2, Array.iter2(John Christopher McAlpine)- 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 representationsrecognized 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 js_of_ocamlportability(Hugo Heuzard)- PR#6449: Add Map.union(Alain Frisch)* PR#6494: Add 'equal' functions in modulesBytes, Char, Digest, Int32, Int64, Nativeint, and StringUsers defining their own modules with signature 'module type of Int32'have to extend their implementation.(Romain Calascibetta)* PR#6524, GPR#79: Filename: Optional ?perms argument to open_temp_fileMay break partial applications of the function (fix by passing ?perms:None)(Daniel Bünzli, review by Jacques-Pascal Deplaix)* PR#6525, GPR#80: Add Uchar module to the standard libraryMay introduce module name conflicts with existing projects.(Daniel Bünzli, review by Yoriyuki Yamagata and Damien Doligez)- PR#6577: improve performance of %L, %l, %n, %S, %C format specifiers(Alain Frisch)- PR#6585: fix memory leak in win32unix/createprocess.c(Alain Frisch, report by user 'aha')- PR#6645, GPR#174: Guarantee that Set.add, Set.remove, Set.filterreturn the original set if no change is required(Alain Frisch, Mohamed Iguernlala)- PR#6649, GPR#222: accept (int_of_string "+3")(John Christopher McAlpine)- PR#6694, PR#6695, GPR#124: deprecate functions using ISO-8859-1 charactersetin Char, Bytes, String and provide alternatives *_acii using US-ASCII.Affected functions:{Char,String,Bytes}.{uppercase,lowercase},{String,Bytes}.{capitalize,uncaptialize}(whitequark, review by Damien Doligez)- GPR#22: Add the Ephemeron module that implements ephemerons and weakhash table(François Bobot, review by Damien Doligez, Daniel Bünzli,Alain Frisch, Pierre Chambart)- GPR#164: more efficient (branchless) implementation of Pervasives.comparespecialized at type 'float'.(Vladimir Brankov)- GPR#175: Guarantee that Map.add, Map.remove, Map.filterreturn the original map if no change is required.(Mohamed Iguernlala)- 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(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 tosupport 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.(François Bobot)- PR#3622, GPR#195: add function Stack.fold(Simon Cruanes)- GPR#329: Add exists, for_all, mem and memq functions in Array(Bernhard Schommer)- GPR#337: Add [Hashtbl.filter_map_inplace](Alain Frisch)- GPR#356: Add [Format.kasprintf](Jérémie Dimino, Mark Shinwell)Type system:============- PR#5545: Type annotations on methods cannot control the choice ofabbreviation(Jacques Garrigue)* PR#6465: allow incremental weakening of module aliases.This is done by adding equations to submodules when expanding aliases.In theory this may be incompatible is some corner cases defining a moduletype through inference, but no breakage known on published code.(Jacques Garrigue)- PR#6593: Functor application in tests/basic-modules fails after commit 15405(Jacques Garrigue)Toplevel and debugger:======================- PR#6113: Add descriptions to directives, and display them via #help(Nick Giannarakis, Berke Durak, Francis Southern and Gabriel Scherer)- PR#6396: Warnings-as-errors not properly flushed in the toplevel(Alain Frisch)- PR#6401: use proper error reporting for toplevel environment initialization:no more Env.Error(_) at start time(Gabriel Scherer, 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#6906: wrong error location for unmatched paren with #use in toplevel(Damien Doligez, report by Kenichi Asai)- PR#6935, GPR#298: crash in debugger when load_printer is given a directory(Junsong Li, review by 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)- PR#7101: The toplevel does not close in_channel for libraries specified onits command line(Alain Frisch)- PR#7119: the toplevel does not respect [@@@warning](Alain Frisch, report by Gabriel Radanne)Other libraries:================* Unix library: channels created by Unix.in_channel_of_descr orUnix.out_channel_of_descr no longer support text mode under Windows.Calling [set_binary_mode_{in,out} chan false] on these channelsnow causes an error.(Xavier Leroy)- 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#6120, GPR#462: implement Unix.symlink and Unix.readlink onWindows. Unix.symlink has a new optional argument to_dir (ignored onnon-native Windows platforms). stat functions reimplemented to avoidbuggy Microsoft CRT implementations (native Windows only)(David Allsopp, review by Daniel Bünzli)- PR#6263: add kind_size_in_bytes and size_in_bytes functionsto Bigarray module.(Runhang Li, review by Mark Shinwell)- PR#6289: Unix.utimes uses the current time only if both argumentsare 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 andRatio.float_of_ratio, ensuring that the result is correctly rounded.(Xavier Leroy)- PR#6989: in Str library, make sure that all \(...\) groups are bindingand can be consulted with Str.matched_group. There used to bea 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.(Xavier Leroy, question by Fredrik Lindgren)- PR#7209: do not run at_exit handlers in [Unix.create_process] andsimilar functions when the [exec] call fails in the child process(Jérémie Dimino)OCamldep:=========- GPR#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 tothe manual are warmly welcome.(François Bobot, review by Florian Angeletti)- PR#6601: replace strcpy with caml_strdup in sample code(Christopher Zimmermann)- PR#6676: ongoing simplification of the "Language Extensions" section(Alain Frisch, John Whitington)- PR#6898: Update win32 support documentation of the Unix library(Damien Doligez, report by Daniel Bünzli)- PR#7092, GPR#379: Add missing documentation for new 4.03 features(Florian Angeletti)- PR#7094, GPR#468, GPR#551: add new section 8.5 to document warningsThe general idea is to document warnings that may require explanations.Currently documented warnings are:- 52: Fragile constant pattern.- 57: Ambiguous or-pattern variables under guard(Florian Angeletti and Gabriel Scherer)- PR#7109, GPR#380: Fix bigarray documentation layout(Florian Angeletti, Leo White)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 operationson the same socket could block unexpectedly. Fixed by keeping socketsin asynchronous mode rather than creating them in synchronous mode.(Xavier Leroy)* PR#4539: change exception string raised when comparing functional valuesMay break programs matching on the string argument of Invalid_argument.Matching on the string argument of Invalid_argument or Failure is aprogramming mistake: these strings may change in future versions.(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 thatappears nowhere(Jacques Garrigue, report by Stephen Weeks)- PR#5780: report more informative type names in GADTs error messages(Jacques Garrigue, report by Sebastien Furic)- PR#5887: move the byterun/*.h headers to byterun/caml/*.h to avoid headername clashes(Jérôme Vouillon and Adrien Nader and whitequark)* PR#6081: ocaml now adds script's directory to search path, not currentdirectory(Thomas Leonard and Damien Doligez)- PR#6108, PR#6802: fail cleanly if dynlink.cma or ocamltoplevel.cmaare loaded inside the toplevel loop.(Xavier Leroy)- PR#6171: Confusing error message when a type escapes its scope.(Jacques Garrigue and Leo White, report by John Whitington)- 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 were locale-dependentwe now escape all non-ASCII-printable instead of a locale-dependent subset.(Damien Doligez, report by Jun Furuse)- PR#6526: ocamllex should not warn on unescaped newline inside comments(Damien Doligez, report by user 'dhekir')- PR#6341: ocamldoc -colorize-code adds spurious

tags to blocks(Maxence Guesdon, report by Damien Doligez)- PR#6560: Wrong failure message for {Int32,Int64,NativeInt}.of_stringIt reported (Failure "int_of_string"), now "Int32.of_string" etc.(Maxime Dénès and Gabriel Scherer)- PR#6648: show_module should indicate its elision(Jacques Garrigue, report by Leo White)- PR#6650: Cty_constr not handled correctly by Subst(Jacques Garrigue, report by Leo White)- PR#6651: Failing component lookup(Jacques Garrigue, report by Leo White)* PR#6664: Crash when finalising lazy values of the wrong type.(Damien Doligez)- PR#6672: Unused variance specification allowed in with constraint(Jacques Garrigue, report by Leo White)- PR#6677: Allow to disable warning 39 (useless "rec") with [@ocaml.warning]applied to the first value binding of the would-be "rec" declaration(Alain Frisch, report by Jun Furuse)- PR#6744: Univars can escape through polymorphic variants (partial fix)(Jacques Garrigue, report by Leo White)- PR#6752: Extensible variant types and scope escapingA side-effect of the fix is that (ocamlc -i) sometimes reports(type-sound) invalid signature, with a type used before its declaration.(Jacques Garrigue, report by Maxence Guesdon)- PR#6762: improve warning 45 in presence of re-exported type definitions(Warning 45: open statement shadows the constructor)(Alain Frisch, report by Olivier Andrieu)- PR#6776: Failure to kill the "tick" thread, segfault when exiting theruntime(Damien Doligez, report by Thomas Braibant)- PR#6780: Poor error message for wrong -farch and -ffpu options (ocamlopt,ARM)(Xavier Leroy, report by whitequark)- 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(Jacques Garrigue, report by Markus Mottl)- PR#6888: The list command of ocamldebug uses the wrong file(Damien Doligez, report by Pierre-Marie Pédrot)- PR#6897: Bad error message for some pattern matching on extensible variants(Alain Frisch, report by Gabriel Radanne)- PR#6899: Optional parameters and non generalizable type variables(Thomas Refis and Leo White)- PR#6907: Stack overflow printing error in class declaration(Jacques Garrigue, report by Ivan Gotovchits)- PR#6931: Incorrect error message on type error inside record construction(Damien Doligez, report by Leo White)- 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 Frédéric Bour)- PR#6945 and GPR#227: protect Sys and Unix functions against stringarguments containing the null character '\000'(Simon Cruanes and Xavier Leroy, report by Daniel Bünzli)- PR#6946: Uncaught exception with wrong type for "%ignore"(Jacques Garrigue, report by Leo White)- PR#6954: Infinite loop in type checker with module aliases(Jacques Garrigue, report by Mark Mottl)- PR#6972, GPR#276: 4.02.3 regression on documentation comments in .cmt files(Leo White, report by Olivier Andrieu)- PR#6977: String literals in comments interpret escape sequences(Damien Doligez, report by Daniel Bünzli and David Sheets)- PR#6980: Assert failure from polymorphic variants and existentials(Jacques Garrigue, report by Leo White)- PR#6981: Ctype.Unify(_) with associated functor arg refering to previous one(Jacques Garrigue, report by Nicholas Labich)- PR#6982: unexpected type error when packing a module alias(Jacques Garrigue, report by Valentin Gatien-Baron)- PR#6985: `module type of struct include Bar end exposes%s#row when Bar contains private row types(Jacques Garrigue, report by Nicholas Labich)- PR#6992: Segfault from bug in GADT/module typing(Jacques Garrigue, report by Stephen Dolan)- PR#6993: Segfault from recursive modules violating exhaustivenessassumptions(Jacques Garrigue, report by Stephen Dolan)- 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 may cause segmentation fault on sizes above 2^31(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: fix Stack overflow in GADT typingNote: Equi-recursive types are considered when checking GADT patternexhaustiveness, even when -rectypes is not used.(Jacques Garrigue, report by Mikhail Mandrykin)- 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 moduletype 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#7075: Fix repetitions in ocamldoc generated documentation(Florian Angeletti)- PR#7082: Object type in recursive module's `with` annotation(Jacques Garrigue and Alain Frisch, report by Nicholas Labich)- PR#7096: ocamldoc uses an incorrect subscript/superscript style(Gabriel Scherer, report by user 'pierpa')- PR#7108: ocamldoc, have -html preserve custom/extended html generators(Armaël Guéneau)- PR#7111: reject empty let bindings instead of printing incorrect syntax(Jérémie Dimino)* PR#7113: -safe-string can break GADT compatibility checkbytes and string are now considered compatible even with -safe-string,which may break exhaustivity for code assuming they were disjoint(Jacques Garrigue, report by Jeremy Yallop)- PR#7115: shadowing in a branch of a GADT match breaks unused variablewarning(Alain Frisch, report by Valentin Gatien-Baron)- PR#7133, GPR#450: generate local jump labels on OS X(Bart Jacobs)- PR#7135: only warn about ground coercions in -principal mode(Jacques Garrigue, report by Jeremy Yallop)- PR#7152: Typing equality involving non-generalizable type variable(Jacques Garrigue, report by François Bobot)- PR#7160: Type synonym definitions can weaken gadt constructor types(Jacques Garrigue, report by Mikhail Mandrykin)- PR#7181: Misleading error message with GADTs and polymorphic variants(Jacques Garrigue, report by Pierre Chambart)- PR#7182: Assertion failure with recursive modules and externals(Jacques Garrigue, report by Jeremy Yallop)- PR#7196: "let open" is not correctly pretty-printed to the left of a ';'(Gabriel Scherer, report by Christophe Raffalli)- PR#7214: Assertion failure in Env.add_gadt_instances(Jacques Garrigue, report by Stephen Dolan)- PR#7220: fix a memory leak when using both threads and exception backtraces(Gabriel Scherer, review by François Bobot, report by Rob Hoes)- PR#7222: Escaped existential type(Jacques Garrigue, report by Florian Angeletti)- PR#7230: Scrutinee discarded in match with only refutation cases(Jacques Garrigue, report by Jeremy Yallop)- PR#7234: Compatibility check wrong for abstract type constructors(Jacques Garrigue, report by Stephen Dolan)- 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#22: Fix the cleaning of weak pointers. In very rare casesaccessing a value during the cleaning of the weak pointers couldresult in the value being removed from one weak arrays and kept inanother one. That breaks the property that a value is removed from aweak pointer only when it is dead and garbage collected.(François Bobot, review by Damien Doligez)- 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)- GPR#355: make ocamlnat build again(Jérémie Dimino, Thomas Refis)- GPR#405: fix compilation under Visual Studio 2015(David Allsopp)- GPR#441: better type error location in presence of type constraints(Thomas Refis, report by Arseniy Alekseyev)- GPR#477: reallow docstrings inside object types, and inside polymorphicvariant and arrow types(Thomas Refis)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(Damien Doligez, report by Michael Grünewald)- PR#6167: OCAMLPARAM support for disabling PIC generation ("pic=0")(Gabor Pali)- PR#6367, GPR#25: introduce Asttypes.arg_label to encode labelled arguments(Frédéric Bour and Jacques Garrigue)- 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(Alain Frisch, review by Damien Doligez, request by whitequark)- 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.(Adam Borowski and Xavier Leroy)- PR#6742: remove duplicate virtual_flag information from Tstr_class(Gabriel Radanne and Jacques Garrigue)- PR#6719: improve Buffer.add_channel when not enough input is available(Simon Cruanes)* PR#6816: reject integer and float literals directly followed by anidentifier.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.(Warning 6: Label omitted in function application)(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*(Thomas Braibant and Damien Doligez)- 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#165, GPR#221: fix windows compilation warnings(Bernhard Schommer, Gabriel Scherer, report by Alain Frisch)* 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 theparsetree.This changes PR#6816 a little bit by reading the literal [123a] as a singletoken that can later be rewritten by a ppx preprocessor.(Hugo Heuzard)- GPR#189: Added .dylib and .so as extensions for ocamlmklib(Edgar Aroutiounian, whitequark)- 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#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#308: add experimental support for NetBSD/arm (verified on RaspberryPi)(Rich Neswold)- GPR#335: Type error messages specifies if a type is abstractbecause no corresponding cmi could be found.(Hugo Heuzard)- GPR#365: prevent printing just a single type variable on one sideof a type error clash.(Hugo Heuzard)- GPR#383: configure: define _ALL_SOURCE for build on AIX7.1(tkob)- GPR#401: automatically retry failed test directories in the testsuite(David Allsopp)- GPR#451: an optional 'parallel' target in testsuite/Makefile using theGNU parallel tool to run tests in parallel.(Gabriel Scherer)- GPR#555: ensure that register typing constraints are respected atjoin points in the control flow graph(Mark Shinwell, debugging & test case by Arseniy Alekseyev and Leo White,code review by Xavier Leroy)Build system:=============- GPR#388: FlexDLL added as a Git submodule and bootstrappable with thecompiler(David Allsopp)