[cwn] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt alan.schmitt at polytechnique.org
Tue Jul 17 06:05:47 PDT 2018


Hello

Here is the latest OCaml Weekly News, for the week of July 10 to 17,
2018.

Table of Contents
─────────────────

Format module from the Standard Library
Decompress / Checkseum / Optint
OCaml release 4.07.0
Dune 1.0.0
Release of Stdcompat 5
JS_of_OCaml vs Bucklescript
Sundials/ML 3.1.1
Other OCaml News
Old CWN


――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


Format module from the Standard Library
═══════════════════════════════════════

  Archive:
  [https://discuss.ocaml.org/t/format-module-from-the-standard-library/2254/5]


Continuing this thread, Jesse Haber-Kucharsky said
──────────────────────────────────────────────────

  Check out [this paper], whose purpose is to explain and document the
  module.


[this paper]
https://hal.archives-ouvertes.fr/hal-01503081/file/format-unraveled.pdf


Rizo added
──────────

  I vividly remember how strange it looked the first time I tried using
  it. Other people recommended some resources to understand how to used
  it and how the boxing model works. I strongly recommend using the
  [fmt] library that abstracts a lot of complexity of the `Format'
  module.


[fmt] http://erratique.ch/software/fmt


Vladimir Keleshev also said
───────────────────────────

  Not a tutorial, but you might find it helpful to see some examples of
  Format usage.

  Here's a pretty-printer for a small subset of XML:

  [https://gist.github.com/keleshev/5af7502e6810b8986d9f5332e7e8a795]

  A pretty-printer for a subset of JavaScript:

  [https://github.com/Virum/compiler/blob/28e807b842bab5dcf11460c8193dd5b16674951f/JavaScript.ml#L112]

  A pretty-printer for a subset of Python:

  [https://github.com/Virum/compiler/blob/master/Python.ml#L130]

  Personally, I like the Format module very much and never had to reach
  for another library, but I remember that it was tricky to wrap my head
  around when I just started to use it.




  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


Decompress / Checkseum / Optint
═══════════════════════════════

  Archive:
  [https://discuss.ocaml.org/t/ann-decompress-checkseum-optint/2263/1]


Calascibetta Romain announced
─────────────────────────────

  I'm happy yo announce a new release of [`decompress.0.8'] available
  for installation via OPAM. The distribution provides a new package
  `rfc1951' which implements the [Request for Comments 1951] - a subset
  of `zlib'.

  By this change, we put a prefix on previous modules `Inflate' and
  `Deflate' to recognize which format you use. Semantically, we don't
  have an update of the API. However, `decompress' needs a new package
  now: `checkseum' which depends on `optint'.

  [`checkseum'] is a little library _à la `digestif'_ to provide a
  shared interface which allows to use an implementation of `ADLER-32'
  or `CRC32C'. Implementation could be a C implementation or an OCaml
  implementation, so when the use want to link `decompress' (or
  `checkseum'), he needs to specify which implementation he wants to
  use: `checkseum.c' or `checkseum.ocaml' - at this stage of `dune',
  this dependency needs to be the first of the rest. By the OCaml
  implementation, we keep the possibility to compile `decompress' to
  JavaScript.

  Finally, [`optint'] is a little library which provide an abstract type
  to represent an 32-bits integer. From your architecture (`x64' or
  `x86'), `optint' will use an unboxed integer (fast) or a boxed `int32'
  (slow). So, at least, you have a integer with 32 bits availables (or
  more - 63 on `x64').

  The next release is focus on to implement (finally) GZIP and, may be,
  LZO. The new internal design of `decompress' allows to put on top of
  `rfc1951' the GZIP header. Then, we provided [an inverted stub of
  `decompress'] (to use `decompress' on a C code) to allow a _real_
  benchmark with others implementations.




  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


[`decompress.0.8']
https://github.com/mirage/decompress/releases/tag/v0.8

[Request for Comments 1951] https://www.ietf.org/rfc/rfc1951.txt

[`checkseum'] https://github.com/dinosaure/checkseum

[`optint'] https://github.com/dinosaure/optint

[an inverted stub of `decompress'] https://github.com/dinosaure/dcpr-inv


OCaml release 4.07.0
════════════════════

  Archive:
  [https://sympa.inria.fr/sympa/arc/caml-list/2018-07/msg00015.html]


Damien Doligez announced
────────────────────────

  We have the pleasure of celebrating the birthday of Nikola Tesla and
  Marcel Proust by announcing the release of OCaml version 4.07.0. This
  is a major release with a lot of new features, see the changelog
  below.

  It is available as a bunch of OPAM switches, or as a source download
  here: [http://caml.inria.fr/pub/distrib/ocaml-4.07].

  Happy hacking, – Damien Doligez for the OCaml team.


  OCaml 4.07.0 (10 July 2018)
  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

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


Language features:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#6023, GPR#1648: Allow type-based selection of GADT constructors
    (Thomas Refis and Leo White, review by Jacques Garrigue and Gabriel
    Scherer)

  • GPR#1546: Allow empty variants (Runhang Li, review by Gabriel
    Radanne and Jacques Garrigue)


Standard library:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#4170, GPR#1674: add the constant `Float.pi'.  (Christophe
    Troestler, review by Damien Doligez)

  • MPR#6139, GPR#1685: Move the Bigarray module to the standard
    library. Keep the bigarray library as on overlay adding the
    deprecated map_file functions (Jérémie Dimino, review by Mark
    Shinwell)

  • MPR#7690, GPR#1528: fix the float_of_string function for hexadecimal
    floats with very large values of the exponent.  (Olivier Andrieu)

  • GPR#1002: add a new `Seq' module defining a list-of-thunks style
    iterator.  Also add `{to,of}_seq' to several standard modules.
    (Simon Cruanes, review by Alain Frisch and François Bobot)

  • * GPR#1010: pack all standard library modules into a single module
    Stdlib which is the default opened module (Stdlib itself includes
    Pervasives) to free up the global namespace for other standard
    libraries, while still allowing any OCaml standard library module to
    be referred to as Stdlib.Module). This is implemented efficiently
    using module aliases (prefixing all modules with Stdlib__,
    e.g. Stdlib__string).  (Jérémie Dimino, David Allsopp and Florian
    Angeletti, review by David Allsopp and Gabriel Radanne)

  • GPR#1637: String.escaped is faster and does not allocate when called
    with a string that does not contain any characters needing to be
    escaped.  (Alain Frisch, review by Xavier Leroy and Gabriel Scherer)

  • GPR#1638: add a Float module.  (Nicolás Ojeda Bär, review by Alain
    Frisch and Jeremy Yallop)

  • GPR#1697: Tune [List.init] tailrec threshold so that it does not
    stack overflow when compiled with the Js_of_ocaml backend.  (Hugo
    Heuzard, reviewed by Gabriel Scherer)


Other libraries:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#7745, GPR#1629: Graphics.open_graph displays the correct window
    title on Windows again (fault introduced by 4.06 Unicode changes).
    (David Allsopp)

  • * GPR#1406: Unix.isatty now returns true in the native Windows ports
    when passed a file descriptor connected to a Cygwin PTY. In
    particular, compiler colors for the native Windows ports now work
    under Cygwin/MSYS2.  (Nicolás Ojeda Bär, review by Gabriel Scherer,
    David Allsopp, Xavier Leroy)

  • GPR#1451: [getpwuid], [getgrgid], [getpwnam], [getgrnam] now raise
    Unix error instead of returning [Not_found] when interrupted by a
    signal.  (Arseniy Alekseyev, review by Mark Shinwell and Xavier
    Leroy)

  • GPR#1477: raw_spacetime_lib can now be used in bytecode.  (Nicolás
    Ojeda Bär, review by Mark Shinwell)

  • GPR#1533: (a) The implementation of Thread.yield for system thread
    now uses nanosleep(1) for enabling better preemption.  (b)
    Thread.delay is now an alias for Unix.sleepf.  (Jacques-Henri
    Jourdan, review by Xavier Leroy and David Allsopp)


Compiler user-interface and warnings:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#7663, GPR#1694: print the whole cycle and add a reference to the
    manual in the unsafe recursive module evaluation error message.
    (Florian Angeletti, report by Matej Košík, review by Gabriel
    Scherer)

  • GPR#1166: In OCAMLPARAM, an alternative separator can be specified
    as first character (instead of comma) in the set ":|; ," (Fabrice Le
    Fessant)

  • GPR#1358: Fix usage warnings with no mli file (Leo White, review by
    Alain Frisch)

  • GPR#1428: give a non dummy location for warning 49 (no cmi found)
    (Valentin Gatien-Baron)

  • GPR#1491: Improve error reporting for ill-typed applicative functor
    types, F(M).t.  (Valentin Gatien-Baron, review by Florian Angeletti
    and Gabriel Radanne)

  • GPR#1496: Refactor the code printing explanation for unification
    type errors, in order to avoid duplicating pattern matches (Armaël
    Guéneau, review by Florian Angeletti and Gabriel Scherer)

  • GPR#1505: Add specific error messages for unification errors
    involving functions of type "unit -> _" (Arthur Charguéraud and
    Armaël Guéneau, with help from Leo White, review by Florian
    Angeletti and Gabriel Radanne)

  • GPR#1510: Add specific explanation for unification errors caused by
    type constraints propagated by keywords (such as if, while, for…)
    (Armaël Guéneau and Gabriel Scherer, original design by Arthur
    Charguéraud, review by Frédéric Bour, Gabriel Radanne and Alain
    Frisch)

  • GPR#1515: honor the BUILD_PATH_PREFIX_MAP environment variable to
    enable reproducible builds (Gabriel Scherer, with help from Ximin
    Luo, review by Damien Doligez)

  • GPR#1534: Extend the warning printed when (*) is used, adding a hint
    to suggest using ( * ) instead (Armaël Guéneau, with help and review
    from Florian Angeletti and Gabriel Scherer)

  • GPR#1552, GPR#1577: do not warn about ambiguous variables in guards
    (warning 57) when the ambiguous values have been filtered by a
    previous clause (Gabriel Scherer and Thomas Refis, review by Luc
    Maranget)

  • GPR#1554: warnings 52 and 57: fix reference to manual detailed
    explanation (Florian Angeletti, review by Thomas Refis and Gabriel
    Scherer)

  • GPR#1618: add the -dno-unique-ids and -dunique-ids compiler flags
    (Sébastien Hinderer, review by Leo White and Damien Doligez)

  • GPR#1649 change compilation order of toplevel definitions, so that
    some warnings emitted by the bytecode compiler appear more in-order
    than before.  (Luc Maranget, advice and review by Damien Doligez)

  • GPR#1806: add linscan to OCAMLPARAM options (Raja Boujbel)


Code generation and optimizations:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#7630, GPR#1401: Faster compilation of large modules with
    Flambda.  (Pierre Chambart, report by Emilio Jesús Gallego Arias,
    Pierre-Marie Pédrot and Paul Steckler, review by Gabriel Scherer and
    Leo White)

  • MPR#7630, GPR#1455: Disable CSE for the initialization function
    (Pierre Chambart, report by Emilio Jesús Gallego Arias, review by
    Gabriel Scherer and Xavier Leroy)

  • GPR#1370: Fix code duplication in Cmmgen (Vincent Laviron, with help
    from Pierre Chambart, reviews by Gabriel Scherer and Luc Maranget)

  • GPR#1486: ARM 32-bit port: add support for ARMv8 in 32-bit mode,
    a.k.a. AArch32.  For this platform, avoid ITE conditional
    instruction blocks and use simpler IT blocks instead (Xavier Leroy,
    review by Mark Shinwell)

  • GPR#1487: Treat negated float comparisons more directly (Leo White,
    review by Xavier Leroy)

  • GPR#1573: emitcode: merge events after instructions reordering
    (Thomas Refis and Leo White, with help from David Allsopp, review by
    Frédéric Bour)

  • GPR#1606: Simplify the semantics of Lambda.free_variables and
    Lambda.subst, including some API changes in bytecomp/lambda.mli
    (Pierre Chambart, review by Gabriel Scherer)

  • GPR#1613: ensure that set-of-closures are processed first so that
    other entries in the let-rec symbol do not get dummy approximations
    (Leo White and Xavier Clerc, review by Pierre Chambart)

  • * GPR#1617: Make string/bytes distinguishable in the bytecode.
    (Hugo Heuzard, reviewed by Nicolás Ojeda Bär)

  • GPR#1627: Reduce cmx sizes by sharing variable names (Flambda only)
    (Fuyong Quah, Leo White, review by Xavier Clerc)

  • GPR#1665: reduce the size of cmx files in classic mode by droping
    the bodies of functions that will not be inlined (Fuyong Quah,
    review by Leo White and Pierre Chambart)

  • GPR#1666: reduce the size of cmx files in classic mode by droping
    the bodies of functions that cannot be reached from the module block
    (Fuyong Quah, review by Leo White and Pierre Chambart)

  • GPR#1686: Turn off by default flambda invariants checks.  (Pierre
    Chambart)

  • GPR#1707: Add [Closure_origin.t] to trace inlined functions to
    prevent infinite loops from repeatedly inlining copies of the same
    function.  (Fu Yong Quah)

  • GPR#1740: make sure startup.o is always linked in when using
    "-output-complete-obj". Previously, it was always linked in only on
    some platforms, making this option unusable on platforms where it
    wasn't (Jérémie Dimino, review by Sébastien Hinderer and Xavier
    Leroy)


Runtime system:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#6411, GPR#1535: don't compile everything with -static-libgcc on
    mingw32, only dllbigarray.dll and libbigarray.a. Allows the use of
    C++ libraries which raise exceptions.  (David Allsopp)

  • MPR#7100, GPR#1476: trigger a minor GC when custom blocks accumulate
    in minor heap (Alain Frisch, report by talex, review by Damien
    Doligez, Leo White, Gabriel Scherer)

  • GPR#1431: remove ocamlrun dependencies on curses/terminfo/termcap C
    library (Xavier Leroy, review by Daniel Bünzli)

  • GPR#1478: The Spacetime profiler now works under Windows (but it is
    not yet able to collect profiling information from C stubs).
    (Nicolás Ojeda Bär, review by Xavier Leroy, Mark Shinwell)

  • GPR#1483: fix GC freelist accounting for chunks larger than the
    maximum block size.  (David Allsopp and Damien Doligez)

  • GPR#1526: install the debug and instrumented runtimes
    (lib{caml,asm}run{d,i}.a) (Gabriel Scherer, reminded by Julia
    Lawall)

  • GPR#1563: simplify implementation of LSRINT and ASRINT (Max
    Mouratov, review by Frédéric Bour)

  • GPR#1644: remove caml_alloc_float_array from the bytecode primitives
    list (it's a native code primitive) (David Allsopp)

  • GPR#1701: fix missing root bug in GPR#1476 (Mark Shinwell)

  • GPR#1752: do not alias function arguments to sigprocmask (Anil
    Madhavapeddy)

  • GPR#1753: avoid potential off-by-one overflow in debugger socket
    path length (Anil Madhavapeddy)


Tools:
╌╌╌╌╌╌

  • MPR#7643, GPR#1377: ocamldep, fix an exponential blowup in presence
    of nested structures and signatures (e.g. "include struct …
    include(struct … end) … end") (Florian Angeletti, review by Gabriel
    Scherer, report by Christophe Raffalli)

  • MPR#7687, GPR#1653: deprecate -thread option, which is equivalent to
    -I +threads.  (Nicolás Ojeda Bär, report by Daniel Bünzli)

  • MPR#7710: `ocamldep -sort' should exit with nonzero code in case of
    cyclic dependencies (Xavier Leroy, report by Mantis user
    baileyparker)

  • GPR#1537: boot/ocamldep is no longer included in the source
    distribution; boot/ocamlc -depend can be used in its place.
    (Nicolás Ojeda Bär, review by Xavier Leroy and Damien Doligez)

  • GPR#1585: optimize output of "ocamllex -ml" (Alain Frisch, review by
    Frédéric Bour and Gabriel Scherer)

  • GPR#1667: add command-line options -no-propt, -no-version, -no-time,
    -no-breakpoint and -topdirs-path to ocamldebug (Sébastien Hinderer,
    review by Damien Doligez)

  • GPR#1695: add the -null-crc command-line option to ocamlobjinfo.
    (Sébastien Hinderer, review by David Allsopp and Gabriel Scherer)

  • GPR#1710: ocamldoc, improve the 'man' rendering of subscripts and
    superscripts.  (Gabriel Scherer)

  • GPR#1771: ocamdebug, avoid out of bound access (Thomas Refis)


Manual and documentation:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#7613: minor reword of the "refutation cases" paragraph (Florian
    Angeletti, review by Jacques Garrigue)

  • PR#7647, GPR#1384: emphasize ocaml.org website and forum in README
    (Yawar Amin, review by Gabriel Scherer)

  • PR#7698, GPR#1545: improve wording in OCaml manual in several
    places, mostly in Chapter 1.  This addresses the easier changes
    suggested in the PR.  (Jim Fehrle, review by Florian Angeletti and
    David Allsopp)

  • GPR#1540: manual, decouple verbatim and toplevel style in code
    examples (Florian Angeletti, review by Gabriel Scherer)

  • GPR#1556: manual, add a consistency test for manual references
    inside the compiler source code.  (Florian Angeletti, review by
    Gabriel Scherer)

  • GPR#1647: manual, subsection on record and variant disambiguation
    (Florian Angeletti, review by Alain Frisch and Gabriel Scherer)

  • GPR#1702: manual, add a signature mode for code examples (Florian
    Angeletti, review by Gabriel Scherer)

  • GPR#1741: manual, improve typesetting and legibility in HTML output
    (steinuil, review by Gabriel Scherer)

  • GPR#1757: style the html manual, changing type and layout (Charles
    Chamberlain, review by Florian Angeletti, Xavier Leroy, Gabriel
    Radanne, Perry E. Metzger, and Gabriel Scherer)

  • GPR#1765: manual, ellipsis in code examples (Florian Angeletti,
    review and suggestion by Gabriel Scherer)

  • GPR#1767: change html manual to use relative font sizes (Charles
    Chamberlain, review by Daniel Bünzli, Perry E. Metzger, Josh
    Berdine, and Gabriel Scherer)

  • GPR#1779: integrate the Bigarray documentation into the main manual.
    (Perry E. Metzger, review by Florian Angeletti and Xavier Clerc)


