Having suffered through C++ for several years, and having enjoyed writing SML/NJ, the syntax doesn't bother me at all.
My big problem with OCaml is that the ecosystem is insanely poorly documented, and, if I understand this right (I am definitely not an OCaml expert), fractured. E.g., there's a lot of buzz about Jane Street's library, but, as far as I can tell, your code uses only their library or the built-in one, but not both. There's also several different build systems (ocamlbuild and ocaml-make spring to mind), and it's not clear to me which is preferred, nor how to deal with the fact that interesting-looking libraries seem split on which to use, meaning I'm guessing I need to somehow glue the systems together. There are several libraries for unicode support, but again, I don't know which (if any) is the "normal" one, and various libraries appear to use different unicode support libs, so I have no idea whether they can safely be mixed in a single application. And then there's this whole GODI thing, which appears to be kind of like RVM or perlbrew, but kind of its own thing. And so on.
What I'd love is a well-written, super-opinionated guide that says, "Okay, use ocamlbuild for building, use Jane Street's Async lib for multitasking, use GODI to manage your system and here's how you do that, grab this Unicode library, and you'll be good to write stuff that other people can easily use and maintain."
I know, and I'm tepidly excited, but I'd had high hopes for Practical OCaml, too, and ended up being sorely disappointed. There's lots of good reasons to believe that Real World OCaml will be a totally different beast, but I'm trying to hold my enthusiasm until we get a bit closer to when it ships.
While I agree that C++ templates when used for anything but simple type generalization, are a gross, gross part of C++. I'd hardly call that core to the C++ syntax.
However, I'd also argue that using templates to that extent is misuse. Eventually, it becomes a better idea to simplify your approach, or invest in a decent macro preprocessor.
I for instance feel that many of the template heavy boost libraries, while powerful, only decrease maintainability of a system in the long-run.
While I agree that C++ templates when used for anything but simple type generalization, are a gross, gross part of C++. I'd hardly call that core to the C++ syntax.
You're welcome to feel that way, but template abuse is simply a given with 99% of the C++ that crosses my screen these days. It's pervasive in Boost, it's pervasive in the STL (especially in C++11), it's pervasive in libraries like ATL and WTL. You can write C++ that avoids these parts of the language, but you are in the distinct minority in doing so. I think my complaint about C++ syntax is fair.
I'd hardly call the STL, ATL, or WTL particularly heinous abuses of the template system.. And the syntax, is in general, pretty reasonable... Boost on the other hand...
My big problem with OCaml is that the ecosystem is insanely poorly documented, and, if I understand this right (I am definitely not an OCaml expert), fractured. E.g., there's a lot of buzz about Jane Street's library, but, as far as I can tell, your code uses only their library or the built-in one, but not both. There's also several different build systems (ocamlbuild and ocaml-make spring to mind), and it's not clear to me which is preferred, nor how to deal with the fact that interesting-looking libraries seem split on which to use, meaning I'm guessing I need to somehow glue the systems together. There are several libraries for unicode support, but again, I don't know which (if any) is the "normal" one, and various libraries appear to use different unicode support libs, so I have no idea whether they can safely be mixed in a single application. And then there's this whole GODI thing, which appears to be kind of like RVM or perlbrew, but kind of its own thing. And so on.
What I'd love is a well-written, super-opinionated guide that says, "Okay, use ocamlbuild for building, use Jane Street's Async lib for multitasking, use GODI to manage your system and here's how you do that, grab this Unicode library, and you'll be good to write stuff that other people can easily use and maintain."