[cwn] Attn: Development Editor, Latest OCaml Weekly News
Alan Schmitt
alan.schmitt at polytechnique.org
Tue Sep 25 05:29:18 PDT 2018
Hello
Here is the latest OCaml Weekly News, for the week of September 18 to
25, 2018.
Table of Contents
─────────────────
Release of Teash 0.1.0
OCaml wrapper on top of a Random Forests implementation
opam 2.0.0 final release and repository upgrade
A client library for the Zeit API and Δ now.sh
Next OUPS meetup October 1st 2018
Release Candidate 4.07.1+rc1
Caqti 1.0.0
Mirage 3.2.0
Other OCaml News
Old CWN
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Release of Teash 0.1.0
══════════════════════
Archive:
[https://discuss.ocaml.org/t/ann-release-of-teash-0-1-0/2577/1]
Johan Stenqvist announced
─────────────────────────
Hi, I'm happy to announce that the initial release of Teash is now
available from opam.
Teash is an implementation of "The Elm Architecture", for the
shell. It may be used to build interactive terminal applications that
adheres to the `Model -> Update -> View' paradigm.
Please don't hesitate to drop by [https://github.com/neochrome/teash]
and leave feedback/issues if you find it useful.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
OCaml wrapper on top of a Random Forests implementation
═══════════════════════════════════════════════════════
Archive:
[https://discuss.ocaml.org/t/ocaml-wrapper-on-top-of-a-random-forests-implementation/2579/1]
UnixJunkie announced
────────────────────
I made yet another wrapper. It is here:
[https://github.com/UnixJunkie/oranger]
It can be used for classification and regression. There is a test
here: [https://github.com/UnixJunkie/oranger/blob/master/src/test.ml]
This package relies on the C++ ranger implementation:
[https://github.com/imbs-hl/ranger]
this package does not depend on R.
It is quite hackish and doesn't support sparse data also (I need to
know how ranger supports them first).
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
opam 2.0.0 final release and repository upgrade
═══════════════════════════════════════════════
Archive:
[https://discuss.ocaml.org/t/ann-opam-2-0-0-final-release-and-repository-upgrade/2585/1]
R. Boujbel announced
────────────────────
We are happy to announce the *opam 2.0.0 final release*.
A few weeks ago, we released a last release candidate to be later
promoted to 2.0.0, synchronised with the opam package repository
upgrade to 2.0.0.
More information in this [blog post].
We want to thank opam repository maintainers and OS maintainers for
their help.
[blog post] https://opam.ocaml.org/blog/opam-2-0-0/
Perry E. Metzger said
─────────────────────
I've upgraded the opam package in MacPorts to 2.0.0, so MacPorts users
can upgrade opam that way quite easily.
Marek Kubica also said
──────────────────────
Same with homebrew, the pull request was just merged today.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
A client library for the Zeit API and Δ now.sh
══════════════════════════════════════════════
Archive:
[https://discuss.ocaml.org/t/ann-a-client-library-for-the-zeit-api-and-now-sh/2589/1]
Etienne Millon announced
────────────────────────
[https://now.sh] is a service to do easy serverless deployments. It's
a way to deploy a web site or application without managing a server
directly. Deployments are handled through the [Zeit API]. The official
client is a Node application, which might be a bit heavy for some use
cases.
I am happy to announce the release of an OCaml client for this API. It
can be used to trigger deployments from an OCaml application. It is
available [on github] & [on opam] as `opam install zeit'. [An example
program] is included to demonstrate what the API looks like.
This exposes very few endpoints at the moment, but we plan to use this
in the near future to make a better story around deploying OCaml
applications.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
[Zeit API] https://zeit.co/api
[on github] https://github.com/emillon/ocaml-zeit
[on opam] http://opam.ocaml.org/packages/zeit/
[An example program]
https://github.com/emillon/ocaml-zeit/blob/cdcdd0b155d406d1b8c8947e3c620527c3c9ecf7/bin/maintenant.ml
Next OUPS meetup October 1st 2018
═════════════════════════════════
Archive:
[https://sympa.inria.fr/sympa/arc/caml-list/2018-09/msg00033.html]
Bruno Bernardo announced
────────────────────────
The OUPS meetup is back. The next one will take place on Monday,
October 1, 7pm at IRILL on the Jussieu campus. As usual, we will have
a few talks, followed by pizzas and drinks.
The talks will be the following:
• Berke Durak: OCaml in space: embedded software and numerical
analysis
• Armaël Guéneau: Complexity proofs for OCaml programs with CFML
• Paul Laforgue: Copattern matching in OCaml
Please do note that we are always in demand of talk /proposals/ for
future meetups.
To register, or for more information, go here:
[https://www.meetup.com/ocaml-paris/events/254849756/]
/Registration is required! Access is not guaranteed after 7pm if
you're not registered./ (It also helps us to order the right amount of
food.)
Access map:
IRILL - Université Pierre et Marie Curie (Paris VI)
Barre 15-16 1er étage
4 Place Jussieu
75005 Paris
[https://www.irill.org/pages/access.html]
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Release Candidate 4.07.1+rc1
════════════════════════════
Archive:
[https://sympa.inria.fr/sympa/arc/caml-list/2018-09/msg00040.html]
Damien Doligez announced
────────────────────────
Dear OCaml users,
The release of OCaml version 4.07.1 is imminent. We have created a
release candidate for your testing pleasure. Please try it in opam
and test your favourite software with it. Then let me know whether it
works for you.
We want to know about any show-stopping bugs, especially in the
compilation and installation phases.
This release candidate will soon be available as a bunch of OPAM
switches. It is also available as source code at this address:
[http://caml.inria.fr/pub/distrib/ocaml-4.07/]
Happy hacking,
– Damien Doligez for the OCaml team.
Damien Doligez then added
─────────────────────────
Sorry, I forgot to include the Changes list. See the end of this mail.
Bug fixes:
╌╌╌╌╌╌╌╌╌╌
• MPR#7815, GPR#1896: major GC crash with first-fit policy (Stephen
Dolan and Damien Doligez, report by Joris Giovannangeli)
• * MPR#7818, GPR#2051: Remove local aliases in functor argument
types, to prevent the aliasing of their target. (Jacques Garrigue,
report by mandrykin, review by Leo White)
• MPR#7820, GPR#1897: Fix Array.of_seq. This function used to apply a
circular permutation of one cell to the right on the sequence.
(Thierry Martinez, review by Nicolás Ojeda Bär)
• MPR#7821, GPR#1908: make sure that the compilation of extension
constructors doesn't cause the compiler to load more cmi files
(Jérémie Dimino)
• MPR#7824, GPR#1914: subtype_row: filter out absent fields when row
is closed (Leo White and Thomas Refis, report by talex, review by
Jacques Garrigue)
• GPR#1915: rec_check.ml is too permissive for certain class
declarations. (Alban Reynaud with Gabriel Scherer, review by Jeremy
Yallop)
• MPR#7833, MPR#7835, MPR#7822, GPR#1997: Track newtype level again
(Leo White, reports by Jerome Simeon, Thomas Refis and Florian
Angeletti, review by Jacques Garrigue)
• MPR#7838: -principal causes assertion failure in type checker
(Jacques Garrigue, report by Markus Mottl, review by Thomas Refis)
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Caqti 1.0.0
═══════════
Archive: [https://discuss.ocaml.org/t/ann-caqti-1-0-0/2609/1]
Petter A. Urkedal announced
───────────────────────────
Caqti is an abstraction layer over relational database client
libraries, currently supporting MariaDB, PostgreSQL and Sqlite3
providing monadic concurrency, connection pools, and unified parameter
handling.
I am please to announce the first formally stable release, with the
following highlights from the change log:
• Applied an essential fix of ptime to string conversion for
PostgreSQL by @monstasat, with apologies for the delayed release to
anyone who might have encountered the issue.
• Support microsecond precision for MariaDB. This completes the
support for full time precision in all drivers.
and some adjustments of the API:
• Added `Caqti_type.Std : Caqti_type_sig.Std', containing type
descriptors needed for building requests, for easy inclusion in
custom modules.
• Removed `Caqti_type.Field.ex' and renamed `Caqti_type.ex' to
`Caqti_type.any' and related functions.
• Removed other deprecated definitions.
• Moved `Caqti_system_sig' into `Caqti_driver' and split up the
signature to make room for future drivers on alternative platforms.
Petter A. Urkedal later added
─────────────────────────────
• [Project page]
• [API reference]
There is also a nice [introductory tutorial] on Medium.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
[Project page] https://github.com/paurkedal/ocaml-caqti
[API reference] http://paurkedal.github.io/ocaml-caqti/index.html
[introductory tutorial]
https://medium.com/@bobbypriambodo/interfacing-ocaml-and-postgresql-with-caqti-a92515bdaa11
Mirage 3.2.0
════════════
Archive: [https://discuss.ocaml.org/t/ann-mirage-3-2-0/2613/1]
Hannes Mehnert announced
────────────────────────
it is my pleasure to announce that mirage 3.2.0 has been released to
opam-repository(`*'). This release contains breaking changes with
earlier releases:
It requires solo5 0.4.0, which renames "ukvm" to "hvt" (thanks to
Martin Lucina) It requires tcpip 3.5.0, which removes complexity from
stack initialisation (thanks to Hannes Mehnert)
Mirage now comes with the hvt (Hardware Virtualization Tender) target
(earlier known as ukvm), which works on Linux/KVM, OpenBSD/VMM (since
6.4), and FreeBSD/VMM|BHyve.
Upgrading from Mirage 3.1.x or earlier
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
Due to conflicting packages, opam will not upgrade mirage to version
3.2.0 or newer if a version of mirage-solo5 older than 0.4.0 is
installed in the switch. To perform the upgrade you must run `opam
upgrade mirage' explicitly.
◊ Changes required to rebuild and run ukvm unikernels
As of Solo5 0.4.0, the ukvm target has been renamed to hvt. If you are
working out of an existing, dirty, source tree, you should initially
run:
┌────
│ mirage configure -t hvt
│ mirage clean
│ mirage configure -t hvt
└────
and then proceed as normal. If you are working with a clean source
tree, then simply configuring with the new hvt target is sufficient:
`mirage configure -t hvt'
Note that the build products have changed:
The unikernel binary is now named `<unikernel>.hvt', the `ukvm-bin'
binary is now named `solo5-hvt'.
adapt to mirage-protocols, mirage-stack, tcpip changes
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
This is a breaking change: mirage 3.2.0 requires mirage-protocols
1.4.0, mirage-stack 1.3.0, and tcpip 3.5.0 to work
(charru-client-mirage 0.10 and mirage-qubes-ipv4 0.6 are adapted to
the changes). An older mirage won't be able to use these new libraries
correctly. Conflicts were introduced in the opam-repository.
In more detail, direct and socket stack initialisation changed, which
is automatically generated by the mirage tool for each unikernel (as
part of `main.ml'). A record was built up, which is no longer needed.
Several unneeded type aliases were removed:
• `netif' from Mirage_protocols.ETHIF
• `ethif' and `prefix' from Mirage_protocols.IP
• `ip' from Mirage_protocols.{UDP,TCP}
• `netif' and `'netif config' from Mirage_stack.V4
• `'netif stackv4_config' and `socket_stack_config' in Mirage_stack
Regards,
hannes
`*': which since a week switched to opam 2.0, and thus you'll only see
updates if you upgraded your opam to 2.0 (you can do so by following
the instructions on [https://opam.ocaml.org/blog/opam-2-0-0/])
Christian Lindig asked and Thomas Gazagnaire replied
────────────────────────────────────────────────────
> Could you give a summary (or provide a link) what Mirage is and what
it is good for?
You can see Mirage as the sum of three components:
1. A set of system APIs. We have module types for each of the main
device drivers (low-level like network and storage but also higher
level drivers like HTTP and TLS devices). See for instance
[mirage-protocols] for the module types related to our TCP/IP
stack.
2. A set of packages implementing these API. These could be
backend-specific (like [Unix], [Xen], or [solo5] (to target kvm),
or [ESP32]) or generic (like an [HTTP server], a Git
implementation, etc). The generic implementations are functors over
the set of APIs defined in 1.
3. A configuration DSL ([functoria]) and a command-line tool
([mirage]) to bind them all.
You can read more about this on the [MirageOS] website, including
links to papers, tutorials, etc.
[mirage-protocols] https://github.com/mirage/mirage-protocols
[Unix] https://github.com/mirage/mirage-net-unix
[Xen] https://github.com/mirage/mirage-net-xen
[solo5] https://github.com/mirage/mirage-net-solo5
[ESP32] https://github.com/well-typed-lightbulbs/mirage-net-impl-esp32
[HTTP server]
https://github.com/mirage/ocaml-cohttp/tree/master/cohttp-mirage/src
[functoria] https://github.com/mirage/functoria
[mirage] https://github.com/mirage/mirage
[MirageOS] https://mirage.io
Thomas Gazagnaire then added
────────────────────────────
And here a few examples of how to use MirageOS:
• you want to have a total control on your runtime environment: you
can use mirage to build a very specialised OS that you can
statically link to your application. This removes the need an
underlying general purpose OS and produce small deployment images (a
few Mo) with low ressource consumptions (a few Mo), so you could
increase the density of your deployments. The images are also secure
as the attack surfaces is reduced, see for instance the [bitcoin
pinata].
• you want to build a "system" application (e.g. a firewall, a reverse
TCP/IP stack): you can pick the Mirage libraries that you need an
include these in your application. See for instance [VPNKit] or
[Qubes firewall].
[bitcoin pinata] http://ownme.ipredator.se/
[VPNKit] https://github.com/moby/vpnkit
[Qubes firewall]
http://roscidus.com/blog/blog/2016/01/01/a-unikernel-firewall-for-qubesos/
Perry E. Metzger also replied
─────────────────────────────
> Could you give a summary (or provide a link) what Mirage is and what
it is good for?
Perhaps as an outsider I can give a somewhat different summary.
Mirage is a library that acts as an operating system — it allows you
to construct an OCaml program that boots directly on top of a virtual
machine hypervisor by providing your program all the system services
it needs to boot on not-quite-bare metal. It has all the services you
would usually expect in an operating system, like a TCP/IP stack and
drivers and all the rest.
(The [Unikernel wikipedia page] gives some more explanation of the
approach.)
This lets you construct very small, very specialized machine images
where the entire stack is written in OCaml. If you want to build (say)
a very small, very secure system appliance (like a small firewall +
router), this is one cool way to do it. That said, you can in theory
build any sort of "boots on bare metal" system you like with it, just
as you can put any application you like on top of Unix. The limitation
is that everything runs in one address space, but that's also the joy
of it.
[Unikernel wikipedia page] https://en.wikipedia.org/wiki/Unikernel
Perry E. Metzger asked and Martin Lucina replied
────────────────────────────────────────────────
> How does Mirage handle multiple processors?
It doesn't; like most unikernels I've seen to date the design choice
is to remain single-core and use a cooperative scheduler. If you want
to scale out to multiple cores then the idea is you run multiple
instances of your unikernel, and the scheduling of unikernels to cores
is handled by the hypervisor (or other "host" system).
> Can Mirage boot on actual bare metal?
It can, but the only example I know of to date is the ESP32 port
([blog], [implementation]).
The OCaml runtime is extremely easy to re-target to anything and
requires only minimal C dependencies (see e.g. [ocaml-freestanding]),
so actual bare metal is mainly a question of writing the low-level
platform startup code, and then the actual hardware drivers you might
need (which can be in OCaml).
By the way, thank you for your summary write-up of Mirage. Sometimes
it's hard to explain to people as an insider what exactly a project is
good for.
[blog] https://www.lortex.org/esp32/
[implementation]
https://github.com/well-typed-lightbulbs/mirage-impl-esp32/
[ocaml-freestanding] https://github.com/mirage/ocaml-freestanding
Perry E. Metzger asked and Hannes Mehnert replied
─────────────────────────────────────────────────
> the Mirage repository have USB controller and similar drivers?
No, there isn't any USB (or other) drivers yet.
Just to clear up the wording here: there is no "mirage repository",
but being a library operating system, each MirageOS unikernel consists
of hundreds of OCaml libraries, all released to the opam-repository.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Other OCaml News
════════════════
From the ocamlcore planet blog
──────────────────────────────
Here are links from many OCaml blogs aggregated at [OCaml Planet].
• [opam 2.0.0 release and repository upgrade]
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
[OCaml Planet] http://ocaml.org/community/planet/
[opam 2.0.0 release and repository upgrade]
http://www.ocamlpro.com/2018/09/19/opam-2-0-0-release-and-repository-upgrade/
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/20180925/569a9ff9/attachment-0001.html>
-------------- next part --------------
--
OpenPGP Key ID : 040D0A3B4ED2E5C7
Monthly Athmospheric CO₂, Mauna Loa Obs. 2018-08: 406.99, 2017-08: 405.07
-------------- 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/20180925/569a9ff9/attachment-0001.pgp>
More information about the caml-news-weekly
mailing list