Type system:
╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#7611, GPR#1491: reject the use of generative functors as
    applicative (Valentin Gatien-Baron)

  • MPR#7706, GPR#1565: in recursive value declarations, track static
    size of locally-defined variables (Gabriel Scherer, review by Jeremy
    Yallop and Leo White, report by Leo White)

  • MPR#7717, GPR#1593: in recursive value declarations, don't treat
    unboxed constructor size as statically known (Jeremy Yallop, report
    by Pierre Chambart, review by Gabriel Scherer)

  • MPR#7767, GPR#1712: restore legacy treatment of partially-applied
    labeled functions in 'let rec' bindings.  (Jeremy Yallop, report by
    Ivan Gotovchits, review by Gabriel Scherer)

  • * MPR#7787, GPR#1652, GPR#1743: Don't remove module aliases in
    `module type of' and `with module'.  The old behaviour can be
    obtained using the `[@remove_aliases]' attribute.  (Leo White and
    Thomas Refis, review by Jacques Garrigue)

  • GPR#1468: Do not enrich type_decls with incoherent manifests (Thomas
    Refis and Leo White, review by Jacques Garrigue)

  • GPR#1469: Use the information from [@@immediate] annotations when
    computing whether a type can be [@@unboxed] (Damien Doligez, report
    by Stephan Muenzel, review by Alain Frisch)

  • GPR#1513: Allow compilation units to shadow sub-modules of
    Pervasives.  For instance users can now use a largeFile.ml file in
    their project.  (Jérémie Dimino, review by Nicolas Ojeda Bar, Alain
    Frisch and Gabriel Radanne)

  • GPR#1516: Allow float array construction in recursive bindings when
    configured with -no-flat-float-array (Jeremy Yallop, report by
    Gabriel Scherer)

  • GPR#1583: propagate refined ty_arg to Parmatch checks (Thomas Refis,
    review by Jacques Garrigue)

  • GPR#1609: Changes to ambivalence scope tracking (Thomas Refis and
    Leo White, review by Jacques Garrigue)

  • GPR#1628: Treat reraise and raise_notrace as nonexpansive.  (Leo
    White, review by Alain Frisch)

  • * GPR#1778: Fix Soundness bug with non-generalized type variable and
    local modules.  This is the same bug as MPR#7414, but using local
    modules instead of non-local ones.  (Leo White, review by Jacques
    Garrigue)


Compiler distribution build system
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#5219, GPR#1680, GPR#1877: use 'install' instead of 'cp' in
    install scripts.  (Gabriel Scherer, review by Sébastien Hinderer and
    Valentin Gatien-Baron)

  • MPR#7679: make sure .a files are erased before calling ar rc,
    otherwise leftover .a files from an earlier compilation may contain
    unwanted modules (Xavier Leroy)

  • GPR#1571: do not perform architecture tests on 32-bit platforms,
    allowing 64-bit back-ends to use 64-bit specific constructs (Xavier
    Clerc, review by Damien Doligez)


Internal/compiler-libs changes:
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  • MPR#7738, GPR#1624: Asmlink.reset also resets lib_ccobjs/ccopts
    (Cedric Cellier, review by Gabriel Scherer)

  • GPR#1488, GPR#1560: Refreshing parmatch (Gabriel Scherer and Thomas
    Refis, review by Luc Maranget)

  • GPR#1502: more command line options for expect tests (Florian
    Angeletti, review by Gabriel Scherer)

  • GPR#1511: show code at error location in expect-style tests, using
    new Location.show_code_at_location function (Gabriel Scherer and
    Armaël Guéneau, review by Valentin Gatien-Baron and Damien Doligez)

  • GPR#1519, GPR#1532, GRP#1570: migrate tests to ocamltest (Sébastien
    Hinderer, review by Gabriel Scherer, Valentin Gatien-Baron and
    Nicolás Ojeda Bär)

  • GPR#1520: more robust implementation of Misc.no_overflow_mul (Max
    Mouratov, review by Xavier Leroy)

  • GPR#1557: Organise and simplify translation of primitives (Leo
    White, review by François Bobot and Nicolás Ojeda Bär)

  • GPR#1567: register all idents relevant for reraise (Thomas Refis,
    review by Alain Frisch and Frédéric Bour)

  • GPR#1586: testsuite: 'make promote' for ocamltest tests (The new
    "-promote" option for ocamltest is experimental and subject to
    change/removal).  (Gabriel Scherer)

  • GPR#1619: expect_test: print all the exceptions, even the unexpected
    ones (Thomas Refis, review by Jérémie Dimino)

  • GPR#1621: expect_test: make sure to not use the installed stdlib
    (Jérémie Dimino, review by Thomas Refis)

  • GPR#1646 : add ocamldoc test to ocamltest and migrate ocamldoc tests
    to ocamltest (Florian Angeletti, review by Sébastien Hinderer)

  • GPR#1663: refactor flambda specialise/inlining handling (Leo White
    and Xavier Clerc, review by Pierre Chambart)

  • GPR#1679 : remove Pbittest from primitives in lambda (Hugo Heuzard,
    review by Mark Shinwell)

  • * GPR#1704: Make Ident.t abstract and immutable.  (Gabriel Radanne,
    review by Mark Shinwell)


Bug fixes
╌╌╌╌╌╌╌╌╌

  • MPR#4499, GPR#1479: Use native Windows API to implement Sys.getenv,
    Unix.getenv and Unix.environment under Windows.  (Nicolás Ojeda Bär,
    report by Alain Frisch, review by David Allsopp, Xavier Leroy)

  • MPR#5250, GPR#1435: on Cygwin, when ocamlrun searches the path for a
    bytecode executable file, skip directories and other non-regular
    files, like other Unix variants do.  (Xavier Leroy)

  • MPR#6394, GPR#1425: fix fatal_error from Parmatch.get_type_path
    (Virgile Prevosto, review by David Allsopp, Thomas Refis and Jacques
    Garrigue)

  • * MPR#6604, GPR#931: Only allow directives with filename and at the
    beginning of the line (Tadeu Zagallo, report by Roberto Di Cosmo,
    review by Hongbo Zhang, David Allsopp, Gabriel Scherer, Xavier
    Leroy)

  • MPR#7138, MPR#7701, GPR#1693: Keep documentation comments even in
    empty structures and signatures (Leo White, Florian Angeletti,
    report by Anton Bachin)

  • MPR#7178, MPR#7253, MPR#7796, GPR#1790: Make sure a function
    registered with "at_exit" is executed only once when the program
    exits (Nicolás Ojeda Bär and Xavier Leroy, review by Max Mouratov)

  • MPR#7391, GPR#1620: Do not put a dummy method in object types
    (Thomas Refis, review by Jacques Garrigue)

  • PR#7660, GPR#1445: Use native Windows API to implement Unix.utimes
    in order to avoid unintended shifts of the argument timestamp
    depending on DST setting.  (Nicolás Ojeda Bär, review by David
    Allsopp, Xavier Leroy)

  • MPR#7668: -principal is broken with polymorphic variants (Jacques
    Garrigue, report by Jun Furuse)

  • MPR#7680, GPR#1497: Incorrect interaction between Matching.for_let
    and Simplif.simplify_exits (Alain Frisch, report and review by
    Vincent Laviron)

  • MPR#7682, GPR#1495: fix [@@unboxed] for records with 1 polymorphic
    field (Alain Frisch, report by Stéphane Graham-Lengrand, review by
    Gabriel Scherer)

  • MPR#7695, GPR#1541: Fatal error: exception Ctype.Unify(_) with field
    override (Jacques Garrigue, report by Nicolás Ojeda Bär)

  • MPR#7704, GPR#1564: use proper variant tag in non-exhaustiveness
    warning (Jacques Garrigue, report by Thomas Refis)

  • MPR#7711, GPR#1581: Internal typechecker error triggered by a
     constraint on self type in a class type (Jacques Garrigue, report
     and review by Florian Angeletti)

  • MPR#7712, GPR#1576: assertion failure with type abbreviations
    (Thomas Refis, report by Michael O'Connor, review by Jacques
    Garrigue)

  • MPR#7747: Type checker can loop infinitly and consumes all computer
    memory (Jacques Garrigue, report by kantian)

  • MPR#7751, GPR#1657: The toplevel prints some concrete types as
    abstract (Jacques Garrigue, report by Matej Kosik)

  • MPR#7765, GPR#1718: When unmarshaling bigarrays, protect against
    integer overflows in size computations (Xavier Leroy, report by
    Maximilian Tschirschnitz, review by Gabriel Scherer)

  • MPR#7760, GPR#1713: Exact selection of lexing engine, that is
    correct "Segfault in ocamllex-generated code using 'shortest'" (Luc
    Maranget, Frédéric Bour, report by Stephen Dolan, review by Gabriel
    Scherer)

  • MPR#7769, GPR#1714: calls to Stream.junk could, under some
    conditions, be ignored when used on streams based on input channels.
    (Nicolás Ojeda Bär, report by Michael Perin, review by Gabriel
    Scherer)

  • MPR#7793, GPR#1766: the toplevel #use directive now accepts
    sequences of ';;' tokens. This fixes a bug in which certain files
    accepted by the compiler were rejected by ocamldep.  (Nicolás Ojeda
    Bär, report by Hugo Heuzard, review by Hugo Heuzard)

  • GPR#1517: More robust handling of type variables in mcomp (Leo White
    and Thomas Refis, review by Jacques Garrigue)

  • GPR#1530, GPR#1574: testsuite, fix 'make parallel' and 'make one
    DIR=…'  to work on ocamltest-based tests.  (Runhang Li and Sébastien
    Hinderer, review by Gabriel Scherer)

  • GPR#1550, GPR#1555: Make pattern matching warnings more robust to
    ill-typed columns (Thomas Refis, with help from Gabriel Scherer and
    Luc Maranget)

  • GPR#1614: consider all bound variables when inlining, fixing a
    compiler fatal error.  (Xavier Clerc, review by Pierre Chambart, Leo
    White)

  • GPR#1622: fix bug in the expansion of command-line arguments under
    Windows which could result in some elements of Sys.argv being
    truncated in some cases.  (Nicolás Ojeda Bär, review by Sébastien
    Hinderer)

  • GPR#1623: Segfault on Windows 64 bits when expanding wildcards in
    arguments.  (Marc Lasson, review by David Allsopp, Alain Frisch,
    Sébastien Hinderer, Xavier Leroy, Nicolas Ojeda Bar)

  • GPR#1661: more precise principality warning regarding record fields
    disambiguation (Thomas Refis, review by Leo White)

  • GPR#1687: fix bug in the printing of short functor types "(S1 -> S2)
    -> S3" (Pieter Goetschalckx, review by Gabriel Scherer)

  • GPR#1722: Scrape types in Typeopt.maybe_pointer (Leo White, review
    by Thomas Refis)

  • GPR#1755: ensure that a bigarray is never collected while reading
    complex values (Xavier Clerc, Mark Shinwell and Leo White, report by
    Chris Hardin, reviews by Stephen Dolan and Xavier Leroy)

  • GPR#1764: in byterun/memory.c, struct pool_block, use C99 flexible
    arrays if available (Xavier Leroy, review by Max Mouratov)

  • GPR#1774: ocamlopt for ARM could generate VFP loads and stores with
    bad offsets, rejected by the assembler.  (Xavier Leroy, review by
    Mark Shinwell)

  • GPR#1808: handle `[@inlined]' attributes under a module constraint
    (Xavier Clerc, review by Leo White)

  • GPR#1810: use bit-pattern comparison when meeting float
    approximations (Xavier Clerc, report by Christophe Troestler, review
    by Nicolás Ojeda Bär and Gabriel Scherer)

  • GPR#1835: Fix off-by-one errors in Weak.get_copy and Weak.blit (KC
    Sivaramakrishnan)

  • GPR#1849: bug in runtime function generic_final_minor_update() that
    could lead to crashes when Gc.finalise_last is used (report and fix
    by Yuriy Vostrikov, review by François Bobot)




  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


