• 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.

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

Private Release of Alt-Ergo 1.00 — OCamlPro (Mohamed Iguernelala), Jan 29, 2015

After the public release of Alt-Ergo 0.99.1 last December, it's time to announce a new major private version (1.00) of our SMT solver. As usual:

Quick Evaluation


A quick comparison between this new version and the previous releases is given below. Timeout is set to 60 seconds. The benchmark is made of 19044 formulas: (a) some of t…

Read more...

Weekly News — Caml Weekly News, Jan 27, 2015

  1. Detecting dead code, discovering a project's structure...
  2. new art made with ocaml
  3. Uutf 0.9.4
  4. otr 0.1.0
  5. Core Suite 112.06.02
  6. Other OCaml News

Fast vectorizable math functions approximations — GaGallium (Jacques-Henri Jourdan), Jan 26, 2015

How and why I designed my own approximated implementations of log, exp, sin and cos. The approximation error is quite small, and the functions are fast and vectorizable. For example, my logapprox function is 7.5x faster in tight loops than the icsi_log function, while being more precise.

Recently, I helped my wife optimizing some code doing simulations for her bio-statistics research project. Without going into details, her problem requires doing Bayesian inference using MCMC methods. T…

Read more...

Recursive Memoize & Untying the Recursive Knot — Xinuo Chen, Jan 25, 2015

When I wrote the section of When we need later substitution in Mutable, I struggled. I found out that I didn't fully understand the recursive memoize myself, so what I had to do was just copying the knowledge from Real World OCaml. Luckily, after the post was published, glacialthinker commented in reddit:

