For those interested, some of the underlying libraries that make up Docker for Mac (and, I think, Windows) are written in OCaml (or have components written in OCaml): VPNKit[0], DataKit[1] and HyperKit[2] (qcow2 support is implemented in OCaml).<p>0: <a href="https://github.com/moby/vpnkit" rel="nofollow">https://github.com/moby/vpnkit</a><p>1: <a href="https://github.com/moby/datakit" rel="nofollow">https://github.com/moby/datakit</a><p>2: <a href="https://github.com/moby/hyperkit" rel="nofollow">https://github.com/moby/hyperkit</a>
Ocaml, in comparison to other functional statically typed languages has had many successful Unix applications.<p>For a great tour of going to Ocaml (from Python), see Thomas Leonard's blog.<p>A retrospective is here but read the whole lot.<p><a href="http://roscidus.com/blog/blog/2014/06/06/python-to-ocaml-retrospective/" rel="nofollow">http://roscidus.com/blog/blog/2014/06/06/python-to-ocaml-ret...</a>
I'm contributing to a linker written in ~OCaml [1], and now I understand writing systems code in OCaml is really a bad idea. It makes things more complicated when you really don't want them to be. As James Mickens says [2]:<p>>You can’t just place a LISP book on top of an x86 chip and hope that the hardware learns about lambda calculus by osmosis.<p>[1]: <a href="https://github.com/rems-project/linksem" rel="nofollow">https://github.com/rems-project/linksem</a>
[2]: <a href="http://scholar.harvard.edu/files/mickens/files/thenightwatch.pdf" rel="nofollow">http://scholar.harvard.edu/files/mickens/files/thenightwatch...</a>
Only somewhat related,but I've tried to learn ocaml before but have never been able to figure out when to put what kind of delimiters where. Can anyone recommend a resource that explains the usage of the double comma and the like?
For some real world applications take a look at libguestfs <a href="http://libguestfs.org" rel="nofollow">http://libguestfs.org</a>, a library that can inspect, mount, edit VM filesystem images. Also includes tools for p2v and v2v migration.
I think one major turn off, especially for systems programming, was the lack of multicore threading support (i.e. it had no way to get parallelism using threads). Does anyone know if this has changed?
You really don't want to use the Unix module directly. If you're serious about system programming in OCaml, use Lwt or Async to allow for concurrency.