Dune 1.0.0
══════════

  Archive: [https://discuss.ocaml.org/t/ann-dune-1-0-0/2267/1]


Jérémie Dimino announced
────────────────────────

  It is my pleasure to announce the 1.0.0 release of Dune!

  Dune is a built system for OCaml and Reason projects. It aims at
  building things fast and providing a smooth user experience.

  Dune 1.0.0 is now available on [github] and in opam.

  This is a big milestone for the project as it is the first release
  using the new Dune name that the community helped to choose. Dune
  started about a year and a half ago as the more narrow scoped Jbuilder
  and as since then proven itself to be the right tool for the job.

  A big part of the work for this release was preparing the project for
  long-term support. Dune is the kind of project that will pretty much
  continue to evolve forever: it needs to keep up with the OCaml
  compiler evolving, development workflows changing, new kinds of tools
  with specific needs, etc… While doing so, it also needs to offer
  stability so that projects released now will continue to build with
  future versions of Dune.

  Meeting these two constraints is a challenge. However, we had to do
  this for the renaming: we changed many things in Dune using what we
  learned from the Jbuilder experience. Still, Dune is able to
  understand and build Jbuilder projects. The mechanism used to support
  both Jbuilder and Dune projects is fully generic and will be the basis
  for future evolution.

  You can find the full list of changes and bug fixes since Jbuilder
  1.0+beta20 on [the github release page].  Following is an overview of
  some the new features:

  • General cleanup of the syntax: less parentheses, better behaved
    variables

  • Introduction of a `dune.configurator' library to help projects with
    C stubs detect and query the environment

  • General improvement of the default behavior: more parallelism by
    default, development mode by default

  • Better support for changing the defaults: it is now possible to set
    the default flags or change what `dune build' does by default

  • Support for setting the build directory

  • Better support for expectation tests on Windows




  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


[github] https://github.com/ocaml/dune/releases/tag/1.0.0

[the github release page]
https://github.com/ocaml/dune/releases/tag/1.0.0


Release of Stdcompat 5
══════════════════════

  Archive: [https://discuss.ocaml.org/t/release-of-stdcompat-5/2284/1]


Thierry Martinez announced
──────────────────────────

  It is my pleasure to announce a new release (#5) of Stdcompat!

  Stdcompat is a compatibility module for OCaml standard library,
  available from OCaml 3.07 to OCaml 4.07.0 (that is to say, the whole
  spectrum of OCaml compilers available in OPAM).

  `Stdcompat.*' redefines (most of the) symbols available in OCaml
  4.07.0 standard library, such as `List.find_opt', `floatarray',
  `Uchar.t', `Seq.t', `result', etc.

  Stdcompat has no dependency! Former versions used to rely on cppo but
  the preprocessing is now done by a `./configure' script (generated
  with autoconf).

  OPAM packages `result', `seq', `uchar' are optional dependencies: if
  they are installed, types declared by stdcompat are compatible with
  the types these packages declare.

  Stdcompat can be opened in the beginning of a module: its signature
  follows the signature of the standard library, including the new
  Stdlib module.

  Github repository: [https://github.com/thierry-martinez/stdcompat]
  Available in OPAM: `opam install stdcompat'

  Happy hacking!




  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


[https://github.com/thierry-martinez/stdcompat]
https://github.com/thierry-martinez/stdcompat


JS_of_OCaml vs Bucklescript
═══════════════════════════

  Archive:
  [https://discuss.ocaml.org/t/js-of-ocaml-vs-bucklescript/2293/1]


Volodymyr Melnyk asked
──────────────────────

  Currently we have 2 options to write frontend-related code in OCaml:
  js_of_ocaml and bucklescript. I have no experience with this two
  libraries and I want to pick one. Has anybody tried both of them or
  made some analysis with comparison?  Could you please share your
  thoughts and experience about both libraries if so.  I'm interested
  in: performance of generation, source-mapping, performance, quality,
  safety and readability of generated JS, simplicity of use, pros and
  cons of both solutions, etc. Thank you very much for your
  responses. OCaml community is the best!


Yaron Minsky replied
────────────────────

  We've made extensive use of js_of_ocaml for internal apps at Jane
  Street. I can't give a detailed comparison with Bucklescript, but I
  can tell you what I know of the tradeoffs.

  • First, js_of_ocaml runs pretty fast, but I've heard tell that
    Bucklescript is faster. js_of_ocaml now supports separate
    compilation of Javascript, so subsequent recompilations are quite
    zippy, in my experience. That said, the initial compilation takes
    material time. Dune does separate compilation for js_of_ocaml by
    default, and does a single, more compact javascript executable when
    run in production mode. Anyway, we haven't found performance of the
    compiler to be an obstacle with js_of_ocaml.

  • js_of_ocaml is highly compatible with OCaml's semantics. Advanced
    libraries like Async and Incremental that make fairly aggressive use
    of OCaml's memory model work under js_of_ocaml without modification,
    which is great. I believe you have to be a bit more careful when
    compiling with Bucklescript. (See [incr_dom] for an interesting
    application of Incremental to the browser.)

  • js_of_ocaml is highly compatible in a another way: it is essentially
    always fully up to date with the latest OCaml. That's because it's
    easier to maintain, by virtue of operating only on OCaml
    bytecode. Bucklescript is a more fullsome set of patches to the
    compiler, and so it typically lags a few versions behind. That alone
    is for us a sufficiently compelling reason to stick to js_of_ocaml.

  • Bucklescript seems to have a more active web-dev community,
    associated with the Reason community. I think this is mostly because
    Bucklescript generates easy to read javascript output. I don't care
    much about readable JavaScript output (especially in a world with
    sourcemaps), but the community surely has value. For example, the
    OCaml React bindings are currently Bucklescript-only (though
    @jordwalke has suggested that porting to js_of_ocaml would be
    totally doable.)

  Anyway, good luck in picking! I think people have had good experiences
  with both, so you can't go too far wrong.


[incr_dom] https://github.com/janestreet/incr_dom


Yaron Minsky later added
────────────────────────

  Oh, and for people who are concerned about bindings, this project from
  LexiFi looks pretty cool. I think we haven't started using it yet, but
  some folk internally are currently kicking the tires. It looks pretty
  cool to me.

  [https://github.com/LexiFi/gen_js_api]




  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


Sundials/ML 3.1.1
═════════════════

  Archive:
  [https://sympa.inria.fr/sympa/arc/caml-list/2018-07/msg00027.html]


Timothy Bourke announced
────────────────────────

  We are pleased to announce a new release of Sundials/ML, an OCaml
  interface to the Sundials suite of numerical solvers (CVODE, CVODES,
  IDA, IDAS, ARKODE, KINSOL).

  This release adds support for Sundials 3.1.x, and most notably for the
  new generic matrix and linear solver interfaces. The OCaml interface
  changes but the library is backward compatible with the older versions
  of Sundials (2.5.0 onwards) that are still current in some packaging
  systems.

  OCaml 4.02.3 or greater is now required and optionally OCamlMPI 1.03.

  Information and documentation:
  [http://inria-parkas.github.io/sundialsml/]
  Source code (BSD): [https://github.com/inria-parkas/sundialsml]

  opam install sundialsml # (requires Sundials 2.5.0 or above)

  There is a draft paper that describes our implementation. It is still
  undergoing peer review, but we would be happy to share it by private
  mail.

  We gratefully acknowledge the original authors of Sundials, and the
  support of the ITEA 3 project 11004 MODRIO (Model driven physical
  systems operation), Inria, and the Departement d'Informatique de
  l'ENS.




  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


Other OCaml News
════════════════

From the ocamlcore planet blog
──────────────────────────────

  Here are links from many OCaml blogs aggregated at [OCaml Planet].

  • [OCaml 4.07.0 released]




  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


[OCaml Planet] http://ocaml.org/community/planet/

[OCaml 4.07.0 released] http://caml.inria.fr/pub/distrib/ocaml-4.07/


Old CWN
═══════

  If you happen to miss a CWN, you can [send me a message] and I'll mail
  it to you, or go take a look at [the archive] or the [RSS feed of the
  archives].

  If you also wish to receive it every week by mail, you may subscribe
  [online].
  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
  [Alan Schmitt]


[send me a message] mailto:alan.schmitt at polytechnique.org

[the archive] http://alan.petitepomme.net/cwn/

[RSS feed of the archives] http://alan.petitepomme.net/cwn/cwn.rss

[online] http://lists.idyll.org/listinfo/caml-news-weekly/

[Alan Schmitt] http://alan.petitepomme.net/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20180717/1d2f66e9/attachment-0001.html>
-------------- next part --------------
-- 
OpenPGP Key ID : 040D0A3B4ED2E5C7
Monthly Athmospheric CO₂, Mauna Loa Obs. 2018-06: 410.79, 2017-06: 408.84
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 528 bytes
Desc: not available
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20180717/1d2f66e9/attachment-0001.pgp>


More information about the caml-news-weekly mailing list