Donc parce qu'un peu moins d'un tiers du livre apprend à utiliser une librairie, on brûle le tout ?
Bon déjà, j'ai jamais dit qu'on devait tout brûler. J'ai toujours dit qu'il fallait utiliser une autre source que le RWO donc merci de ne pas caricaturer mon propos.
Et alors ? La syntaxe de Caml Light n'est pas compatible avec celle d'OCaml non plus, pourtant il me semble qu'on est tous les deux d'accord pour dire que ça n'est pas une raison pour jeter LLC. Où est la logique ?
Ensuite, c'est la syntaxe d'OCaml qui n'est pas compatible avec celle de Caml-light. Et c'est de cela dont il est question, c'est que tu peux tout autant prendre la majorité des exemples du LLC et les utiliser avec utop ce qui en fait encore aujourd'hui un livre de référence (bien entendu, cette assertion devient de plus en plus fausse avec le temps, notamment avec Stream
récemment). La logique est qu'après la mise à jour de Core avec les PPX, les exemples d'RWO deviennent invalides - et ce topic en est la preuve.
L'incompatibilité devrait plus être dénoncé avec RWO et Core qu'avec le LLC et les ajouts dans OCaml. Et c'est bien ce que je dénonce.
Les guerres de clocher ne m'intéressent pas du tout, et la discussion « oui mais non Core c'est pas du vrai caml, les vrais utilisent batteries et lwt » non plus. Mon propos est que RWO et LLC sont tous les deux des bons ouvrages, qui sont complémentaires et certainement pas en concurrence, et que tes arguments pour critiquer RWO sont entre un peu bancaux et à la limite du ridicule (RWO demande de « se mettre à jour avec le langage », vraiment ?)
La vrai question, c'est pas de savoir si on fait du vrai OCaml avec Lwt ou avec Async, la question est surtout de savoir si il est normal de considérer que le vrai OCaml se fait avec Async - et c'est cette opinion que tente de défendre RWO en expliquant comment faire de la programmation asynchrone en OCaml avec Async (et donc en omettant Lwt).
LLC est bien plus proche de ce qu'est Caml car il se limite à Caml. Le livre ne fait mention d'aucunes librairies tierces et d'extra fait pas je ne sais qu'elle personne ou entreprise et présente Caml dans sa version la plus canonique - en somme, on a besoin uniquement de Caml pour lire ce livre (et par extension, d'OCaml). Et c'est là qu'intervient le problème car, non le vrai OCaml n'est ni Lwt, ni Async. Le vrai OCaml, c'est uniquement OCaml (toute sa distribution).
Ensuite, on peut amener la personne à utiliser des outils extérieurs à la distribution initiale d'OCaml et c'est notamment ce que fait RWO avec menhir
. Mais encore faut il que dans le vrai monde d'OCaml tout le monde s'accorde à dire que si tu souhaites créer un parser, tu utilises menhir
. Et pour le coup, c'est le cas - personne n'utilise ocamlyacc
et on essaye même d'intégrer se que produit menhir
dans OCaml. Donc pour ce coup, RWO ne se trompe pas. Mais pour le 1/3 du livre qui semble négligeable pour toi (mais qui ne l'est pas, c'est quand même 1/3 du livre), on considère que Core et Async sont les outils de bases pour développer en OCaml alors que ce n'est pas le cas - et c'est même pas en considérant que la norme est d'utiliser Lwt, c'est juste considérer que ce n'est pas le cas.
Ce n'est pas une question de savoir qui a raison entre utiliser Lwt/Async Core/Batteries, c'est surtout de savoir si ce livre a raison de présenter des outils qui (et tu ne pas le nier) ne font l'unanimité dans la communauté OCaml. Et donc non, il a tort. Ce livre devrait présenter OCaml (de part son nom) mais il présente OCaml selon Jane Street ce qui est complétement différent et c'est ce que je dénonce.
Bien sûr que si, ça devrait être le cas. Depuis quand on est censé se contenter d'une seule source ? C'est d'ailleurs exactement la même chose pour LLC.
Non ce n'est pas la même chose, LLC à l'époque était suffisant pour apprendre Caml. Bien entendu, aujourd'hui, il n'est plus suffisant pour apprendre OCaml alors on pourrait croire que RWO est suffisant pour apprendre OCaml mais ce n'est pas le cas. Il est quand même aberrant de dire qu'il faut à la fois lire le LLC (qui a plus de 20 ans) et le RWO qui est beaucoup plus récent. D'une certaine manière, c'est que le RWO ne fait pas son boulot de présenter OCaml tel qu'il est et qu'on a besoin d'une source tierce pour comprendre les erreurs et les pièges de ce livre.
Le LLC était suffisant pour savoir faire du Caml et tu pouvais bien entendu étendre ton apprentissage avec d'autres sources mais en aucun cas il contredisait les autres sources comme c'est le cas avec RWO en montrant List.Assoc.find
comme une fonction disponible dans OCaml de base alors que c'est List.assoc
qui est disponible de base. Si le livre expliquait bien qu'il existe d'autres librairies et que les fonctions qu'il explique dans le chapitre II sont à prendre en compte comme des ajouts de Core (et donc bien séparé ce qui appartient au monde OCaml et ce qui appartient au monde de Jane Street), il n'y aurait rien à redire.
Le problème, c'est que ce n'est pas le cas et donc dès que tu sors du monde de RWO (donc un monde sans Core et sans Async) et c'est ce qu'il risque d'arriver vu l'état de la communauté OCaml, tu penses avoir le bagage nécessaire pour programmer en OCaml ? La vérité est que non, il faut que tu ré-apprennes l'utilisation d'ocamlbuild
(à défaut d'avoir toujours utiliser corebuild
), il faut que tu découvres ce qu'est réellement la librairie standard d'OCaml (à défaut de n'avoir appris que Core), et il faut que tu ignores ce que tu as appris à propos d'Async parce que le standard selon la communauté, c'est Lwt.
Donc pour un livre qui se nomme REAL WORLD OCaml, c'est tout de même paradoxal!