29 Mar 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 code that the hardware has to contend
with and protect exploits against. As a first step, we have managed to get OCaml
programs to run on directly on top of the Shakti processor running in simulation
under QEMU and Spike ISA simulators without an intervening operating system.
13 Sep 2018
Over the past few weeks, at OCaml Labs, we’ve deployed
continuous benchmarking infrastructure for Multicore
OCaml. Live results are available
at http://ocamllabs.io/multicore. Continuous
benchmarking has already enabled us to make informed
decisions about the
impact of our changes, and should come in handy over the next few months where
we polish off and tune the multicore runtime.
16 Aug 2018
Andrej Bauer and I are editing a special issue of JFP
on the theory and practice of algebraic effects and handlers. The CfP is below.
06 Jul 2017
I recently gave a talk on the internals of multicore OCaml GC at Jane Street
offices in NYC. The slides from the talk are available
online. But I felt that
the slides alone aren’t particularly edifying. This post is basically the slides
from the talk annotated with notes.
13 Jun 2017
We recently published a paper on concurrent system programming with effect
handlers. In this paper, we show
that with the help of effect handlers, we could express in direct-style,
various interactions of a concurrent program with OS services that typically
require callbacks. The question is what do we do about legacy code that uses
monadic concurrency libraries such as Lwt and Async. Surely a wholesale rewrite
of all Lwt and Async code is a no go. This post is an exploration of some ideas
to make Lwt and Async compatible with direct-style code.
05 Mar 2017
One of the key indicators of maturity of a language ecosystem is the ease of
building, managing and publishing software packages in that language. OCaml
platform has made steady progress in the last few years to this end. While
OPAM simplified package (and compiler) management,
the developing and publishing packages remained a constant pain point. This
situation has remarkably improved recently with the
Topkg and
Carcass. This post provides a short
overview of my workflow for building and publishing an OCaml package using Topkg
and Carcass.
15 Feb 2017
Ezirmin is an easy interface over the
Irmin, a library database for building
persistent mergeable data structures based on the principles of Git. In this
post, I will primarily discuss the Ezirmin library, but also discuss some of the
finer technical details of mergeable data types implemented over Irmin.
30 Jun 2016
Behavioural types such as session types, contracts and choreography describe the
behaviour of a software entity as a sequence of operations on a resource such
as a communication channel, web service session or a file descriptor.
Behavioural types capture well-defined interactions, which are enforced
statically with the help of type system machinery. In this post, I will describe
a lightweight embedding of behavioural types in OCaml using polymorphic variants
through a series of examples. The complete source code for the examples is
available
here.
11 Jun 2016
Efficient concurrent programming libraries are essential for taking advantage of
fine-grained parallelism on multicore hardware. In this post, I will introduce
reagents, a composable, lock-free
concurrency library for expressing fine-grained parallel programs on Multicore
OCaml. Reagents offer a
high-level DSL for experts to specify efficient concurrency libraries, but also
allows the consumers of the libraries to extend them further without knowing the
details of the underlying implementation.
16 May 2016
This is a short tutorial on how to build
Reason apps for an ARM target with the help
of Docker. I am using Docker for
Mac, which is
still under beta program. Using Docker for development has two important
advantages over traditional cross-compilation. First, the Reason toolchain comes
packaged as a Docker image and hence no local installation is necessary.
Secondly, cross-compilers are often tricky to get right. Docker for Mac comes
with multiarch support and hence removes the need for traditional
cross-compilation.