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.
27 Oct 2015
In the last
post,
I described a flat allocation profiler for OCaml 4.02 bytecode interpreter.
In this post, I’ll describe further developments which add support for call
stack information and better location information. Lets dive straight to the
usage:
23 Sep 2015
This post describes a simple flat allocation profiler for OCaml 4.02 bytecode
interpreter.
10 Sep 2015
I recently gave a talk on Algebraic Effects in OCaml at the OCaml Workshop
2015. The extended abstract and the
slides from the talk are available here. The slides
should provide a gentle introduction to programming with algebraic effects and
handlers in OCaml. The examples from the talk (and many more!) are available
here.
27 May 2015
In the previous
post, I
presented a simple cooperative multithreaded scheduler written using algebraic
effects and their handlers. Algebraic effects are of course useful for
expressing other forms of effectful computations. In this post, I will present
a series of simple examples to illustrate the utility of algebraic effects and
handlers in OCaml. Some of the examples presented here were borrowed from the
excellent paper on Eff programming language. All of the examples
presented below are available
here.
20 May 2015
Algebraic effects and handlers provide a modular abstraction for expressing
effectful computation, allowing the programmer to separate the expression of an
effectful computation from its implementation. In this post, I will present an
extension to OCaml for programming with linear algebraic effects, and
demonstrate its use in expressing concurrency primitives for multicore
OCaml. The design and
implementation of algebraic effects for multicore OCaml is due to Leo
White, Stephen Dolan and
the multicore team at OCaml
Labs.
25 Mar 2015
OPAM has a great compiler
switch feature that lets you
simultaneously host several OCaml installations, each with its own compiler
version and a set of installed packages. I wanted to use the power of opam
switch
for working with the experimental multicore
OCaml compiler. The key
advantage of doing this is that it lets you easily install packages from the
OPAM repository, while sandboxing it from other OCaml
installations on your system. The post will show how to create OPAM compiler
switch for multicore OCaml.