Previous week Up Next week

Hello

Here is the latest OCaml Weekly News, for the week of May 16 to 23, 2017.

  1. New release of the Albatross compiler available via opam
  2. findlib-1.7.2
  3. v0.9 release of Jane Street packages
  4. From the OCaml discourse
  5. Other OCaml News

New release of the Albatross compiler available via opam

Archive: https://sympa.inria.fr/sympa/arc/caml-list/2017-05/msg00100.html

Helmut Brandl announced:
It is my pleasure to announce a new version of the compiler for the Albatross
programming language. It is available via ‘opam install alba’ (it requires ocaml
>= 4.03.0).

Alba is a language which allows static verification. In its current state it
supports inductive types, recursive functions, pattern matching, inductively
defined sets and relations and abstract data types. It can be used like coq to
define types and functions and prove properties about them. We claim that
Albatross is easier to use than coq and closer to mainstream languages so that
there is no steep learning curve.

The design of the language is an ongoing activity. Any comments, hints, issue
reports etc. are welcome. Its long term goal is to open software verification
for the masses.

A language description can be found at
https://www.gitbook.com/read/book/hbr/alba-lang-description.
      

findlib-1.7.2

Archive: https://sympa.inria.fr/sympa/arc/caml-list/2017-05/msg00106.html

Gerd Stolpmann announced:
I released findlib-1.7.2:

- support for termux (ygrek)
- the toplevel support is now also available as package findlib.top (Jeremie Dimino)
- (hopefully) support removal of packages in parallel
- the "num" library is now optional

See the project page for more information:

http://projects.camlcity.org/projects/findlib.html
      

v0.9 release of Jane Street packages

Archive: https://sympa.inria.fr/sympa/arc/caml-list/2017-05/msg00107.html

Jeremie Dimino announced:
I'm happy to announce the v0.9 release of Jane Street packages! This
release comes 13 months after the last stable one and is packed with a
ton of new stuff.

We are now releasing 94 packages, so 32 more than the previous
release. New packages cover a wide range of areas, such as shell
programming, web programming, standard libraries, Emacs hacking and
more.

Given its size and the increasing number of users, getting this
release out in opam was a challenge. Especially I thank Anil
Madhavapeddy for his help with the testing and fixing of reverse
dependencies.

All the packages are now in opam and the API documentation is
available on our website:

  https://ocaml.janestreet.com/ocaml-core/v0.9/doc/

We don't have public release notes for this release yet. However, we
are in the process of reviewing the past year of change logs and hope
to publish them online soon. In the meantime, here is a summary of
major changes and new features available in this release.

Simpler versioning
------------------

The first noteworthy change is the versioning scheme. We used to
assign version numbers based on our internal ones. However these
didn't make much sense outside of Jane Street, and especially there
was a huge gap between each releases. So we are now using a more
classic versioning scheme.

In order to keep version numbers going up, they had to be prefixed
with a 'v'. And because this release introduce a new standard library,
Base, with an API that is still under active development, the new
versions start with v0.9.0.

Faster and more portable builds
-------------------------------

This release is the first one to use Jbuilder [1], a new build system that
was initially designed to ease the publication of our packages. The
main consequences for users are:

- much faster compilation times. It has been observed that Jane Street
  packages such as Core are now 6 times faster to build and install

- improved portability. For instance packages whose code is portable
  build on Windows with nothing more than a working OCaml compiler

Regarding portability, this release introduces configurator [2], a small
but convenient package that helps finding out available system
features. We started using it systematically in packages where we have
C stubs.

[1] https://github.com/janestreet/jbuilder
[2] https://github.com/janestreet/configurator

Better compatibility with multiple versions of OCaml
----------------------------------------------------

Since the switch to ppx our packages used to be stuck with one version
of the compiler. This was due to our heavy use of ppx rewriters and to
the fact that each version of OCaml tends to break code using the
compiler libraries.

In this release all our ppx code is based on the
ocaml-migrate-parsetree [1] library. As a result our packages now
build with OCaml from 4.03 to 4.06.

There are still some issues related to ppx versioning that will need
one more round of refactoring to be solved.

[1] https://github.com/let-def/ocaml-migrate-parsetree

New lighter, portable and guilt free standard library
-----------------------------------------------------

This new release introduces Base [1], a wholesale replacement of the
standard library distributed with OCaml. It aims to provide better
standards and conventions, while only offering fully portable
features.

