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

Alan Schmitt alan.schmitt at polytechnique.org
Tue Oct 8 01:14:18 PDT 2019


Hello

Here is the latest OCaml Weekly News, for the week of October 01 
to 08,
2019.

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

Caqti 1.2.0
First releast of Rotor: a multi-file refactoring tool
Release of Easy_logging v0.6
Improving interoperability between ocaml, ocamlfind and dune
the OCaml Software Foundation
Protocell 1.0.0: Yet another plugin for the Protobuf Compiler
Release of bindings to blake2, uecc, and hacl
Old CWN


Caqti 1.2.0
═══════════

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


Petter A. Urkedal announced
───────────────────────────

  I would like to announce the release of Caqti 1.2.0.  Caqti is 
  an
  abstraction layer over RDBMS client libraries, including 
  MariaDB,
  PostgreSQL, and Sqlite3.  It uses asynchronous calls where 
  available
  to provide monadic concurrency, implements connection pooling,
  provides encoding and decoding of parameters and results, and 
  aids in
  formulating query strings usable across databases.

  I am pleased to see outside contributions for this release; the
  changes since 1.1.0 are:

  • Add a signature for the populate function, and add basic
    implementations for all drivers (GPR#28).
  • Add stream for result extraction (GPR#22 Nathan Rebours).
  • Use the postgres driver when `postgres' is specified as the 
  URL
    scheme (GPR#25 James Owen).
  • Documentation improvements (GPR#20 Nathan Rebours, etc.).
  • Reimplemented partly ineffective prepare-cache for PostgreSQL.
  • Backwards incompatible changes to the driver API.
  • Backwards incompatible changes to modules marked internal but
    exposed due to being split across packages.
  • Fix forward compatibility past OCaml 4.08 as announced by
    deprecations.

  About the first point, it should be mentioned that the new 
  `populate'
  function has no optimized implementation yet.  It will map to
  COPY-FROM for PostgreSQL.

  Project page: <https://github.com/paurkedal/ocaml-caqti/>
  API documentation: 
  <http://paurkedal.github.io/ocaml-caqti/index.html>


First releast of Rotor: a multi-file refactoring tool
═════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-first-releast-of-rotor-a-multi-file-refactoring-tool/4499/1>


Reuben Rowe announced
─────────────────────

  It is our pleasure the announce the first release of [ROTOR]: a 
  tool
  for refactoring multi-file OCaml codebases. Currently, it just
  performs renaming of value bindings, but the intention is for 
  ROTOR to
  support a full range of refactoring tasks, and to be _the_ go-to
  refactoring tool for the OCaml community.

  ROTOR has been developed at the University of Kent, with the 
  support
  of Jane Street, as part of a [research project] on trustworthy
  refactoring.

  It is available now on OPAM:

  ┌────
  │ opam install rotor
  └────

  This release is an alpha version, and so we'd love you all to 
  try it
  out and give us your feedback. Since it is still a prototype, we 
  are
  certainly not making any claims that it works perfectly in all 
  cases,
  but we think it is at a stage where it can start to be useful to 
  the
  community, and where it will be useful for us to seek community
  feedback.

  Please raise any issues on the [gitlab] page. Please also email 
  us to
  report on your experiences.

  Currently, ROTOR is invoked from the command-line:

  ┌────
  │ rotor rename [options] <from-id> <to-id>
  └────

  ROTOR can determine the files that comprise your codebase using
  `.merlin' files, and outputs a `diff' patch which can be applied 
  to
  effect the renaming. For the future, we are looking at 
  integrating
  within IDEs, which will make it easier to use.


[ROTOR] <https://trustworthy-refactoring.gitlab.io/refactorer/>

[research project]
<https://gow.epsrc.ukri.org/NGBOViewGrant.aspx?GrantRef=EP/N028759/1>

[gitlab] 
<https://gitlab.com/trustworthy-refactoring/refactorer/issues>


Release of Easy_logging v0.6
════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-release-of-easy-logging-v0-6/4461/4>


Sapristi announced
──────────────────

  An « experimental » FileRotating Handler was added in version 
  0.6.2 of
  Easy_logging. Behaviour is about the same as the [python one], 
  except
  that rotating parameters (max_kbytes and backup_count) shouldn't 
  be 0.


[python one]
<https://docs.python.org/3/library/logging.handlers.html#logging.handlers.RotatingFileHandler>


Improving interoperability between ocaml, ocamlfind and dune
════════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/improving-interoperability-between-ocaml-ocamlfind-and-dune/4479/1>


Anil Madhavapeddy announced
───────────────────────────

  In the OCaml library ecosystem, there are two important pieces 
  of
  software that are being relied on for managing our code:

  • [ocamlfind], lead by Gerd Stolpmann has been the standard for
    managing OCaml libraries for many years. It provides a 
    convention
    for storing libraries on the filesystem, and a `META' file 
    format
    for describing the properties of libraries.  There is a CLI 
    tool
    that interprets `META' files and makes it easy to embed within 
    build
    systems.

  • [dune], lead by @diml, is an specialised build system for 
  OCaml that
    aims to be fast and expressive.  Dune's functionality 
    complements
    but doesn't fully replace ocamlfind – it can interpret `META' 
    files
    as installed by ocamlfind, but it also now has newer features 
    such
    as [virtual libraries] which cannot be expressed by ocamlfind. 
    Dune
    installs a `dune-package' file with every library that 
    contains its
    full metadata, and translates the compatible subset into the 
    META
    format as well.

  This has lead to some incompatibilities in recent months, since
  independent build systems now need to handle two separate 
  formats
  (`META' and `dune-package').  Therefore, the authors of both 
  systems
  have gotten together to make the following changes to improve 
  the
  consistency of our community:

  • *ocamlfind has moved to [github.com/ocaml/ocamlfind]* from its
     former home at GitLab.  Gerd will work on migrating links and 
     merge
     requests from the old repository to the new home.  This also
     belatedly recognises ocamlfind as a very important piece of 
     the
     OCaml Platform and ecosystem, by hosting it at the `ocaml/' 
     GitHub
     repository alongside the compiler, opam, dune and the 
     ocaml.org
     website.

  • There is *a new [ocaml/ocaml-library-standard] repository* 
  where we
    will work on a documented standard for both dune and ocamlfind 
    to
    use for the purposes of clean interoperability.  This is just
    starting up this week, and so we will give Gerd and @diml some
    months to establish the common ground between the projects. 
    If
    anyone has specific asks for features that are not covered by
    ocamlfind and dune at the moment from a packaging perspective, 
    then
    this is a good time to get in touch.  Note that _new_ feature
    requests may not make the first version of the spec – we are 
    keen to
    ensure that the existing status is reflected initially to 
    solve the
    immediate problem, and so the focus is on documenting the 
    existing
    interactions between the OCaml compiler, ocamlfind, and dune.


[ocamlfind] <http://projects.camlcity.org/projects/findlib.html>

[dune] <https://dune.build>

[virtual libraries]
<https://dune.readthedocs.io/en/stable/variants.html>

[github.com/ocaml/ocamlfind] <https://github.com/ocaml/ocamlfind>

[ocaml/ocaml-library-standard]
<https://github.com/ocaml/ocaml-library-standard>


Luc_ML said
───────────

  It's really good news.

  Opam is obviously another key OCaml tool.  I should admit that 
  I'm not
  100% clear about how the packages are exactly handled at the 
  lowest
  level, especially when coming to the cooperation between dune,
  ocamlfind and opam.  See
  <https://discuss.ocaml.org/t/connection-between-libraries-in-opam-dune-and-findlib/2536>
  Especially about the "1-1 mapping between opam packages and 
  findlib
  libraries enforced by dune to make the difference (between 
  packages
  and libraries) manageable ".

  Obviously, the ideal solution would be to get only *one
  package&libraries file* for each Ocaml program in order to feed 
  opam
  and dune with reliable information (for package and build 
  management,
  respectively).

  Can you tell us if the ongoing effort you present will solve 
  that?  Or
  if another effort should be made, and give us hints about how to
  contribute?


Anil Madhavapeddy then replied
──────────────────────────────

  dune itself has features these days to [generate opam files from 
  dune
  metadata] – see [ocaml-github] for an example project that uses 
  this
  functionality (or of course, dune itself).  This all greatly 
  helps
  with reducing the amount of boilerplate we have to maintain, and 
  is an
  incremental step on the way to reducing the number of namespaces 
  we
  have without breaking backwards compatibility.

        Note that *new* feature requests may not make the first
        version of the spec – we are keen to ensure that the
        existing status is reflected initially to solve the
        immediate problem, and so the focus is on documenting the
        existing interactions between the OCaml compiler,
        ocamlfind, and dune.

  But please bear the above in mind.  We'll first be working on 
  getting
  ocamlfind and dune to play well together, and then look at 
  further
  improvements after that.  Each step is quite delicate and needs 
  to not
  break any existing software.


[generate opam files from dune metadata]
<https://dune.readthedocs.io/en/stable/opam.html#generating-opam-files>

[ocaml-github]
<https://github.com/mirage/ocaml-github/blob/master/dune-project>


Luc_ML then asked and Anil Madhavapeddy replied
───────────────────────────────────────────────

        In parallel, is there any current discussion about future
        requirements regarding an “integrated package&build OCaml
        solution”, that could feed a kind of candidate roadmap?
        Do you have an idea of a next must-have requirement in
        that field? (I’m not talking about doing it now, just
        planning smth)

  We're planning this in the context of adding [namespaces] to the
  compiler and tools, but this is not yet ready.  We'll likely run 
  it
  through an OCaml core developers meeting sometime next year and 
  then
  post about concrete plans for integration then.


[namespaces] <https://github.com/lpw25/namespaces>


Daniel Bünzli said
──────────────────

  As the author of a few released ([`odig'] and [`omod']) 
  eco-system
  tools and a few yet unreleased ones (e.g. [`brzo'] and 
  [`b0caml']) I
  have given the subject quite a bit of thought and have been 
  compiling
  OCaml software without additional metadata or `ocamlfind' for 
  quite
  some time now without any problem by relying on the fact that 
  OCaml
  compilation objects are largely self-describing.

  While these techniques work, they can certainly be made more 
  efficient
  and reliable by redefining a bit how OCaml libraries get 
  installed and
  adding a tiny bit of new metadata to library archives.

  I'm largely convinced that we do not need an additional metadata
  format for the simple task of using libraries and that this 
  problem
  should be solved upstream – since it then improves the usability
  globally from using the bare compilers to the toplevel.

  I have gathered my thought about this and a possible simple plan 
  for
  action in [this gist]. The proposed scheme has the advantage of
  putting the eco-system on a good conceptual and naming diet with 
  each
  of the names involved appearing at the file system level which 
  is good
  for usability (e.g. which library name should I specify to use 
  this
  module can be answered by looking up the file system).


[`odig'] <https://erratique.ch/software/odig>

[`omod'] <https://erratique.ch/software/omod>

[`brzo'] <https://erratique.ch/software/brzo>

[`b0caml'] <https://erratique.ch/software/b0caml>

[this gist]
<https://gist.github.com/dbuenzli/a78131f54580212986713ef3e9b313e8>


the OCaml Software Foundation
═════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-the-ocaml-software-foundation/4476/1>


gasche announced
────────────────

  Dear OCaml community,

  It is my pleasure to publicize the [OCaml Software Foundation], 
  a
  non-profit foundation dedicated to grow and strengthen the OCaml
  community. It is funded by industrial and academic sponsors who 
  wish
  to contribute back to the community, and its main responsibilty 
  is to
  spend those funds on actions that benefit the community as a 
  whole.

  The Foundation was created by the efforts of Michel Mauny⁰, 
  launched
  in June 2018; I became its director in January 2019, working 
  with an
  Executive Board containing Xavier Leroy, Damien Doligez, Yann
  Regis-Gianas and myself, taking ideas, advice and feedback from 
  the
  excellent people representing our [sponsors] (Currently: ahrefs, 
  Jane
  Street, OCamlPro, Tezos, Bloomberg, Lexifi and SimCorp).

  Our [website]¹ lists a few of our recent [actions], such as 
  developing
  the [Learn-OCaml] teaching platform, funding [Outreachy] 
  internships
  on OCaml, and funding [video capture] for OCaml Meetups. We have 
  been
  asking around, whenever we meet people from the community, on 
  how they
  would recommend using money to improve the community. We have 
  been
  proposing ideas, working on suggestions from our sponsors and 
  the
  general community; we are not very good at communication, we do 
  more
  than we talk about. Of course, as a small organization led by
  volunteers working part-time, things can take a long time to get 
  going
  – please be patient when you interact with us.

  Our current objective is to reach a funding level of $200K per 
  year,
  to be split between actions directed at "teaching OCaml"² and 
  general
  OCaml actions. Once split among several important action areas, 
  this
  is unfortunately not enough to employ someone full-time in a 
  stable
  manner, but it can fund more actions that are more limited in 
  time and
  scope. For example, I have been getting in touch with the 
  maintainers
  of important bricks of the OCaml ecosystem, wondering about 
  whether
  it's possible to solidify the ecosystem by supporting their
  maintenance work where needed.

  That's it! I would be happy to answer questions and receive
  suggestions about the Foundation, in this thread or privately 
  (by
  email at gabriel.scherer at gmail.com). If your company or 
  institution is
  interested in a new way to give back to the OCaml community, 
  please
  consider [becoming a sponsor]; we will do our best to spend this 
  money
  in the general interest of the community.

  —

  ⁰: Michel Mauny was one of the earliest adopters of Caml as a
  programming language; he did his PhD thesis on the [Categorical
  Abstract Machine], which was the basis for the very first Caml
  implementation – before Caml Light and then OCaml.

  ¹: at the time I'm posting this, it is not a nice website; I 
  built it
  in the last few weeks, and web design is not my forte.

  ²: Yann Regis-Gianas has been spear-heading efforts to turn the
  [Learn-OCaml platform], originally developed by OCamlPro for the
  [OCaml MOOC], into a versatile teaching platform with an open 
  corpus
  of automatically-graded OCaml exercises. We are interested in
  supporting and promoting all forms of OCaml teaching, whether 
  they use
  this technical platform or not (for example, Jupyter notebooks 
  are
  also used for OCaml teaching).


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

[sponsors] <https://ocaml-sf.github.io/index.html#sponsors>

[website] <https://ocaml-sf.github.io/>

[actions] <https://ocaml-sf.github.io/actions.html>

[Learn-OCaml] <https://ocaml-sf.github.io/learn-ocaml.html>

[Outreachy] <https://www.outreachy.org/>

[video capture]
<https://www.youtube.com/channel/UCnwkbeuXjuUTNsPoLKsBWdg>

[becoming a sponsor]
<https://ocaml-sf.github.io/becoming-a-sponsor.html>

[Categorical Abstract Machine]
<https://en.wikipedia.org/wiki/Categorical_abstract_machine>

[Learn-OCaml platform] 
<https://ocaml-sf.github.io/learn-ocaml.html>

[OCaml MOOC] 
<https://discuss.ocaml.org/t/ocaml-mooc-third-edition/2458>


Protocell 1.0.0: Yet another plugin for the Protobuf Compiler
═════════════════════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-protocell-1-0-0-yet-another-plugin-for-the-protobuf-compiler/4514/1>


Martin Slota announced
──────────────────────

  I've recently released the first version of [Protocell] which 
  offers
  yet another way of generating OCaml code from `.proto' files.

  Feature highlights:

  • Full support for all `proto3' primitive and user-defined 
  types.
  • Supports imports and generates one `.ml' file per `.proto' 
  file.
  • Automagically supplies code for imports of Google's 
  "well-known
    types" when needed.
  • Concise yet comprehensive test framework that cross-checks
    serializations with those of `protoc' itself.
  • Fully bootstrapped: Protocell uses Protocell-generated code to
    interact with `protoc'.
  • Lean on dependencies, especially when it comes to the runtime
    library.
  • Supports OCaml compiler versions 4.04.1 and above.
  • Decent `proto2' support.
  • Can generate and parse of `protoc''s text format (mostly for 
  testing
    and debugging purposes).

  More information and example code can be found at [the project's
  homepage].

  I'm still just a newbie when it comes to OCaml, its tooling and
  ecosystem. I warmly welcome any sort of input or feedback.


[Protocell] <https://github.com/martinslota/protocell>

[the project's homepage] 
<https://github.com/martinslota/protocell>


Release of bindings to blake2, uecc, and hacl
═════════════════════════════════════════════

  Archive:
  <https://discuss.ocaml.org/t/ann-release-of-bindings-to-blake2-uecc-and-hacl/4513/1>


Raphaël Proust announced
────────────────────────

  On behalf of [Nomadic Labs], I'm pleased to announce the release 
  of
  multiple libraries used in the cryptography section of the 
  [Tezos]
  project. All three libraries are available through `opam'.

  `blake2' provides the fast and secure hash function `blake2b'
  (optimised for 64 bits architecture). You can find more details 
  on the
  original library on <https://blake2.net/> and the bindings on
  <https://gitlab.com/nomadic-labs/ocaml-blake2>

  `uecc' (read “micro-ecc”) implements eliptic curve primitives
  (specifically ECDH and ECDSA). You can find the original library 
  on
  <https://github.com/kmackay/micro-ecc> and the bindings on
  <https://gitlab.com/nomadic-labs/ocaml-uecc>

  `hacl' implements multiple cryptographic algorithms. The 
  original
  library, HACL*, developed in F*, can be found on
  <https://github.com/project-everest/hacl-star>, and the bindings 
  on
  <https://gitlab.com/nomadic-labs/ocaml-hacl>

  These releases are part of a broader effort to release in-house
  bindings and libraries and upstream changes to vendored
  libraries. Look out for our past and future announces.


[Nomadic Labs] <https://nomadic-labs.com/>

[Tezos] <https://tezos.com/>


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/20191008/71363497/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20191008/71363497/attachment-0001.pgp>


More information about the caml-news-weekly mailing list