caml-list - the Caml user's mailing list
 help / Atom feed
From: Florian Angeletti <>
Subject: [Caml-list] OCaml release 4.09.0
Date: Thu, 19 Sep 2019 10:49:19 +0200
Message-ID: <> (raw)

Dear OCaml users,

We have the pleasure of celebrating the birth of James Waddell Alexander II
by announcing the release of OCaml version 4.09.0 .

Some of the highlights of this new 4.09 release are:

- New optimisations, in particular for affine functions in matches, for 

     type t = A | B | C
     let affine = function
       | A -> 4
       | B -> 3
       | C -> 2

- The `graphics` library was moved out of the compiler distribution.
- The `vmthread` library was removed.
- Support for compiler plugins was removed.
- Many bug fixes.

The full list of change can be found in the changelog below.

It is  available as a set of OPAM switches, and as a source download here:

Happy hacking,

— Florian "octachron" Angeletti, for the OCaml team.

OCaml 4.09.0 (18 Sep 2019)

(Changes that can break existing programs are marked with a "*")

### Runtime system:

* #1725, #2279: Deprecate Obj.set_tag and Obj.truncate
   (Stephen Dolan, review by Gabriel Scherer, Damien Doligez and Xavier 

* #2240: Constify "identifier" in struct custom_operations
   (Cedric Cellier, review by Xavier Leroy)

* #2293: Constify "caml_named_value"
   (Stephen Dolan, review by Xavier Leroy)

- #8787, #8788: avoid integer overflow in caml_output_value_to_bytes
   (Jeremy Yallop, report by Marcello Seri)

- #2075, #7729: rename _T macro used to support Unicode in the (Windows) 
   in order to avoid compiler warning
   (Nicolás Ojeda Bär, review by Gabriel Scherer and David Allsopp)

- #2250: Remove extra integer sign-extension in compare functions
   (Stefan Muenzel, review by Xavier Leroy)

- #8607: Remove obsolete macros for pre-2002 MSVC support
   (Stephen Dolan, review by Nicolás Ojeda Bär and David Allsopp)

- #8656: Fix a bug in [caml_modify_generational_global_root]
   (Jacques-Henri Jourdan, review by Gabriel Scherer)

### Standard library:

- #2262: take precision (.<n>) and flags ('+' and ' ') into account
   in printf %F
   (Pierre Roux, review by Gabriel Scherer)

- #6148, #8596: optimize some buffer operations
   (Damien Doligez, reports by John Whitington and Alain Frisch,
    review by Jeremy Yallop and Gabriel Scherer)

### Other libraries:

* #2318: Delete the graphics library. This library is now available
   as a separate "graphics" package in opam. Its new home is:
   (Jérémie Dimino, review by Nicolas Ojeda Bar, Xavier Leroy and
    Sébastien Hinderer)

* #2289: Delete the vmthreads library. This library was deprecated in 
   (Jérémie Dimino)

- #2112: Fix Thread.yield unfairness with busy threads yielding to each
   (Andrew Hunter, review by Jacques-Henri Jourdan, Spiros Eliopoulos, 
   Weeks, & Mark Shinwell)

- #7903, #2306: Make Thread.delay interruptible by signals again
   (Xavier Leroy, review by Jacques-Henri Jourdan and Edwin Török)

- #2248: Unix alloc_sockaddr: Fix read of uninitialized memory for an
   unbound Unix socket. Add support for receiving abstract (Linux) 
socket paths.
   (Tim Cuthbertson, review by Sébastien Hinderer and Jérémie Dimino)

### Compiler user-interface and warnings:

* #2276: Remove support for compiler plugins and hooks (also adds
   (Mark Shinwell, Xavier Clerc, review by Nicolás Ojeda Bär,
   Florian Angeletti, David Allsopp and Xavier Leroy)

- #2301: Hint on type error on int literal
   (Jules Aguillon, review by Nicolás Ojeda Bär , Florian Angeletti,
   Gabriel Scherer and Armaël Guéneau)

* #2314: Remove support for gprof profiling.
   (Mark Shinwell, review by Xavier Clerc and Stephen Dolan)

- #2190: fix pretty printing (using Pprintast) of "lazy ..." patterns and
   "fun (type t) -> ..." expressions.
   (Nicolás Ojeda Bär, review by Gabriel Scherer)

- #2277: Use newtype names as type variable names
   The inferred type of (fun (type t) (x : t) -> x)
   is now printed as ('t -> 't) rather than ('a -> 'a).
   (Matthew Ryan)

- #2309: New options -with-runtime and -without-runtime in ocamlopt/ocamlc
   that control the inclusion of the runtime system in the generated 
   (Lucas Pluvinage, review by Daniel Bünzli, Damien Doligez, David Allsopp
    and Florian Angeletti)

- #3819, #8546 more explanations and tests for illegal permutation
   (Florian Angeletti, review by Gabriel Scherer)

- #8537: fix the -runtime-variant option for bytecode
   (Damien Doligez, review by David Allsopp)

- #8541: Correctly print multi-lines locations
   (Louis Roché, review by Gabriel Scherer)

- #8579: Better error message for private constructors
   of an extensible variant type
   (Guillaume Bury, review by many fine eyes)

### Code generation and optimizations:

- #2278: Remove native code generation support for 32-bit Intel macOS,
   iOS and other Darwin targets.
   (Mark Shinwell, review by Nicolas Ojeda Bar and Xavier Leroy)

- #8547: Optimize matches that are an affine function of the input.
   (Stefan Muenzel, review by Alain Frisch, Gabriel Scherer)

- #1904, #7931: Add FreeBSD/aarch64 support
   (Greg V, review by Sébastien Hinderer, Stephen Dolan, Damien Doligez
    and Xavier Leroy)

- #8507: Shorten symbol names of anonymous functions in Flambda mode
   (the directory portions are now hidden)
   (Mark Shinwell, review by Nicolás Ojeda Bär)

- #8681, #8699, #8712: Fix code generation with nested let rec of functions.
   (Stephen Dolan, Leo White, Gabriel Scherer and Pierre Chambart,
    review by Gabriel Scherer, reports by Alexey Solovyev and Jonathan 

### Manual and documentation:

- #7584, #8538: Document .cmt* files in the "overview" of ocaml{c,opt}
   (Oxana Kostikova, rewiew by Florian Angeletti)

- #8757: Rename Pervasives to Stdlib in core library documentation.
   (Ian Zimmerman, review by David Allsopp)

- #8515: manual, precise constraints on reexported types
   (Florian Angeletti, review by Gabriel Scherer)

### Tools:

- #2221: ocamldep will now correctly allow a .ml file in an include 
   that appears first in the search order to shadow a .mli appearing in 
a later
   include directory.
   (Nicolás Ojeda Bär, review by Florian Angeletti)

### Internal/compiler-libs changes:

- #1579: Add a separate types for clambda primitives
   (Pierre Chambart, review by Vincent Laviron and Mark Shinwell)

- #1965: remove loop constructors in Cmm and Mach
   (Vincent Laviron)

- #1973: fix compilation of catches with multiple handlers
   (Vincent Laviron)

- #2228, #8545: refactoring the handling of .cmi files
   by moving the logic from Env to a new module Persistent_env
   (Gabriel Scherer, review by Jérémie Dimino and Thomas Refis)

- #2229: Env: remove prefix_idents cache
   (Thomas Refis, review by Frédéric Bour and Gabriel Scherer)

- #2237, #8582: Reorder linearisation of Trywith to avoid a call instruction
   (Vincent Laviron and Greta Yorsh, additional review by Mark Shinwell;
   fix in #8582 by Mark Shinwell, Xavier Leroy and Anil Madhavapeddy)

- #2265: Add bytecomp/opcodes.mli
   (Mark Shinwell, review by Nicolas Ojeda Bar)

- #2268: Improve packing mechanism used for building compilerlibs modules
   into the Dynlink libraries
   (Mark Shinwell, Stephen Dolan, review by David Allsopp)

- #2280: Don't make more Clambda constants after starting Cmmgen
   (Mark Shinwell, review by Vincent Laviron)

- #2281: Move some middle-end files around
   (Mark Shinwell, review by Pierre Chambart and Vincent Laviron)

- #2283: Add [is_prefix] and [find_and_chop_longest_common_prefix] to
   (Mark Shinwell, review by Alain Frisch and Stephen Dolan)

- #2284: Add various utility functions to [Misc] and remove functions
   from [Misc.Stdlib.Option] that are now in [Stdlib.Option]
   (Mark Shinwell, review by Thomas Refis)

- #2286: Functorise [Consistbl]
   (Mark Shinwell, review by Gabriel Radanne)

- #2291: Add [Compute_ranges] pass
   (Mark Shinwell, review by Vincent Laviron)

- #2292: Add [Proc.frame_required] and [Proc.prologue_required].
   Move tail recursion label creation to [Linearize].  Correctly position
   [Lprologue] relative to [Iname_for_debugger] operations.
   (Mark Shinwell, review by Vincent Laviron)

- #2308: More debugging information on [Cmm] terms
   (Mark Shinwell, review by Stephen Dolan)

- #7878, #8542: Replaced TypedtreeIter with tast_iterator
   (Isaac "Izzy" Avram, review by Gabriel Scherer and Nicolás Ojeda Bär)

- #8598: Replace "not is_nonexpansive" by "maybe_expansive".
   (Thomas Refis, review by David Allsopp, Florian Angeletti, Gabriel 
    Gabriel Scherer and Xavier Leroy)

### Compiler distribution build system:

- #2267: merge generation of header programs, also fixing parallel build on
   (David Allsopp, review by Sébastien Hinderer)

- #8514: Use boot/ocamlc.opt for building, if available.
   (Stephen Dolan, review by Gabriel Scherer)

### Bug fixes:

- #8864, #8865: Fix native compilation of left shift by (word_size - 1)
   (Vincent Laviron, report by Murilo Giacometti Rocha, review by Xavier 

- #2296: Fix parsing of hexadecimal floats with underscores in the exponent.
   (Hugo Heuzard and Xavier Leroy, review by Gabriel Scherer)

- #8800: Fix soundness bug in extension constructor inclusion
   (Leo White, review by Jacques Garrigue)

- #8848: Fix x86 stack probe CFI information in caml_c_call and
   (Tom Kelly, review by Xavier Leroy)

- #7156, #8594: make top level use custom printers if they are available
   (Andrew Litteken, report by Martin Jambon, review by Nicolás Ojeda Bär,
    Thomas Refis, Armaël Guéneau, Gabriel Scherer, David Allsopp)

- #3249: ocamlmklib should reject .cmxa files
   (Xavier Leroy)

- #7937, #2287: fix uncaught Unify exception when looking for type
   (Florian Angeletti, review by Jacques Garrigue)

- #8610, #8613: toplevel printing, consistent deduplicated name for types
   (Florian Angeletti, review by Thomas Refis and Gabriel Scherer,
    reported by Xavier Clerc)

- #8635, #8636: Fix a bad side-effect of the -allow-approx option of
   ocamldep. It used to turn some errors into successes
   (Jérémie Dimino)

- #8701, #8725: Variance of constrained parameters causes principality 
   (Jacques Garrigue, report by Leo White, review by Gabriel Scherer)

- #8777(partial): fix position information in some polymorphic variant
   error messages about missing tags
   (Florian Angeletti, review by Thomas Refis)

- #8779, more cautious variance computation to avoid missing cmis
   (Florian Angeletti, report by Antonio Nuno Monteiro, review by Leo White)

- #8810: Env.lookup_module: don't allow creating loops
   (Thomas Refis, report by Leo White, review by Jacques Garrigue)

- #8862, #8871: subst: preserve scopes
   (Thomas Refis, report by Leo White, review by Jacques Garrigue)

- #8921, #8924: Fix stack overflow with Flambda
   (Vincent Laviron, review by Pierre Chambart and Leo White,
    report by Aleksandr Kuzmenko)

- #8944: Fix "open struct .. end" on clambda backend
   (Thomas Refis, review by Leo White, report by Damon Wang and Mark 

                 reply index

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

caml-list - the Caml user's mailing list

Archives are clonable: git clone --mirror

AGPL code for this site: git clone public-inbox