|
|
Log in / Subscribe / Register

OCaml Weekly News September 5

From:  Alan Schmitt <alan.schmitt-AT-polytechnique.org>
To:  "lwn" <lwn-AT-lwn.net>, "cwn" <cwn-AT-lists.idyll.org>, caml-list-AT-inria.fr
Subject:  Attn: Development Editor, Latest OCaml Weekly News
Date:  Tue, 05 Sep 2023 11:00:22 +0200
Message-ID:  <m2tts99eqh.fsf@mac-03220211.irisa.fr>

Hello

Here is the latest OCaml Weekly News, for the week of August 29 to
September 05, 2023.

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

iostream 0.1
Second release candidate for OCaml 5.1.0
ocamlgraph 2.1.0
Liquid ML - A templating language used by Shopify, Github Pages and more!
moonpool 0.4
Oxidizing OCaml, and a new opam switch
Outreachy December 2023
New release of PPrint (2023830)
Old CWN


iostream 0.1
════════════

  Archive: <https://discuss.ocaml.org/t/ann-iostream-0-1/12922/1>


Simon Cruanes announced
───────────────────────

  I’ve just released iostream 0.1. iostream is a [library] that provides
  composable abstractions for input/output streams of bytes. Here
  composability means that users can create their own streams, which
  makes a `Iostream.Out.t' more powerful than the standard `out_channel'
  because it is an abstraction that might perform compression before
  writing to a `Buffer.t', or writes to a socket, or write nowhere, or
  send the bytes to multiple other outputs.

  There already exist some similar abstractions in the ecosystem, such
  as Batteries’ `BatIO', an object based version of this in ocamlnet,
  and probably uncountably many other projects. I have ancestor versions
  of this in many of my own projects. This is my way of dealing with my
  failure to implement [RFC19] in OCaml itself (a worthy read about
  tradeoffs and use cases, for anyone interested). In other languages
  you can find Rust’s [Read], [BufRead], and [Write] traits; and Go’s
  [Reader] and [Writer] interfaces.

  A design note: in `iostream' there is a separation between
  `Iostream.In.t' (which is basically like a unix FD or rust’s `Read':
  it gives you `read: bytes -> int -> int -> int'), and
  `Iostream.In_buf.t' (the equivalent of rust’s `BufRead': it has its
  own buffer and gives you access to it. Unlike `in_channel'’s magic
  methods for `input_line', you can inspect the buffer to look ahead and
  consume exactly the amount of input you need, no leftovers).

  The library is under the MIT license. The online docs are [here].


[library] <https://github.com/c-cube/ocaml-iostream>

[RFC19] <https://github.com/ocaml/RFCs/pull/19>

[Read] <https://doc.rust-lang.org/std/io/trait.Read.html>

[BufRead] <https://doc.rust-lang.org/std/io/trait.BufRead.html>

[Write] <https://doc.rust-lang.org/std/io/trait.Write.html>

[Reader] <https://pkg.go.dev/io#Reader>

[Writer] <https://pkg.go.dev/io#Writer>

[here] <https://c-cube.github.io/ocaml-iostream/dev/iostream/index.html>


Rudi Grinberg asked
───────────────────

  Looks like an interesting library to me. I have a few comments or
  questions:

  1. Is there going to be support for bigarrays or do you not support
     them on purpose?
  2. The documentation states that `close' “must be idempotent” for
     output streams and is “idempotent” for input streams. Could you
     clarify the distinction here? Also, did you consider just making
     sure that your modules never call these functions more than once?
     Seems like that would be more helpful to users of the library.
  3. Did you consider splitting the parts that depend on Unix into a sub
     library?


Simon Cruanes replied
─────────────────────

  These are good questions, thanks. It’s not easy to write interfaces
  with such a general purpose scope :sweat_smile:

  1. I didn’t see a good way to support both bytes and bigarrays in the
     same interface ­— asking implementors to have both `read' and
     `read_bigstring' would be annoying, for example. However a good
     chunk of the ecosystem does rely on bigarrays so it is an important
     topic. I can imagine two solutions on the top of my head:
     ‣ have `read_bigstring', `write_bigstring' with default
       implementations just going through an intermediate layer of
       `bytes', and the possibility for the implementor of the stream to
       write a custom version
     ‣ parametrize the stream types with the underlying type, i.e have
       `bytes Iostream.In.t' as well as `bigstring ~Iostream.In.t'. But
       here the difficulty is that all the convenience combinators in
       the library become impossible to write, or specialized just for
       (say) the `bytes' version.
  2. `close' should be idempotent for both, i.e closing twice shouldn’t
     fail. The reason is that it’s just too hard to keep track of
     whether you closed already, especially if you mix explicit closing
     (closing a connection) with resource handlers such as `with_in : …'
     or `Fun.protect' that will ensure proper disposal of resources.
  3. How do you provide an interface with a `as_fd : unit ->
     Unix.file_descr option' in a sub-library? It has to be part of the
     core interface, or not be there at all. This part comes from the
     initial goal, in RFC 19, to replace standard channels (which
     provide things like `seek' and `pos'), but I agree it’s annoying to
     depend on `Unix'.


Second release candidate for OCaml 5.1.0
════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/second-release-candidate-for-...>


octachron announced
───────────────────

  In the last two weeks, two significant bugs have been discovered in
  the release candidate for OCaml 5.1.0 (one affecting the type system,
  another in the runtime).

  Those bugs are now fixed and we are publishing a second release
  candidate to check that everything is in order before the release in
  the upcoming week.

  If you find any bugs, please report them on [OCaml’s issue tracker].

  The full change log for OCaml 5.1.0 is available [on GitHub]. A short
  summary of the two fixed bugs in this release candidate is also
  available below.


[OCaml’s issue tracker] <https://github.com/ocaml/ocaml/issues>

[on GitHub] <https://github.com/ocaml/ocaml/blob/5.1/Changes>

Installation Instructions
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  The base compiler can be installed as an opam switch with the
  following commands on opam 2.1 and later:
  ┌────
  │ opam update
  │ opam switch create 5.1.0~rc2
  └────

  The source code for the release candidate is also directly available
  on:

  • [GitHub]
  • [OCaml archives at Inria]


[GitHub] <https://github.com/ocaml/ocaml/archive/5.1.0-rc2.tar.gz>

[OCaml archives at Inria]
<https://caml.inria.fr/pub/distrib/ocaml-5.1/ocaml-5.1.0~r...>

◊ Fine-Tuned Compiler Configuration

  If you want to tweak the configuration of the compiler, you can switch
  to the option variant with:
  ┌────
  │ opam update
  │ opam switch create <switch_name> ocaml-variants.5.1.0~rc2+options <option_list>
  └────
  where `<option_list>' is a comma-separated list of `ocaml-option-*'
  packages. For instance, for a `flambda' and `no-flat-float-array'
  switch:
  ┌────
  │ opam switch create 5.1.0~rc2+flambda+nffa ocaml-variants.5.1.0~rc2+options
