Les points que Grimur soulève sont vrais, mais ils relèvent plus de la convenance personnelle que des limites du langage :
- C'est vrai, la bibliothèque standard est assez peu fournie, même s'il y a des efforts dans ce sens. Mais Core et Batteries (et d'autres, comme Containers) sont des projets qui pallient tout à fait ce manque. On peut être insatisfait du double effort (encore qu'à part pour des raisons de principe, ça ne gêne en pratique personne) ou du fait qu'il faille installer un paquet supplémentaire (mais bon, qui en 2016 programme quelque chose d'un minimum conséquent uniquement avec la stdlib de son langage ?), mais ce n'est pas une limitation en soi.
- C'est effectivement un peu pénible de devoir écrire
+.
pour additionner deux flottants, mais :
- Si on ne travaille qu'avec des flottants, on
open Float
et c'est réglé
- Les modules implicites qui finiront bien par arriver dans le trunk règlent ce problème d'une façon élégante (en gros, comme haskell, mais en mieux )
- En attendant, c'est nécessaire pour l'inférence de types. Concrètement, par rapport aux langages que les gens d'ici ont l'habitude d'utiliser (comme Java ou Python), c'est un petit mal pour un plus grand bien (pas besoin d'écrire les types, le typeur les devine tout seul, et c'est fait à la compilation).
- Dans tous les cas, ce n'est encore pas une limitation à proprement parler du langage, juste un léger inconfort quand on écrit un programme qui utilise beaucoup entiers et flottants (à titre personnel, ça ne m'est jamais arrivé).
- L'impératif en OCaml est effectivement moins agréable à utiliser que le style fonctionnel, et un peu plus lourd que dans des langages pensés avant tout pour l'impératif comme Python. Mais rien n'oblige à programmer en impératif, et si vraiment on en a besoin, c'est encore un inconfort plus qu'une limitation (c'est quelques
!
à rajouter, rien de plus).
Qu'on soit bien clairs : OCaml n'est évidemment pas un langage parfait, il a ses défauts. Ça n'en reste pas moins un excellent langage, même si les goûts personnels de chacun peuvent le porter à moins apprécier certaines de ses caractéristiques.
Pour répondre tout de même à la question d'Unknown, OCaml est à l'origine un langage créé par des chercheurs, pour leurs recherches (pour la petite histoire, c'était initialement un langage qui a été créé pour pouvoir implémenter un autre langage, Coq). Ça veut dire plusieurs choses :
- L'état de la recherche en France étant ce qu'il est, c'est un projet qui a bénéficié de beaucoup moins de financements que quelque chose comme Java ou Python.
- Pendant longtemps, les mainteneurs du langage se préoccupaient peu du confort d'utilisation par des programmeurs lambda : le but était d'utiliser le langage pour faire de la recherche, et les efforts de maintenance supplémentaires pour que d'autres gens puissent s'en servir ne correspondaient pas à cet objectif.
- La recherche et la science attirant peu de monde (combien de personnes persistent encore à ne voir l'informatique que comme un outil ?) et se préoccupant peu de communications, la communauté d'utilisateurs est longtemps restée très faible.
Ces trois défauts sont maintenant très nettement moins importants qu'il y a une vingtaine d'années, et de nombreux efforts sont faits dans ce sens, mais les choses mettent du temps à évoluer. La principale "limitation" qui en découle est que le nombre de librairies disponibles en OCaml est plus faible que dans les autres langages. Selon le domaine dans lequel tu travailles, ça peut être un problème (par exemple, il n'y a à ma connaissance pas grand chose pour faire de la vision par ordinateur), ou pas du tout (par exemple, puisque c'est une question qui revient souvent, on a un très bon framework Web en OCaml). Quant à la communauté, elle est faible, mais particulièrement active : c'est en pratique facile de trouver de l'aide rapidement à n'importe quel niveau.
Pour compléter, même si c'est certainement très loin de tes préoccupations, OCaml n'est pas adapté pour écrire des systèmes temps réel avec des très fortes contraintes de réactivité. Pour des systèmes embarqués avec des ressources très limitées, ça va être aussi un peu compliqué. Cela dit, c'est deux domaines de niche où le C++ et le C règnent actuellement de fait en maître, et si tu poses ce genre de question, c'est très peu probable que tu aies ces besoins, OCaml restant un langage avec d'excellentes performances (bien meilleures que Python, par exemple).