Interesting OCaml Articles

I have published a blog post about the OCaml release process: Testing OCaml releases with opamcheck.

3 Likes

Found on Lobste.rs: Mark Karpov writes yet another Haskell vs. OCaml for old time’s sake. I found it worth a read and a mention here.

p.s. He spends a bit of time in the intro lamenting the lack of a conventional Unicode string library for OCaml, and I feel that pain acutely, especially since I’m the author of an unconventional one, i.e. the Ucs_text module in my Orsetto project.

2 Likes

Not really an article, but interesting to see the performance comparison using multicore OCaml

1 Like
2 Likes
3 Likes

Anyone who’s been following this blog probably saw this coming:

It’s an interesting read and hopefully can be used as constructive criticism in order to improve the state of the OCaml ecosystem.

4 Likes

A bit tough to read but he hasn’t said anything unfamiliar.

I’m trying to put myself in his position and wondering what I’d do differently. Probably the biggest thing is I’d use js_of_ocaml based adapters to call into Node.js libs to fill in ecosystem needs, rather than considering the much more laborious work of binding C or Rust libs.

1 Like

I’d like to know what about Lwt the author struggled with. The model it provides is not very unique or different from what many developers already do with Node.Js.

For improving our documentation, what if we made it clear on ocaml.org that we’re looking for more documentation and a clear process on how to get your docs onto ocaml.org? Sometimes I have a free weekend and now I think I could use that to write docs but it’d be nice to know if I write it, it will make it to someplace useful rather than just a blog post.

2 Likes

I wonder if the real deal-breaker was the GCE APIs. I mean, everything else is workable – just takes a little coding. I suppose (not having looked) that the GCE APIs are exposed via GRPC – and that’s a non-starter right now in OCaml, sooo …

2 Likes

My current thinking on documentation is to note each tutorials existence on ocamlverse, but house the actual tutorial as a heavily commented example program (maybe using https://github.com/lindig/lipsum), residing directly within the library that it’s documenting in an additional “tutorials” directory of the package. That addresses the code rot problem without adding a lot of complexity to the ocamlverse implementation, since the library author can build the tutorial source as part of regular CI.

1 Like

I think as a community if we want good docs we’ll also have to come to terms with how diverse Ocaml programmers are. At the very least, Lwt and Async. Also Core vs Batteries vs containers. There are various reasons to prefer one over the other but those reasons are likely not important to a new user.

1 Like

Followup to yesterday’s article:

2 Likes

Re: more documentation/tutorials, this has been mentioned here before but I’d like to +1 both using asciinema and uploading them to asciinema.org.

Example, this simple tutorial on installing opam on Ubuntu:
https://asciinema.org/a/36250

Briefly: asciinema is a tool that records your terminal. You just run (e.g.) asciinema rec bash and it produces a very space efficient, copy-and-pasteable video that you can upload to asciinema.org or host yourself. After years of struggling to follow along in YouTube tutorials which have blurry console screens this is a breath of fresh air.

4 Likes

Funny that I took the opposite journey as Dark as regards F# versus OCaml. In various ways I also prefer F# - I think the syntax is a little cleaner and having access to the .NET standard library and ecosystem is obviously useful. Mailboxes are nice too for concurrent programming! But I don’t like having to butt up against the OO system all the time while I’m trying to think functionally (I felt the same way with Clojure many moons ago) and the experience with implementing anything non-trivial on Linux with .NET Core was not fun. Constant DLL hell when trying to develop with a Postgres driver, for example.

I do think the Darklang posts raise some good points. I am also surprised that they found Lwt tricky to use, or they found functorized hashtables difficult. Ergonomically I find them absolutely perfect as soon as you’ve created your desired module from the functor.

4 Likes

The only major GCP API I can think of that only speaks GRPC is Cloud Bigtable. All of the big ones like GCE, Spanner, GCS and Datastore, also speak HTTP with JSON encoded data.

The blog post specifically mentions the lack of a spanner library. I think some of the challenges to developing one are that the API surface is quite large, and testing it would cost money.

To be honest, both OCaml and F# are a poor choice for a cross-platform language. First has many obstacles on Windows platforms while the second - on anything besides Windows. Rust, on the other hand, is the first class citizen everywhere.

3 Likes

The cross platform story for F# should get better now that dot net core is the primary dot net version that’s used everywhere. After reading this post I tried setting up F# on a Mac and it was quick and easy to get up and running (with decent editor setup via LSP + neovim).

2 Likes

butt up against the OO system

This exactly… The least bad option for me for using other ecosystems backend libraries is probably ocaml talking to golang libraries. I haven’t looked up whether this actually is possible currently

I can’t compare OCaml to F# here–I’ve never used F#–but when I was learning OCaml, I read through the description of the Jane Street maps/hashes etc. and kind of ran screaming. The online docs for the JS maps were even scarier. Yes, partly it’s that I was coming from Clojure, where you can just throw anything into a map, because it’s dynamically typed and maps are designed that way. But still … I thought, I know it’s harder with OCaml because it needs to be type safe, but still there has to be a better way. So it wouldn’t surprise me if F# maps were easier to understand.

Biggar’s description of the F# ecosystem reminds me of Clojure. Maybe in some nearby possible world OCaml-Java could have played a similar role. Or maybe, per @mbacarella: