• en

OCaml Planet

The OCaml Planet aggregates various blogs from the OCaml community. If you would like to be added, read the Planet syndication HOWTO.

1134 blog posts are available. You can read the 30 more recent ones below or view older ones.

Learning ML Depth-First — Jane Street, Apr 17, 2019

If you haven’t heard of it, Depth First Learning is a wonderful resource for learning about machine learning.

The Mirage retreat: field trip report — GaGallium (Gabriel Scherer), Apr 15, 2019

Between March 6th and March 13th 2019, I attended the Mirage retreat organized by Hannes Mehnert in Marrakesh, Morocco.

The Mirage retreat takes place in an artist residency organized as a hostel (shared rooms with simple beds). Hannes gathers a lot of people whose activity is relevant to the Mirage project; some of them work within the OCaml ecosystem (but not necessarily Mirage), some work on system programming (not necessarily in OCaml). The whole place is for all of us for one week, ex…

Read more...

opam 2.0.4 release — OCamlPro, Apr 10, 2019

We are pleased to announce the release of opam 2.0.4.

This new version contains some backported fixes:

  • Sandboxing on macOS: considering the possibility that TMPDIR is unset [#3597 @herbelin – fix #3576]
  • display: Fix opam config var display, aligned on opam config list [#3723 @rjbou – rel. #3717]
  • pin:
    • update source of (version) pinned directory [#3726 @rjbou – fix #3651]
    • fix --ignore-pin-depends with autopin [#3736 @AltGr]
    • fix pinnings not installing/upgrading already pinned p…
Read more...

opam 2.0.4 release — OCaml Platform (Raja Boujbel - OCamlPro, Louis Gesbert - OCamlPro), Apr 10, 2019

We are pleased to announce the release of opam 2.0.4.

This new version contains some backported fixes:

  • Sandboxing on macOS: considering the possibility that TMPDIR is unset [#3597 @herbelin - fix #3576]
  • display: Fix opam config var display, aligned on opam config list [#3723 @rjbou - rel. #3717]
  • pin:
    • update source of (version) pinned directory [#3726 @rjbou - #3651]
    • fix --ignore-pin-depends with autopin [#3736 @AltGr]
    • fix pinnings not installing/upgrading already pinned packages (introduced in 2.0.…
Read more...

Dune 1.9.0 — Tarides (Lucas P.), Apr 10, 2019

Tarides is pleased to have contributed to the dune 1.9.0 release which introduces the concept of library variants. Thanks to this update, unikernels builds are becoming easier and faster in the MirageOS universe! This also opens the door for a better cross-compilation story, which will ease the addition of new MirageOS backends (trustzone, ESP32, RISC-V, etc.)

This post has also been posted to the Dune blog. See also the the discuss forum for more details.

Dune 1.9.0

Changes include:

  • Coloring …
Read more...

MirageOS Spring 2019 hack retreat roundup — MirageOS (Hannes Mehnert), Apr 03, 2019

MirageOS Spring Hack Retreat, Marrakesh 2019

Early March 2019, 31 MirageOS hackers gathered again in Marrakesh for our bi-annual hack retreat. We'd like to thank our amazing hosts, and everyone who participated on-site or remotely, and especially those who wrote up their experiences.

On this retreat, we ate our own dogfood, and used our MirageOS DHCP, recursive DNS resolver, and CalDAV unikernels as isolated virtual machines running on a PC Engines APU with FreeBSD as host system. The CalDAV s…

Read more...

OCaml on Baremetal Shakti RISC-V processor — KC Sivaramakrishnan, Mar 29, 2019

It has been 3 months since I joined IIT Madras and it has been good fun so far. Along with the members of the RISE group, we’ve initiated a project to build secure applications on top of secure extensions of the open-source Shakti RISC-V processor ecosystem. Unsurprisingly, my language of choice to build the applications is OCaml. Given the availability of rich ecosystem of libraries under the MirageOS library operating system for building unikernels, we hope to minimise the amount of unsafe C…

Read more...

Release of OCamlFormat 0.9 — Tarides (Guillaume P.), Mar 29, 2019

We are pleased to announce the release of OCamlFormat (available on opam). There have been numerous changes since the last release, so here is a comprehensive list of the new features and breaking changes to help the transition from OCamlFormat 0.8.

Additional dependencies

OCamlFormat now requires:

  • ocaml >= 4.06 (up from 4.04.1)
  • dune >= 1.1.1
  • octavius >= 1.2.0
  • uutf

OCamlFormat_Reason now requires:

  • ocaml >= 4.06
  • dune >= 1.1.1
  • ocaml-migrate-parsetree >= 1.0.10 (up from 1.0.6)
  • octav…
Read more...

MirageOS security advisory 01: netchannel 1.10.0 — MirageOS (Mindy Preston), Mar 21, 2019

MirageOS Security Advisory 01 - memory disclosure in mirage-net-xen

  • Module: netchannel
  • Announced: 2019-03-21
  • Credits: Thomas Leonard, Hannes Mehnert, Mindy Preston
  • Affects: netchannel = 1.10.0
  • Corrected: 2019-03-20 1.10.1 release

For general information regarding MirageOS Security Advisories, please visit https://mirage.io/security.

Background

MirageOS is a library operating system using cooperative multitasking, which can be executed as a guest of the Xen hypervisor. Virtu…

Read more...

opam 2.0 tips — OCaml Platform (Louis Gesbert - OCamlPro), Mar 12, 2019

This blog post looks back on some of the improvements in opam 2.0, and gives tips on the new workflows available.

Package development environment management

Opam 2.0 has been vastly improved to handle locally defined packages. Assuming you have a project ~/projects/foo, defining two packages foo-lib and foo-bin, you would have:

~/projects/foo
|-- foo-lib.opam
|-- foo-bin.opam
`-- src/ ...

(See also about computed dependency constraints for handling multiple package definitions with mutual co…

Read more...

Announcing Liquidity version 1.0 — OCamlPro, Mar 08, 2019

Liquidity version 1.0

We are pleased to announce the release of the first major version of the Liquidity smart-contract language and associated tools.

Some of the highlights of this version are detailed below.

Multiple Entry Points

In the previous versions of Liquidity, smart contracts were limited to a single entry point (named main). But traditionally smart contracts executions path depend strongly on the parameter and in most cases they are completely distinct.

Having different entry points a…

Read more...

Announcing MirageOS 3.5.0 — MirageOS (Hannes Mehnert), Mar 05, 2019

MirageOS 3.5.0 release

We are happy to announce our MirageOS 3.5.0 release. We didn't announce post 3.0.0 releases too well -- that's why this post tries to summarize the changes in the MirageOS ecosystem over the past two years. MirageOS consists of over 100 opam packages, lots of which are reused in other OCaml projects and deployments without MirageOS. These opam packages are maintained and developed further by lots of developers.

On the OCaml tooling side, since MirageOS 3.0.0 we did severa…

Read more...

Techelson, a test execution engine for Michelson — OCamlPro, Mar 05, 2019

We are pleased to announce the first release of Techelson, available here.

Techelson is a Test Execution Engine for Michelson. It aims at testing functional properties of Michelson smart contracts. Make sure to check the user documentation to get a sense of Techelson’s workflow and features.

For Liquidity programmers interested in Techelson, take a look at this blog post discussing how to write tests in Liquidity and run them using Techelson.

Techelson is still young: if you have problems…

Read more...

Signing Data for Smart Contracts — OCamlPro, Mar 05, 2019

Smart contracts calls already provide a built-in authentication mechanism as transactions (i.e. call operations) are cryptographically signed by the sender of the transaction. This is a guarantee on which programs can rely.

However, sometimes you may want more involved or flexible authentication schemes. The ones that rely on signature validity checking can be implemented in Michelson, and Liquidity provide a built-in instruction to do so. (You still need to keep in mind that you cannot store un…

Read more...

Accelerating Self-Play Learning in Go — Jane Street, Feb 28, 2019

At Jane Street, over the last few years, we’ve been increasingly exploring machine learning to improve our models. Many of us are fascinated by the rapid improvement we see in a wide variety of applications due to developments in deep learning and reinforcement learning, both for its exciting potential for our own problems, and also on a personal level of pure interest and curiosity outside of work.

Machining the ultimate hackathon prize — Jane Street, Feb 28, 2019

Jane Street is sponsoring this year’s MakeMIT hackathon, and we wanted to create a prize for the winners that would do justice to the maker spirit of the competition. As makers ourselves – it’s not unusual to find a “software” engineer here who hacks on FPGAs or who has a CNC machine at home – it felt natural to get our hands dirty.

Formal proof and analysis of an incremental cycle detection algorithm — GaGallium (Armaël Guéneau), Feb 12, 2019

As part of my PhD at Gallium, I have been working on formally proving OCaml programs using Coq. More precisely, the focus has been on proving not only that a program is functionally correct (always compute the right result), but also does so in the expected amount of time. In other words, we are interested in formally verifying the asymptotic complexity of OCaml programs.

In this blog-post, I’m happy to report on our latest endeavour: the verification of the correctness and (amortized) compl…

Read more...

What’s new for Alt-Ergo in 2018 ? Here is a recap ! — OCamlPro, Feb 11, 2019

After the hard work done on the integration of floating-point arithmetic reasoning two years ago, 2018 is the year of polymorphic SMT2 support and efficient SAT solving for Alt-Ergo. In this post, we recap the main novelties last year, and we announce the first Alt-Ergo Users’ Club meeting.

An SMT2 front-end with prenex polymorphism

As you may know, Alt-Ergo’s native input language is not compliant with the SMT-LIB 2 input language standard, and translating formulas from SMT-LIB 2 to…

Read more...

Learning a New Language — Gaius Hammond, Feb 10, 2019

Generally, every program I write, regardless of what useful thing it actually does, and regardless of what programming language it is written in, has to do certain things, which usually includes

  • Importing a library and calling functions contained within that library
  • Handling datatypes such as converting between strings and integers, and knowing when this is implicit or explicit, how dates and times work, and so on
  • Getting command line parameters or parsing a configuration file
  • Writing log messa…
Read more...

Release of Base64 — Tarides (Romain C.), Feb 08, 2019

MirageOS is a library operating system written from the ground up in OCaml. It has an impossible and incredibly huge goal to re-implement all of the world! Looking back at the work accomplished by the MirageOS team, it appears that's what happened for several years. Re-implementing the entire stack, in particular the lower layers that we often take for granted, requires a great attention to detail. While it may seem reasonably easy to implement a given RFC, a huge amount of work is often hid…

Read more...

Improving Tezos Storage : Gitlab branch for testers — OCamlPro, Feb 04, 2019

This article is the third post of a series of posts on improving Tezos storage.  In our previous post, we announced the availability of a docker image for beta testers, wanting to test our storage and garbage collector. Today, we are glad to announce that we rebased our code on the latest version of mainnet-staging, and pushed a branch mainnet-staging-irontez on our public Gitlab repository:

https://gitlab.com/tzscan/tezos/commits/mainnet-staging-irontez

The only difference with the previous po…

Read more...

Playing Atari Games with OCaml and Deep Reinforcement Learning — Jane Street, Feb 02, 2019

In a previous blog post we detailed how we used OCaml to reproduce some classical deep-learning results that would usually be implemented in Python. Here we will do the same with some Reinforcement Learning (RL) experiments.

Improving Tezos Storage : update and beta-testing — OCamlPro, Jan 30, 2019

In a previous post, we presented some work that we did to improve the quantity of storage used by the Tezos node. Our post generated a lot of comments, in which upcoming features such as garbage collection and pruning were introduced. It also motivated us to keep working on this (hot) topic, and we present here our new results, and current state. Irontez3 is a new version of our storage system, that we tested both on real traces and real nodes. We implemented a garbage-collector for it, that is …

Read more...

Tezos and OCamlPro — OCamlPro, Jan 29, 2019

A reflection on the new year… Today, Tezos is a global network and an open source project with developers spanning over five continents. In the inception of this project, the French company OCamlPro which, to this day, stills develops numerous projects around Tezos, played a particularly important role. Indeed, they were the first home of the research engineers who laid down the cornerstone of the code base, in tight collaboration with Arthur Breitman and the architect of the project, and …

Read more...

L2 Regularization and Batch Norm — Jane Street, Jan 29, 2019

This blog post is about an interesting detail about machine learning that I came across as a researcher at Jane Street - that of the interaction between L2 regularization, also known as weight decay, and batch normalization.

opam 2.0.3 release — OCaml Platform (Raja Boujbel - OCamlPro, Louis Gesbert - OCamlPro), Jan 28, 2019

We are pleased to announce the release of opam 2.0.3.

This new version contains some backported fixes:

  • Fix manpage remaining $ (OPAMBESTEFFORT)
  • Fix OPAMROOTISOK handling
  • Regenerate missing environment file


Installation instructions (unchanged):
  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)

    or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run opam init --reinit -ni to enable san…

Read more...

Deprecating file releases on the forge — OCamlCore Forge News (Sylvain Le Gall), Jan 18, 2019

As part of the deprecation plan for forge.ocamlcore.org, the ability to upload files to the forge will soon be deprecated. Projects will not have the ability to create new releases. I will keep the current uploaded files and will continue to serve them. Here is what will change, once the deprecation will be done: - files will be moved to a new static host: https://download.ocamlcore.org - all links in the "Files" section will point to an URL https://download.ocamlcore.org - statistic…Read more...

Coq 8.9.0 is out — Coq, Jan 18, 2019

The 8.9.0 release of Coq is available.

It features many quality-of-life improvements, including goal differences as well as numeral and custom notations. For details, see the CHANGES file.

Feedback and bug reports are extremely welcome.

Improving Tezos Storage — OCamlPro, Jan 15, 2019

Running a Tezos node currently costs a lot of disk space, about 59 GB for the context database, the place where the node stores the states corresponding to every block in the blockchain, since the first one. Of course, this is going to decrease once garbage collection is integrated, i.e. removing very old information, that is not used and cannot change anymore (PR720 by Thomas Gazagnaire, Tarides, some early tests show a decrease to 14GB ,but with no performance evaluation). As a side note, thi…

Read more...

A tutorial for building web applications with Incr_dom — Jane Street, Jan 15, 2019

At Jane Street, our web UIs are built on top of an in-house framework called Incr_dom, modeled in part on React’s virtual DOM. Rendering different views efficiently in response to changes made to a shared model is a quintessentially incremental computation—so it should be no surprise that Incr_dom is built on top of Incremental.

View older blog posts.