I'm not a big OCaml user, have used it on occasion for a few small projects and I liked it, but from what I remember, I think a few things are missing from this list if OCaml wants to obtain widespread adoption.
1. Really good unicode support
2. A dead simple high quality package manager i.e. bundler, mix, cargo.
I'd also add built-in concurrency primitives i.e. (Channels in Go, Processes in Erlang), though this probably isn't a must have currently, but will surely only become more important as time progresses into the multicore future.
Yes, but I just think unicode support is so pervasive its not something you should really leave up to a library in 2016. Still this is just my biased opinion as a developer who needs it on virtually every project.
Finally, the title contains "widespread adoption". There is no modern language on the Tiobe Index top 20 without those two characteristics except for possibly MATLAB and C# which both don't have good package managers as far as I know, but I could be wrong since I've never used either one of them.
Anyway, I'd like to see ML get more adoption. I think fixing these things are more fundamentally important than some others such as web frameworks, etc...
I agree with you completely on #1. Without built in support, people screw up Unicode. They either won't use it at all, or they won't use it in all the places it's needed, and by the time it becomes a problem, it's a big problem.
On #2, I disagree. The effort required to make the pull request is a small fraction of the effort required to make a library worth adding to Opam. At the same time, it's enough effort that it should prevent the NPM problem of a million stupid "libraries" for 2 line functions.
I'm in the same boat as a lot of people here, in that I think OCaml looks great except for a few big shortcomings that they've ignored for a long time (unicode, multi-threading, etc.) that end up being deal killers for me. As I put it in another thread a while back, it's not even that I need the missing functionality all the time, it's that they refuse to add any of it for as long as possible.
OCaml 4.03 will have a minimal UChar type and module, that
will allow various Unicode libraries to agree on a common type: https://github.com/ocaml/ocaml/pull/80
According to the author of one of the Unicode libraries that is the only thing the compiler should distribute by default, and I agree with that, otherwise you need everything that comes with Unicode too to make it useful: normalization, segmentation, etc.
If an application needs that it can link with the unicode library, having it separate from the compiler means features and updates can be implemented faster.
It can be worthwhile to bless a set of libraries. Even if it seems like it can be done unofficially, it helps to have it done "officially", at least, from the point of view of a newcomer to the language. Haskell's getting some mileage out of that sort of thing, lately, starting with the "Haskell Platform" and lately moving into Stack, a blessed set of packages that are maintained in certain snapshot sets and guaranteed to compile together.
Shouldn't #1 be out of the box these days? You'd hope it'd be included in the standard library. Do any of the standard library sets available for OCaml (e.g. Core, Batteries, etc...) have Unicode support?
1. Really good unicode support
2. A dead simple high quality package manager i.e. bundler, mix, cargo.
I'd also add built-in concurrency primitives i.e. (Channels in Go, Processes in Erlang), though this probably isn't a must have currently, but will surely only become more important as time progresses into the multicore future.