(I never thought before that a recursive function can be split like this, honestly. I don't know how to induct such a way and can't explain more. I guess we just learn it as it is a…

Read more...

Further OCaml GC Disharmony — Psellos, Jan 25, 2015

January 25, 2015

While working on an OCaml app to run in the iPhone Simulator, I discovered another wrapper code construct that looks plausible but is incorrect. I was able to reproduce the error in a small example under OS X, so I am writing it up for the record.

The error is in code that calls from Objective C into OCaml. In an OCaml iOS app these calls happen all the time, since events originate in iOS. You can imagine events being formed originally from an Objective C-like substance, then …

Read more...

Coq 8.5 beta 1 is out! — Coq, Jan 21, 2015

The first beta release of Coq 8.5 is available for testing. The 8.5 version brings several major features to Coq:
  • asynchronous edition of documents under CoqIDE to keep working on a proof while Coq checks the other proofs in the background (by Enrico Tassi);
  • universe polymorphism making it possible to reuse the same definitions at various universe levels (by Matthieu Sozeau);
  • primitive projections improving space and time efficiency of records, and adding eta-conversion for records (by …
Read more...

Securing the Unikernel — Thomas Leonard, Jan 21, 2015

Back in July, I used MirageOS to create my first unikernel, a simple REST service for queuing file uploads, deployable as a virtual machine. While a traditional VM would be a complete Linux system (kernel, init system, package manager, shell, etc), a Mirage unikernel is a single OCaml program which pulls in just the features (network driver, TCP stack, web server, etc) it needs as libraries. Now it’s time to look at securing the system with HTTPS and access controls, ready for deployment.

T…

Read more...

Left-recursive versus right-recursive lists in LR parsers — GaGallium (François Pottier), Jan 21, 2015

Contrary to top-down (LL) parsers, which do not support left recursion, bottom-up (LR) parsers support both left recursion and right recursion. When defining a list-like construct, a user of an LR parser generator, such as Menhir, faces a choice between these two flavors. Which one should she prefer?

Two considerations guide this choice: expressiveness (which flavor leads to fewer conflicts?) and performance (which flavor leads to a more efficient parser?).

In this post, I am mainly interested…

Read more...

Mutable — Xinuo Chen, Jan 21, 2015

mutable

While OCaml is a functional programming language and emphasises pure functional style, it allows mutable (variables and values) and hence imperative programming style. The reason is said in Real World OCaml:

Imperative code is of fundamental importance to any practical programming language, because real-world tasks require that you interact with the outside world, which is by its nature imperative. Imperative programming can also be important for performance. While pure code is quite effic…

Read more...

Brewing MISO to serve Nymote — Amir Chaudhry, Jan 20, 2015

The mission of Nymote is to enable the creation of resilient decentralised systems that incorporate privacy from the ground up, so that users retain control of their networks and data. To achieve this, we reconsider all the old assumptions about how software is created in light of the problems of the modern, networked environment. Problems that will become even more pronounced as more devices and sensors find their way into our lives.

We want to make it simple for anyone to be able to run a …

Read more...

Weekly News — Caml Weekly News, Jan 20, 2015

  1. ppx_monadic.1.0.2, ppx for monadic do, pattern guards and monadic comprehension
  2. Quizz
  3. ppx_deriving 2.0, ppx_deriving_yojson 2.3
  4. Detecting dead code, discovering a project's structure...
  5. ocamlnet-4.0.1
  6. new releases: pxp, webdav, cache, netamqp, wdialog
  7. Other OCaml News

Unikernels for everyone! — Amir Chaudhry, Jan 19, 2015

Many people have now set up unikernels for blogs, documenting their experiences for others to follow. Even more important is that people are going beyond static sites to build unikernels that provide more complicated services and solve real-world problems.

To help newcomers get started, there are now even more posts that that use different tools and target different deployment methods. Below are summaries of some of the posts I found interesting and that will make it easier for you try out d…

Read more...

Lenses in OCaml — Perpetually Curious (Tim McGilchrist), Jan 16, 2015

Lenses have been on my mind since encountering them last year in the context of Haskell. Much of the literature on lenses has a very Haskell slant so show how they can be used in OCaml.

The theory of lenses and their accompanying prisms and traversals, have been better described by other people. This article at FPComplete was a particularly good one. I’m just going to cover how to use ocaml-lens as a minimal lens implementation.

First since ocaml-lens isn’t in opam, clone the repo locally …

Read more...

Weekly News — Caml Weekly News, Jan 13, 2015

  1. Detecting dead code, discovering a project's structure...
  2. ocaml-imap.1.0
  3. llpp v21
  4. simplified BER MetaOCaml N102, for OCaml 4.02.1
  5. Static linking of ppx for iocamljs notebooks
  6. opam-installext
  7. Other OCaml News

Towards a governance framework for OCaml.org — Amir Chaudhry, Jan 08, 2015

The projects around the OCaml.org domain name are becoming more established and it’s time to think about how they’re organised. 2014 saw a lot of activity, which built on the successes from 2013. Some of the main things that stand out to me are:

  • More volunteers contributing to the public website with translations, bug fixes and content updates, as well as many new visitors — for example, the new page on teaching OCaml received over 5k visits alone. The increasing contributions are a r…
Read more...

About unboxed float arrays — LexiFi, Jan 08, 2015

This post is about the special representation that OCaml uses for arrays of floating point values. My claim is that this special representation is useful, but also harmful in some contexts. There are better alternatives that achieve the same benefits without the drawbacks.

If you are familiar about the OCaml representation of value and the special representation for arrays of floats, you can skip the first two sections.

read more

Full Time: Software Developer (Functional Programming) at Jane Street in New York, NY; London, UK; Hong Kong — GitHub Jobs, Jan 08, 2015

Software Developer (Functional Programming)

Jane Street is looking to hire great software developers with an interest in functional programming. OCaml, a statically typed functional programming with similarities to Haskell, Scheme, Erlang, F# and SML, is our language of choice. We've got the largest team of OCaml developers in any industrial setting, and probably the world's largest OCaml codebase. We use OCaml for running our entire business, supporting everything from research to systems admi…

Read more...

Omegle in N2O — Rudi Grinberg, Jan 06, 2015

Recently I’ve been messing around with a new and exciting web framework in erlang called N2O. This framework appeals to me for a few reasons. These include:

  • It’s lean. Clocking in around 4.5k lines, it’s small enough for me to read the source whenever I don’t understand something, and modify it to my liking if I ever find it inadequate. Just imagine doing any of that with something like Rails.

  • It’s powerful. Quite a bit can be accomplished with comparatively little code. The rest of …

Read more...

Weekly News — Caml Weekly News, Jan 06, 2015

  1. Universe Library for OCaml
  2. Anecdote about OPAM pinning
  3. ocamldep & compilation units
  4. Problem with GADTs and escaping types
  5. Other OCaml News

Detecting use-cases for GADTs in OCaml — Mads Hartmann, Jan 05, 2015

I've been interested in GADTs1 for quite some time now but I've had a hard time finding proper use-cases for them in my day-to-day programming tasks; this is not because GADTs aren't useful, they are, but rather that my understanding of them has been limited. I often experience this when I'm learning more advanced features of programming languages and I've found that I personally find it easier to grasp language features when I have a clear understanding of what kinds of problems they're meant …

Read more...

Senior Software Engineer at McGraw-Hill Education (Full-time) — Functional Jobs, Jan 05, 2015

This Senior Software Engineer position is with the new LearnSmart team at McGraw-Hill Education's new and growing Research & Development center in Boston's Innovation District.

We make software that helps college students study smarter, earn better grades, and retain more knowledge.

The LearnSmart adaptive engine powers the products in our LearnSmart Advantage suite — LearnSmart, SmartBook, LearnSmart Achieve, LearnSmart Prep, and LearnSmart Labs. These products provide a personalized learni…

Read more...

13 Virtues — Jane Street (David Powers), Jan 02, 2015

Very early on in his life, while on lengthy voyage from London to Philadelphia, Ben Franklin created a system of thirteen virtues to live his life by. He spent the remainder of his days giving special focus to one virtue per week in a 13 week cycle, as well as noting the virtues he failed to live up to at the end of each day.

Over time he credited the system with making him more productive and more fulfilled.

My aspirations are not so lofty, but in the spirit of the new year, I present Ben's thi…

Read more...

Immutable — Xinuo Chen, Jan 02, 2015

immutable

In pure functional programming, everything is immutable. Strings, lists, values of customised types etc cannot be changed once being created. For example, a list such as [1;2;3] does not have any operation that can alter its elements. If you want the stuff inside to be changed, you need to create a new list based on it. Suppose you want to change the first element of [1;2;3] to be 4, then you have to let new_list = 4::List.tl [1;2;3] or directly let new_list = [4;2;3], however, you don't have …

Read more...

Mirage 2014 review: IPv6, TLS, Irmin, Jitsu and community growth — Open Mirage (Anil Madhavapeddy), Dec 31, 2014

An action-packed year has flown by for Mirage, and it's time for a little recap of what's been happening and the plans for the new year. We announced Mirage 1.0 just over a year ago, and 2014 also saw a major 2.0 summer release and the growth of a developer community that have been building support for IPv6, Transport Layer Security, on-demand spawning, profiling and much more. There have been 205 individual library releases, 25 presentations, and lots of online chatter through the year,…

Read more...

Weekly News — Caml Weekly News, Dec 30, 2014

  1. Uucp 0.9.1
  2. Uuseg 0.8.0 Unicode Text Segmentation
  3. Other OCaml News

2014 — Gaius Hammond, Dec 28, 2014

So, how was 2014 for me, in tech at least? Pretty good. It has been quite an interesting experience adapting to an all-proprietary tech stack (database, language, IDE, job scheduler) but I feel I am finally getting a grip on how all the moving parts hang together and how the sum is greater than the whole of the parts. So, professionally, I’m pretty happy and I find out early next year how happy they are with me :-)

The systemd farce has prompted me, after nearly 20 years, to look at alternativ…

Read more...

Cryptokit 1.10 released — OCamlCore Forge News (Xavier Leroy), Dec 27, 2014

Includes full SHA-2 support (SHA-224/256/384/512) and fixes an incompatibility with OCaml trunk (4.03+dev).

Uuseg 0.8.0 — Daniel Bünzli, Dec 23, 2014

First release of Uuseg, Unicode text segmentation for OCaml.

LBFGS 0.8.6 released — OCamlCore Forge News (Christophe Troestler), Dec 23, 2014

LBFGS provides a method for minimization of multidimensional functions on bounded or unbounded domains. This version is compatible with OCaml 4.02 (new string syntax and Bytes module).

Weekly News — Caml Weekly News, Dec 23, 2014

  1. New release of Menhir (20141215)
  2. fold missing in string/bytes
  3. ppx_deriving 1.1, ppx_deriving_yojson 2.1
  4. LexiFi is hiring
  5. Other OCaml News

View older blog posts.