[Libguestfs] [PATCH v2 1/4] common/mlstdutils: Extend the List module.

Richard W.M. Jones rjones at redhat.com
Tue Nov 7 17:08:34 UTC 2017


On Tue, Nov 07, 2017 at 03:16:31PM +0100, Pino Toscano wrote:
> On Sunday, 8 October 2017 23:26:53 CET Richard W.M. Jones wrote:
> > We defined a number of functions on lists which are not provided by
> > the standard library.  As with Char and String, let's extend List to
> > add these new functions to a List pseudo-module (really
> > Std_utils.List, but called List when you ‘open Std_utils’).
> > 
> > The initial exported functions are all List functions from OCaml 3.11
> > + iteri + mapi.  We can add other functions as needed.
> > ---
> 
> My worry about this is that:
> - OCaml does not have OOTB support for conditional code depending on the
>   version
> - the interface of the List module would get "frozen" this way, and
>   overrides the module in the standard library
> then we could run into issues like commit
> 7cd27531154dd25d9093cf04c085a3669bc834e5, i.e. restricting the interface
> because of compatibility issues.

This commit stopped a symbol from being exported which didn't exist in
whatever minimum version of OCaml we were supporting at the time (3.11
I think).

It didn't restrict what we could do:

* If we wanted to stay with [whatever minimum version of OCaml] then
  we would have had to reimplement ‘StringSet.map’.

* It didn't stop us from reimplementing ‘StringSet.map’ if we had
  needed it.

* We could move to a new minimum version of OCaml and add newer
  functions to Char, String and List.

> Also IMHO this makes more difficult to know what's stdlib and what's
> ours, when using the API -- I guess I mentioned that when String was
> introduced, maybe...

Plainly it is true that from just reading the code you can't easily
tell that ‘List.map’ is really ‘Std_utils.List.map’.  (In emacs you
can use ‘M-x caml-types-show-ident’ to show the true name.)

But I think it's good that we can add new functions under the Char,
String and List modules.  It's also a fairly common technique.  Most
notably it was used by ExtLib[1] for the last 14 years.

Rich.

[1] https://github.com/ygrek/ocaml-extlib/blob/41951de2ce604c6fc0bf72a86f77d67c7a40ad30/src/extList.mli#L31

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list