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

Alan Schmitt alan.schmitt at polytechnique.org
Tue Dec 18 00:41:10 PST 2018


Hello

Here is the latest OCaml Weekly News, for the week of December 11 to 18,
2018.

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

Build-/Installation-Tools - not enough of them?
PyTorch bindings
LablGtk 3.0.beta2 and LablGtk 2.18.7
`travesty', monadic traversals, state monads, and suchlike on top of Core's monads
Some feedback on teaching with jbuilder as a build tool
Blog post: A new general computation model for Dune
Ppxlib 0.4.0
opam 2.0.2!
Ocaml Github Pull Requests
Other OCaml News
Old CWN


Build-/Installation-Tools - not enough of them?
═══════════════════════════════════════════════

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


Deep in this thread, SP said
────────────────────────────

  Reading this discussion inspired me to write this:

  [https://notes.orbitalfox.eu/distributing-software.html]

  I hope it helps. It doesn't cover all the points raised here.  Any
  constructive remarks are welcome.


PyTorch bindings
════════════════

  Archive: [https://discuss.ocaml.org/t/ann-pytorch-bindings/3049/1]


Laurent Mazare announced
────────────────────────

  We are very pleased to announce the first release of our PyTorch
  bindings for ocaml. These bindings provide a NumPy like tensor library
  with GPU acceleration and support for automatic differentiation.

  The `torch' package can be installed via opam. More details can be
  found in the [github repo], including a [tutorial] training some
  neural networks on the MNIST dataset, various deep-learning examples:
  Generative Adverserial Networks, Neural Style Transfer, state of the
  art computer vision models on CIFAR-10, etc. Pre-trained weights for
  some recent computer vision models are also provided.

  Any feedback is very welcome. Hopefully we will write a couple new
  tutorials to describe the current examples and add more examples in
  the next few weeks.

  (note that the `tensorflow' package providing TensorFlow bindings also
  has been updated this week and is now up to speed with the github
  repo)


[github repo] https://github.com/LaurentMazare/ocaml-torch

[tutorial]
https://github.com/LaurentMazare/ocaml-torch/tree/master/examples/mnist


LablGtk 3.0.beta2 and LablGtk 2.18.7
════════════════════════════════════

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


Jacques Garrigue announced
──────────────────────────

  Here is a new release of Lablgtk 2 and 3.  There are only a few bug
  fixes and improvements, but this should provide a better basis for
  packagers.

  They are available for download at the usual location:
  	[http://lablgtk.forge.ocamlcore.org]
  	[https://forge.ocamlcore.org/frs/download.php/1774/lablgtk-3.0.beta2.tar.gz]
  	[https://forge.ocamlcore.org/frs/download.php/1773/lablgtk-2.18.7.tar.gz]

  The code and bug reports are on GitHub
  	[https://github.com/garrigue/lablgtk]
  	[https://github.com/garrigue/lablgtk/tree/lablgtk3] (for the
  	lablgtk3 branch)


`travesty', monadic traversals, state monads, and suchlike on top of Core's monads
══════════════════════════════════════════════════════════════════════════════════

  Archive:
  [https://discuss.ocaml.org/t/ann-travesty-monadic-traversals-state-monads-and-suchlike-on-top-of-cores-monads/3047/1]


Matt Windsor announced
──────────────────────

  My first OPAM package, `travesty', is now [in the repository] :tada:


[in the repository]
https://opam.ocaml.org/packages/travesty/travesty.0.1.2/

What is it?
╌╌╌╌╌╌╌╌╌╌╌

  Travesty is (yet another :upside_down_face:) implementation of monadic
  traversals (similar to Haskell's `Traversable' typeclass), state
  monads and transformers, and several other container and monad
  extensions.  Though it's nowhere near as comprehensive as, say, BAP's
  [monads library], it sits on top of `Core_kernel''s existing `Monad'
  and `Container' infrastructure and tries to use similar conventions
  where possible.

  Travesty specifically includes:

  • a `Mappable' signature set that captures ~map~ping over arity-0 and
    arity-1 types (what Haskell would call a functor);
  • a `Traversable' signature set that describes `map_m', a
    generalisation of `map' to Core-style monads similar to Haskell's
    _traverse_;
  • an implementation of state transformers over Core monads, and
    standalone state monads;
  • some functors for deriving Core-style `Container~s from types with
    monadic traversals (since ~map_m' over a state monad can derive
    `fold');
  • various helper functions for building `map_m' over Fieldslib and
    Variantslib derived operations;
  • a `Singleton' container, which lifts a single value into a
    traversable container;
  • miscellaneous extensions for Core containers, and specific
    extensions for `list' and `option'.

  Travesty is [MIT licenced].

  *Caveat emptor:* Travesty is still in pre-release (`v0.1.2' at time of
   writing).  This is because I very much expect to make breaking
   changes to the API.  Now that it's on `OPAM', I'll try to keep any
   pre-`v1' breaking changes to minor version increments, but
   nonetheless here be dragons.


[monads library]
http://binaryanalysisplatform.github.io/bap/api/v1.3.0/Monads.Std.html

[MIT licenced]
https://github.com/MattWindsor91/travesty/blob/master/LICENSE


Why does this exist?
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  Travesty is a spin-off from [some other work I've been doing], where
  the same monadic concepts kept recurring over and over again, and
  eventually accumulated in a `utils' module.  I figured that it might
  be useful for other `Core'-style projects, so I spun it out.

  (To be honest, I didn't notice BAP's monads library until _after_ I'd
  done so :scream: , though I feel like Travesty has a niche for being a
  more '`Core'-ish' library.)


[some other work I've been doing] https://github.com/MattWindsor91/act


Is there documentation?
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  Autogenerated API documentation is [here] — for now, I've tried to
  make it comprehensive in terms of describing signatures, but it's
  missing examples and usage information.  I'm also new to `odoc', so
  I'm learning how to document as I go along :slightly_smiling_face:


[here] https://mattwindsor91.github.io/travesty/


What about contributions?
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

  I'm very much open to contributions, be they extensions, documentation
  improvements, cleanups, and so on—either through issues or direct pull
  requests.  I'm fairly new to all of this (having come from a more
  Haskell-y world, `travesty' is mostly the end result of trying to
  program OCaml like Haskell!), so I greatly appreciate any engagement
  available.


Ivan Gotovchits later said
──────────────────────────

  FYI, The Monads library is also pretty Core stylish, as not only it
  implements the Core monad interface (that keeps changing from version
  to version of the Core library), but it also provides [the container
  interface][1]. Basically, the traversal.

  [1]:
  [http://binaryanalysisplatform.github.io/bap/api/v1.3.0/Monads.Std.Monad.Collection.html]


Some feedback on teaching with jbuilder as a build tool
═══════════════════════════════════════════════════════

  Archive:
  [https://discuss.ocaml.org/t/some-feedback-on-teaching-with-jbuilder-as-a-build-tool/3050/1]


David Chemouil announced
────────────────────────

  I've been TA-ing a course on functional programming in OCaml at
  [ENSEEIHT], Toulouse, since September and it's just over
  now. Students, 4th year students after the "baccalauréat" (how do you
  call them? graduates? postgraduates?), had to follow several lectures
  as well as roughly 10 seminars and 10 lab sessions. The whole course
  was completely revamped this year, so we also decided to use Jbuilder
  (not Dune, as we had to set up an infrastructure long before Dune 1.0)
  for our lab sessions.

  Overall, the experience has been very nice, so kudos to Dune
  developers!

  However, we also had a few issues that I would like to report for the
  record (Cc: @diml @rgrinberg ), and perhaps to foster a few evolutions
  of Dune (or to be shown how to solve them easily : we may have missed
  some information in the documentation).

  1) `jbuilder runtest' sometimes just hangs while running, I'll try to
     devise an MWE later but I'm still reporting this in case this is
     already a known issue.

  2) Sometimes we wanted to have a program open a file whose path would
     be relative to the source code itself and harcoded in the ML
     file. For instance, the OCaml file contained something like
     `open_in "./foo"'. Unfortunately, it seems Jbuilder doesn't run
     `runtest' and `utop' from the same working directory, hence
     depending on the path written in the ML file, one of these commands
     failed. Is there an easy way to solve this? (We know we could use
     an absolute path to some location, but we have dozens of PCs
     running on a university network, so the configuration is not as
     flexible as one could expect. We'd also like to avoid passing the
     path on the commandline.)

  3) I already spoke about this in another post
     ([https://discuss.ocaml.org/t/dune-link-against-cmo-cmi-without-source/2488/8])
     but I'm writing this here too: we sometimes like to provide
     students with a .cmi/.cmo file pair but no source code. AFAIK
     there's no simple, straightforward way to do this with Dune alone…

  Well that's about it. We met a couple of other problems but they could
  be solved in a reasonably easy way. The only trouble now is that,
  sometimes, students would like to create their own `jbuild' file or
  update one we have provided, and it's a bit hard for them to know how
  to proceed (and the Dune documentation is good but perhaps more aimed
  at regular developers than students). I expect future versions of Dune
  or some Dune plugins, or even other tools, to ease setting up basic
  projects without writing the dune file yourself (e.g. something like
  `dune new-lib mylib' or `dune add-dep mylib core_kernel').


[ENSEEIHT] https://www.enseeiht.fr/


Marshall Abrams then said
─────────────────────────

  I agree that the Dune docs by themselves are not the best starting
  point.  Maybe some of the links here would be helpful:
  [https://ocamlverse.github.io/content/quickstart.html]


Blog post: A new general computation model for Dune
═══════════════════════════════════════════════════

  Archive:
  [https://discuss.ocaml.org/t/blog-post-a-new-general-computation-model-for-dune/3061/1]


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

  [https://dune.build/blog/new-computation-model/] A blog post about the
  new computation model that Dune is built on.


Ppxlib 0.4.0
════════════

  Archive: [https://discuss.ocaml.org/t/ann-ppxlib-0-4-0/3063/1]


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

  The ppxlib team is pleased to announce the release of [ppxlib]
  0.4.0. This release adds better support for defining compile-time
  interpretation of dotted operators such as `+.+' and also improves
  integration with other tools such as reason or metaocaml by no longer
  complaining about attributes generated by these tools. In particular,
  ppxlib now treats all attributes whose name start with an `_' as
  machine generated attributes and doesn't complain if it can't decide
  whether they have been correctly interpreted or not. FTR, ppxlib tries
  to detect attributes and extension points that are dead-code, in order
  to catch typing mistakes or misplacement.

  Here is the full changelog for this release:

  • Do not report errors about dropped or uninterpreted attributes
    starting with `_' (ocaml-ppx/ppxlib#46, fix ocaml-ppx/ppxlib#40,
    @diml)

  • Fix he `special_function' rule for dotted operators and allow
    `Longident.parse' to parse dotted operators (ocaml-ppx/ppxlib#44,
    @Octachron)

  • Port to `dune' and remove use of bash (ocaml-ppx/ppxlib#45,
    @rgrinberg)

  • Ignore all attribites starting with `_' (ocaml-ppx/ppxlib#46, @diml)

  • Reserve the `reason' and `refmt' namespaces (ocaml-ppx/ppxlib#46,
    @diml)

  • Reserve the `metaocaml' namespace (ocaml-ppx/ppxlib#50, @rgrinberg)

  • Fix attribute extraction for Otag/Rtag (ocaml-ppx/ppxlib#51,
    @xclerc)

  • Do not relocate files unless `-loc-filename' is passed
    (ocaml-ppx/ppxlib#55, @hhugo)

  • Perserve the filename in the output (ocaml-ppx/ppxlib#56, @hhugo)


[ppxlib] https://github.com/ocaml-ppx/ppxlib


opam 2.0.2!
═══════════

  Archive: [https://discuss.ocaml.org/t/ann-opam-2-0-2/3046/1]


R. Boujbel announced
────────────────────

  We are pleased to announce the release of [opam 2.0.2].

  This new version contains mainly backported fixes, you can find more
  information in this [blog post].

  Note that as **sandbox scripts** have been updated, don't forget to
  run `opam init --reinit -ni' to update yours.

  opam is a source-based package manager for OCaml. It supports multiple
  simultaneous compiler installations, flexible package constraints, and
  a Git-friendly development workflow.


[opam 2.0.2] https://github.com/ocaml/opam/releases/tag/2.0.2

[blog post] https://opam.ocaml.org/blog/opam-2-0-2


Anil Madhavapeddy added
───────────────────────

  Thanks @rjbou! :) For anyone on Ubuntu that wants a quick upgrade, the
  [opam2 PPA] has been updated with this release as well.


[opam2 PPA] https://launchpad.net/~avsm/+archive/ubuntu/ppa


Ocaml Github Pull Requests
══════════════════════════

Gabriel Scherer and the editor compiled this list
─────────────────────────────────────────────────

  Here is a sneak peek at some potential future features of the Ocaml
  compiler, discussed by their implementers in these Github Pull
  Requests.

  • [Make caml-mode an independent project]


[Make caml-mode an independent project]
https://github.com/ocaml/ocaml/pull/2182


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

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

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

  • [ocaml-http–migration-to-github]
  • [opam 2.0.2 release]
  • [opam 2.0.2 release]
  • [MirageOS, towards a smaller and safer OS]


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

[ocaml-http–migration-to-github]
http://forge.ocamlcore.org/forum/forum.php?forum_id=965

[opam 2.0.2 release]
http://www.ocamlpro.com/2018/12/14/opam-2-0-2-release/

[opam 2.0.2 release] https://opam.ocaml.org/blog/opam-2-0-2/

[MirageOS, towards a smaller and safer OS]
https://tarides.com/blog.html#2018-12-06-mirageos-towards-a-smaller-and-safer-os


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/20181218/d3ebe0ce/attachment.htm>
-------------- 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/20181218/d3ebe0ce/attachment-0001.pgp>


More information about the caml-news-weekly mailing list