Y'a la critique de la lib standard, soit, mais elle revient très souvent donc c'était pas forcément la peine de le répéter
, et moi je préfère une lib standard petite mais principalement fonctionnelle à la lib .Net.
Je ne trouve pas. Comme je l'ai dit, rien que la gestion des strings est très décevante. Plus d'une fois je me suis retrouvé à écrire une fonction qui devrait dans la lib de tout langage.
Par ailleurs, dès que tu as un besoin particulier, il est probable que tu ne trouveras pas la bibliothèque qu'il te faut, juste parce que la communauté est petite. Avec F#, il n'y a pas ce genre de problème, parce qu'il a accès aux lib .NET. Essaie d'écrire mettons un MMORPG en Caml, tu comprendras...
Je considère surtout que F# peut directement concurrencer Java et C#, ce que Caml ne peut pas faire.
Ensuite, la surcharge, je suis de ceux qui sont contre dans le cas général, ça crée des confusions, par contre pour les opérateurs standard, là si tu y tiens, ça se fait en 2 lignes de p4.
Euh non. Le préprocesseur ne te donnera jamais de surcharge. Compare le C et le C++ : l'apport de la surcharge me semble flagrant (même s'ils en ont abusé en C++). Surcharger les opérateurs de base +, *, - apporte beaucoup en général.
Il ne faut bien sûr pas abuser de la surcharge (au risque d'affaiblir le typage), mais en utiliser un peu améliore grandement le langage. Je trouve ça dramatique de devoir nommer ses fonctions *_int, *_float, *_string, etc. Ce genre de notation est vraiment néfaste.
Dans F#, la surcharge est assez peu utilisée dans la bibliothèque standard, mais c'est très agréable. En F#, il y a plusieurs types d'entiers (int8, int16, int, int64...) et de flottants (float, float32), en plus des bignums. Heureusement que chaque fonction n'existe pas en 10 exemplaires ! Heureusement qu'il n'y a pas 10 opérateurs d'addition !
La surcharge peut aussi être utilisée dans les types que l'on déclare, et c'est plutôt pas mal. Si tu déclares un type complexe (mauvais exemple, il existe déjà), tu pourras avoir ton opérateur +, au lieu d'un vague complex_add.
Ce qui nous mène au point primordial suivant : pas de f#p4.
Oui, et c'est dommage.
Mais d'une part, il est rarement utilisé dans les projets - il sert principalement pour étendre le langage dans les bibliothèques. En pratique, il sert souvent à combler les manques du langage (à moins que tu aies des exemples concrets d'application ?). Par exemple, ajouter le "finally" dans un "try".
D'autre part, F# a d'autres fonctionnalités que je n'ai pas décrites en détail, mais qui apportent beaucoup (listes en compréhension, les active patterns (qui permettent entre autre de faire du pattern-matching avec des expressions rationnelles ou du pattern matching sur du XML[1]), syntaxe basée sur l'indentation, affichage générique des variables, augmentation de types (pour ajouter des membres aux types non-objets), introspection...). Donc oui, les deux langages ont leurs avantages et inconvénients. Aucun n'est vraiment meilleur partout, mais F# a maintenant ma préférence.
Et puis, moi quand j'ai besoin de faire un programme certes pas le plus rapide mais avec de très bonnes performances quand même, j'hésite rarement à le faire en ocamlopt plutôt qu'en C. F# pose un problème de perfs quand on utilise beaucoup le style fonctionnel (et ça n'est pas la faute du langage, juste la vm .Net qui n'est pas du tout faite pour).
Et pourtant... Sous Windows, F# a des performances comparables à celles d'ocamlopt. Avec Mono, c'est en effet un peu plus lent. Si les performances de F# ne te suffisent pas en moyenne, j'ai peur que tu doives te mettre à coder en assembleur.
http://cs.hubfs.net/forums/thread/3196.aspx
http://caml.inria.fr/pub/ml-archives/caml-list/2007/03/68d6be8afe6d2e5e290e2c68e536f79e.en.html
Tu parles de menhir, il faut voir qu'il n'est pas encore totalement au point, qu'il n'a pas les mêmes perfs qu'ocamlyacc donc il n'est pas ntégrable tout de suite, et puis il utilise un système de types trop expressif qui l'oblige à générer du caml non typable (donc avec des casts).
D'accord, c'est dommage. Beaucoup de gens le conseillent et je l'apprécie. L'utilisation des Obj.magic, tant que c'est vérifié (et même si c'est très moche), ne devrait pas être un problème dans une bibliothèque.
Quant à l'argument "c'est moins bien sous windows"... ben j'ai eu à faire du caml sous windows, j'ai simplement mis un emacs pour avoir le mode tuareg, et c'est fin
En utilisant des bibliothèques extérieures à la distribution standard ? En faisant un projet avec plusieurs fichiers ?
Moi aussi, j'ai souvent utilisé Emacs. C'est un excellent éditeur, mais c'est loin d'être parfait en tant qu'environnement de développement.
Et puis ocaml, c'est gratuit, c'est libre, emacs et tuareg, c'est gratuit, c'est libre, ...
C'est vrai.
F# est gratuit, n'est pas tout à fait libre, mais les sources sont fournies et on peut les modifier. Personnellement, j'ai fait quelques bug-reports et j'ai envoyé des patches, j'ai toujours eu une réponse favorable dans les 24h. F# n'a rien à voir avec C#, par exemple. Il est bien plus ouvert.
il est très facile de critiquer ocaml dans pas mal de domaines, mais tu es passé à côté :
Comme... ?
En tout cas, merci pour ton commentaire.
[1] Pour les détails sur les active patterns, je conseille ce papier :
http://blogs.msdn.com/dsyme/attachment/2044281.ashx