Tarides Logo

Articles on ocaml

Discover our latest posts on #ocaml and explore related insights and stories.

Camel sitting on sand, adorned with colorful textiles.

Benchmarking OCaml projects with current-bench

Regular CI systems are optimised for workloads that do not require stable performance over time. This makes them unsuitable for running performance benchmarks. current-bench provides a predictable environment for performance benchmarks and a UI for analysing results over time. Similar to a CI system…

Gargi Sharma

Gargi Sharma

Software Engineer

Silhouette with light drawing of a camel on beach.

Recent and upcoming changes to Merlin

Merlin is a language server for the OCaml programming language; that is, a daemon that connects to your favourite text editor and provides the usual services of an IDE: instant feedback on warnings and errors, autocompletion, "type of the code under the cursor", "go to definition", etc. As we (Fréd…

Thomas Refis

Thomas Refis

Principal Software Engineer

Green code symbols on black background.

Building portable user interfaces with Nottui and Lwd

At Tarides, we build many tools and writing UI is usually a tedious task. In this post we will see how to write functional UIs in OCaml using the Nottui & Lwd libraries. These libraries were developed for Citty, a frontend to the Continuous Integration service of OCaml Labs. In thi…

Frédéric Bour

Frédéric Bour

Principal Software Engineer

Tree with bright red leaves and sunlight shining.

Irmin: September 2020 update

This post will survey the latest design decisions and performance improvements made to irmin-pack, the Irmin storage backend used by Tezos. Tezos is an open-source blockchain technology, written in OCaml, which uses many libraries from the MirageOS ecosystem. For more context on the design of irmin-…

Wooden file cabinet with labeled drawers.

Introducing irmin-pack

irmin-pack is an Irmin storage backend that we developed over the last year specifically to meet the Tezos use-case. Tezos nodes were initially using an LMDB-based backend for their storage, which after only a year of activity led to 250 GB disk space usage, with a monthly growth of 25 GB. Our goal …

Clément Pascutto

Clément Pascutto

Senior Software Engineer

Soft, white feathers with blurred background.

Fuzzing OCamlFormat with AFL and Crowbar

AFL (and fuzzing in general) is often used to find bugs in low-level code like parsers, but it also works very well to find bugs in high level code, provided the right ingredients. We applied this technique to feed random programs to OCamlFormat and found many formatting bugs. OCamlFormat is a tool …

Etienne Millon

Etienne Millon

Principal Software Engineer

Green tree icon next to magenta geometric figure.

Introducing the GraphQL API for Irmin 2.0

With the release of Irmin 2.0.0, we are happy to announce a new package - irmin-graphql, which can be used to serve data from Irmin over HTTP. This blog post will give you some examples to help you get started, there is also a section in the irmin-tutorial with similar information. To avoid writing …

Green hexagon with tree, text: "Irmin"

Irmin v2

We are pleased to announce Irmin 2.0.0, a major release of the Git-like distributed branching and storage substrate that underpins MirageOS. We began the release process for all the components that make up Irmin back in May 2019, and there have been close to 1000 commits since Irmin 1.4.0 released …

Black mailbox in grassy roadside, blurred background.

Mr. MIME - Parse and generate emails

We're glad to announce the first release of mrmime, a parser and a generator of emails. This library provides an OCaml way to analyze and craft an email. The eventual goal is to build an entire unikernel-compatible stack for email (such as SMTP or IMAP). In this article, we will show what is current…

Romain Calascibetta

Romain Calascibetta

Software Engineer

Silhouette of camels walking at sunset with mountains.

Decompress: Experiences with OCaml optimization

In our first article we mostly discussed the API design of decompress and did not talk too much about the issue of optimizing performance. In this second article, we will relate our experiences of optimizing decompress. As you might suspect, decompress needs to be optimized a lot. It was used by sev…

Romain Calascibetta

Romain Calascibetta

Software Engineer

Striped hammock, trees in background, warm lighting.

Decompress: The New Decompress API

RFC 1951 is one of the most used standards. Indeed, when you launch your Linux kernel, it inflates itself according zlib standard, a superset of RFC 1951. Being a widely-used standard, we decided to produce an OCaml implementation. In the process, we learned many lessons about developing OCaml where…

Romain Calascibetta

Romain Calascibetta

Software Engineer

Laptop keyboard with colorful lighting.

Release of OCamlFormat 0.10

We are pleased to announce the release of OCamlFormat 0.10 (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.9. ocamlformat-0.10 now works on the 4.08 AST, a…

Guillaume Petiot

Guillaume Petiot

Senior Software Engineer

Tree with sunlight peeking through green leaves.

On the road to Irmin v2

Over the past few months, we have been heavily engaged in release engineering the Irmin 2.0 release, which covers multiple years of work on all of its constituent elements. We first began Irmin in late 2013 to act as a Git-like distributed and branchable storage substrate that would let us escape th…

Grid of square, multicolored reflective tiles.

An introduction to OCaml PPX ecosystem

These last few months, I spent some time writing new OCaml PPX rewriters or contributing to existing ones. It's a really fun experience. Toying around with the AST taught me a lot about a language I thought I knew really well. Turns out I actually had no idea what I was doing all these years. All jo…

Nathan Rebours

Nathan Rebours

Senior Software Engineer

Large orange sand dune, clear sky, trees below.

Dune 1.9.0

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 addi…

Lucas Pluvinage

Lucas Pluvinage

Senior Software Engineer

Stone cathedral ceiling with four central beams.

Release of OCamlFormat 0.9

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: …

Guillaume Petiot

Guillaume Petiot

Senior Software Engineer

Row of mailboxes with numbers 14, 16, 18, 20, 28, 26.

Release of Base64

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,…

Romain Calascibetta

Romain Calascibetta

Software Engineer

Laptop keyboard, ejecting disc labeled "52x".

How configurator reads C constants

Dune comes with a library to query OS-specific information, called configurator. It is able to evaluate C expressions and turn them into OCaml value. Surprisingly, it even works when compiling for a different architecture. How can it do that? …

Etienne Millon

Etienne Millon

Principal Software Engineer

Colorful mesh pattern with green and red lights.

ocaml-git 2.0

I'm very happy to announce a new major release of ocaml-git (2.0). This release is a 2-year effort to get a revamped streaming API offering a full control over memory allocation. This new version also adds production-ready implementations of the wire protocol: git push and git pull now work very rel…

Romain Calascibetta

Romain Calascibetta

Software Engineer

Lines of colorful code on a screen.

OCamlFormat 0.8

We are proud to announce the release of OCamlFormat 0.8 (available on opam). To ease the transition from the previous 0.7 release here are some highlights of the new features of this release. The full changelog is available on the project repository. Precedence of options In the previous version you…

Guillaume Petiot

Guillaume Petiot

Senior Software Engineer

Historic courthouse, Arch, tall buildings, clear sky.

OCaml Workshop 2018

The OCaml Users and Developers Workshop brings together industrial users of OCaml with academics and hackers who are working on extending the language, type system and tools. OCaml 2018 was held on September 27th, 2018 in St. Louis, Missouri, USA, colocated with ICFP 2018. Check Tarides' talks: RFCs…

Romain Calascibetta

Romain Calascibetta

Software Engineer

Yellow sand dunes under clear blue sky.

Dune 1.2.0

After a tiny but important patch release as 1.1.1, the dune team is thrilled to announce the release of dune 1.2.0! Here are some highlights of the new features in that version. The full list of changes can be found in the dune repository. Watch mode When developing, it is common to edit a file, run…

Etienne Millon

Etienne Millon

Principal Software Engineer