ocaml-option-flambda
  │ ocaml-option-no-flat-float-array
  └────

  All available options can be listed with `opam search ocaml-option'.


Last Minute Bug Fixes
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

◊ Type System:

  • (*breaking change*) [#6941], [#11187], +[#12483]: prohibit using
    classes through recursive modules inheriting or including a class
    belonging to a mutually-recursive module would previous behave
    incorrectly, and now results in a clean error. (Leo White, review by
    Gabriel Scherer and Florian Angeletti)


  [#6941] <https://github.com/ocaml/ocaml/issues/6941>

  [#11187] <https://github.com/ocaml/ocaml/issues/11187>

  [#12483] <https://github.com/ocaml/ocaml/issues/12483>


◊ Runtime

  • [#12481], [#12505]: Fix incorrect initialization of array
    expressions `[|e1;...;eN|]' when `N' is large enough to require
    major heap allocation. (Xavier Leroy, report by Andrey Popp,
    analysis by KC Sivaramakrishnan and Vincent Laviron, review by
    Gabriel Scherer)


  [#12481] <https://github.com/ocaml/ocaml/issues/12481>

  [#12505] <https://github.com/ocaml/ocaml/issues/12505>


ocamlgraph 2.1.0
════════════════

  Archive: <https://discuss.ocaml.org/t/ann-ocamlgraph-2-1-0/12937/1>


Jean Christophe Filliatre announced
───────────────────────────────────

  It is my pleasure to announce a new release of [OCamlGraph], a graph
  library for OCaml. It is already available in opam and it is
  documented [here].

  Among other things, this release fixes an embarrassing bug in
  functions `Dfs.fold' and `Dfs.fold_component', which were actually not
  implementing a depth-first traversal (yet a graph traversal). See the
  excellent post [Stack-based DFS is tricky to get right] for an
  explanation.

  Note: We have deprecated the support of package `ocamlgraph_gtk', a
  tool to display graphs using GTK. If you are using this package,
  please [make an issue] and we’ll discuss the options.


[OCamlGraph] <https://github.com/backtracking/ocamlgraph>

[here] <http://backtracking.github.io/ocamlgraph/>

[Stack-based DFS is tricky to get right]
<https://11011110.github.io/blog/2013/12/17/stack-based-gr...>

[make an issue] <https://github.com/backtracking/ocamlgraph/issues>


Liquid ML - A templating language used by Shopify, Github Pages and more!
═════════════════════════════════════════════════════════════════════════

  Archive:

<https://discuss.ocaml.org/t/ann-liquid-ml-a-templating-la...>


Ben Faerber announced
─────────────────────

  Hello everyone, I am excited to announce the release of my first OPAM
  package liquid_ml. Shopify’s Liquid Templating language for OCaml.
  Check it out here: [https://github.com/benfaerber/liquid-ml]

  Learn Liquid syntax here: [https://shopify.github.io/liquid/]

  The Liquid templating language is used all over including Shopify and
  Github pages. The Rust port of the language is very popular for static
  site and documentation generation. If anyone has any suggestions or
  wants to help improve the project I welcome pull requests!


[https://github.com/benfaerber/liquid-ml]
<https://github.com/benfaerber/liquid-ml>

[https://shopify.github.io/liquid/] <https://shopify.github.io/liquid/>


moonpool 0.4
════════════

  Archive: <https://discuss.ocaml.org/t/ann-moonpool-0-4/12941/1>


Simon Cruanes announced
───────────────────────

  Moonpool [0.4] was released on opam a few days ago.

  There are not a lot of new features, but Moonpool is now a better
  citizen wrt resource usage: if no pool is active, background domains
  will shut down (to be spun back again later if they’re needed). This
  was trickier to get right than I expected and a last bug was found
  [during the release process] and fixed with the help of @avsm, @dra27
  and [Mark Telvers]).


[0.4] <https://github.com/c-cube/moonpool/releases/tag/v0.4>

[during the release process]
<https://github.com/ocaml/opam-repository/pull/24306>

[Mark Telvers] <https://github.com/mtelvers>


Oxidizing OCaml, and a new opam switch
══════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/oxidizing-ocaml-and-a-new-opa...>


Yaron Minsky announced
──────────────────────

  We just posted the thrilling conclusion to our blog trilogy on
  Oxidizing OCaml, which talks about some of the things we’ve been
  working on (and some of our space-age plans) around extending OCaml to
  support some of the same kinds of things that Rust lets you do, but in
  a distinctly OCaml-ish way.

  Here are the posts:

  • [Locality]
  • [Rust Style Ownership]
  • [Data Race Freedom]

  Maybe more excitingly, you can play around with the version of our
  internal compiler that has the bits of this we’ve implemented thus far
  (mostly, the local/global stuff, but the beginnings of uniqueness as
  well) as well as our open-source libraries, via an [opam switch].

  This is very much a bleeding-edge, unstable version. We use it
  internally for real work, but we refactor it mercilessly, and the
  language features are most definitely not stable. We hope one day to
  propose a lot of this upstream, but for now, it’s just a preview of
  some interesting experiments.

  The thing I’m most excited about all of this is the prospect of
  data-race free OCaml. The ability to leverage the great work done by
  the Multicore team, but safely, is a prospect I’m very much looking
  forward to.

  Also, a bunch of Jane Street compiler folk will be at ICFP next week.
  If you’re interested in learning more, that’s a good time to grab one
  of us.


[Locality] <https://blog.janestreet.com/oxidizing-ocaml-locality/>

[Rust Style Ownership]
<https://blog.janestreet.com/oxidizing-ocaml-ownership/>

[Data Race Freedom]
<https://blog.janestreet.com/oxidizing-ocaml-parallelism/>

[opam switch]
<https://github.com/janestreet/opam-repository/tree/with-e...>


Outreachy December 2023
═══════════════════════

  Archive: <https://discuss.ocaml.org/t/outreachy-december-2023/12949/1>


Patrick Ferris announced
────────────────────────

  With the conclusion of the previous Outreachy round (see
  <https://discuss.ocaml.org/t/end-of-internship-demo-sessio...>),
  the next round is fast approaching and the OCaml community has signed
  up again to participate!

  The deadline for mentors to [signup] is *September 29 2023*. The OCaml
  community has decided to try a slightly different approach that has
  worked very well in the previous round. We noticed quite a few people
  would like to be involved in an internship but without worrying too
  much about the details of Outreachy itself. If people are simply
  interested in mentoring and they maintain an open-source project, then
  they can reach out directly to @pitag or myself and we can help scope
  a project, explain the contribution period and provide as much other
  help as we can!

  When signing up mentors propose an open-source project where
  prospective interns submit PRs during the “contribution phases” as
  part of their application. Mentors will then choose an intern to work
  with for 3 months. A more detailed explanation is available [on the
  Outreachy mentor section].

  Finally, [Tarides] and [OCaml Software Foundation] have been very
  generous so far funding our efforts on the intern side. Since the
  previous round, Jane Street and Tarides have gone a step further and
  have also provided funding for the mentor side! Mentoring does take
  time, but you get a lot back from it on different levels and hopefully
  this financial help can lower the barriers to being a mentor.

  As always if you have any general questions or mentoring ideas do
  comment on this thread or reach out to us directly.


[signup] <https://www.outreachy.org/communities/cfp/>

[on the Outreachy mentor section]
<https://www.outreachy.org/mentor/#mentor>

[Tarides] <https://tarides.com>

[OCaml Software Foundation] <https://ocaml-sf.org>


New release of PPrint (2023830)
═══════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-new-release-of-pprint-202...>


François Pottier announced
──────────────────────────

  It is my pleasure to announce a new release of PPrint, the
  pretty-printing library, with the following additions:

  • The new function `is_empty' allows testing (in constant time)
    whether a document is empty.
  • Documentation: add a warning about the time and space complexity of
    a naive use of `ifflat'.

  The library now requires OCaml 4.03 or newer.


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@polytechnique.org>

[the archive] <https://alan.petitepomme.net/cwn/>

[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>

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

[Alan Schmitt] <https://alan.petitepomme.net/>



to post comments


Copyright © 2023, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds