For me, any language that misses these two is not worth the effort unless you have really good reasons (i.e. every clock cycle counts in an embedded program).
Anyway, to that end, what is OCaml's packaging ecosystem like?
For me, any language that misses these two is not worth the effort unless you have really good reasons (i.e. every clock cycle counts in an embedded program).
Anyway, to that end, what is OCaml's packaging ecosystem like?
Composing and extending modules, passing modules as parameters to other modules and this way adapting the code to your need.
And the nice thing is that all the modules are evaluated at compile-time. Which means you don't have to sacrifice performance for modularity and still get a very flexible framework for Metaprogramming[1].
[1]: https://ocaml.org/learn/tutorials/modules.html#Functors
I've found it to be surprisingly reliable and easy to use.
OCaml modules are best of breed. Better than anything else. Nothing else even comes close.
They're weird and different from modules you'll see in other languages. Then after you get used to them you'll find those other modules are at best neutered and most likely severely broken versions of what you've come to know and love from OCaml (or any of the true MLs).
OCaml modules arise from a certain treatment of "existential types" which are, in a lot of ways, the very foundation of type abstraction. If you don't care about types practically, then you can care about them spiritually as a means of describing program interfaces. Existential types are maybe the very foundation of abstract program interfaces.
So, OCaml is at least 50% good. Opam is kind of nice, too.