KC Sivaramakrishnan Assistant Professor @ IIT Madras

Ezirmin : An easy interface to the Irmin library

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.

Behavioural types

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.

Lock-free programming for the masses

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.

Armed with Reason

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.

Profiling the stack

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:

An Allocation Profiler for OCaml Bytecode Interpreter

This post describes a simple flat allocation profiler for OCaml 4.02 bytecode interpreter.

Experiment with OCaml Multicore and Algebraic Effects

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.

Pearls of Algebraic Effects and Handlers

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 language1. All of the examples presented below are available here.

Effective Concurrency with Algebraic Effects

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.

Opam Switch to Multicore OCaml

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.