Base is still under active development, and work on the API is not yet
finished. However, it was initially developed mostly by reorganising
code from Core_kernel and it is the basis for all the Jane Street code
base, meaning that it is carefully reviewed and heavily tested. Using it
in old and new code is a breeze.

Note that to be fully portable Base doesn't expose IO
operations. These are provided by the companion Stdio library [2].

[1] https://github.com/janestreet/base
[2] https://github.com/janestreet/stdio

And more...
-----------

Following is a brief overview of the other new packages available in
this release, with more details available on their respective home
pages.

* Ppx_hash

Automatic generation of Hash functions from type expressions and type
definitions.

https://github.com/janestreet/ppx_hash

* Bin_prot shapes

An extension to bin_prot to check safe use of deserialization.

https://github.com/janestreet/bin_prot/tree/master/shape

* Incr_dom

A library for building dynamic webapps, using Js_of_ocaml.

https://github.com/janestreet/incr_dom

* Incr_map

Helpers for incremental operations on map like data structures.

https://github.com/janestreet/incr_dom

* Incr_select

Handling of large set of incremental outputs from a single input

https://github.com/janestreet/incr_select

* Virtual_dom

OCaml bindings for the virtual-dom library

https://github.com/janestreet/virtual_dom

* Shexp

Shexp was initially intended as a S-expression based shell to replace
bash in Makefile based build for Jane Street packages. However, this
project was superseded by Jbuilder. What's left is a nice process
monad allowing one to construct complex and typed process pipelines.
Shexp is still in its infancy but has already been successfully used
for various purposes.

https://github.com/janestreet/shexp

* Spawn

Essentially an improved version of Unix.create_process, implemented
using vfork on Unix, which is much more efficient than fork.

https://github.com/janestreet/spawn

* Posixat

Bindings to the various *at posix functions.

https://github.com/janestreet/posixat

* Ecaml

OCaml plugins for Emacs.

https://github.com/janestreet/ecaml

* Expect_test_helpers_kernel

Various helpers for writing expectation tests.

https://github.com/janestreet/expect_test_helpers_kernel

* Parsexp

Lighter S-expression parsing library, with a more consistent API and
better behaved in JavaScript.

https://github.com/janestreet/parsexp

* Cinaps

Trivial meta-programming a la expect-test.

More here: https://blogs.janestreet.com/trivial-meta-programming-with-cinaps/

https://github.com/janestreet/cinaps

* Ppx_optional

Match statements for zero allocation options.

https://github.com/janestreet/ppx_optional

* Sexp_pretty

A S-expression prettifying library.

https://github.com/janestreet/sexp_pretty

* Topological_sort

Single-module library that implements a simple topological-sort algorithm.

https://github.com/janestreet/topological_sort
      

From the OCaml discourse

The editor compiled this list:
Here are some links to messages at http://discuss.ocaml.org that may
be of interest to the readers.

- Hongbo Zhang talks about "About BuckleScript"
  https://discuss.ocaml.org/t/about-bucklescript/178
  
- Malcolm talks about "Pds - Makefiles and TOML files based build system"
  https://discuss.ocaml.org/t/pds-makefiles-and-toml-files-based-build-system/183

- Anil Madhavapeddy talks about "Cambridge Jbuilder demo/discussion: May 25th"
  https://discuss.ocaml.org/t/cambridge-jbuilder-demo-discussion-may-25th/195

- Vincent Balat talks about "About Ocsigen (Eliom, Js_of_ocaml, etc.)"
  https://discuss.ocaml.org/t/about-ocsigen-eliom-js-of-ocaml-etc/212

- Thomas Gazagnaire talks about "DataKit dev reports"
  https://discuss.ocaml.org/t/datakit-dev-reports/224

- Deokhwan Kim talks about "Translations of the Async code examples from RWO into Lwt"
  https://discuss.ocaml.org/t/translations-of-the-async-code-examples-from-rwo-into-lwt/225

- yallop talks about "ctypes 0.12.0"
  https://discuss.ocaml.org/t/ann-ctypes-0-12-0/255
     

Other OCaml News

From the ocamlcore planet blog:
Here are links from many OCaml blogs aggregated at OCaml Planet,
http://ocaml.org/community/planet/.

Proving a mem/map property
 http://blog.shaynefletcher.org/2017/05/proving-mem-map-property.html

New opam features: more expressive dependencies
 http://www.ocamlpro.com/2017/05/11/new-opam-features-more-expressive-dependencies/
      

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