Faux sentiment de sécurité . Ça n'a pas de sens.
Quelques types de base . OCaml a maintenant des octets et des tableaux d'octets mais pas de chaînes Unicode intégrées, d'entiers 16 bits, d'entiers non signés, de flottants 32 bits, de vecteurs ou de matrices. Des bibliothèques tierces en fournissent certaines.
Débordement d'entier silencieux . Inchangé mais ce n'était jamais un problème.
Immuabilité du module . Sa recommandation que les fonctions et les modules devraient être mutables est un sombre retour à Lisp et une très mauvaise idée. Vous pouvez remplacer les modules en utilisant include
si vous le souhaitez, mais vous ne pouvez pas les muter, bien sûr.
Le polymorphisme provoque des erreurs de type au moment de l'exécution . C'est un gros problème avec OCaml et il n'a pas été corrigé. À mesure que vos types évoluent vers l'égalité polymorphe, la comparaison et le hachage commencent à échouer lorsqu'ils rencontrent des types tels que des fonctions et le débogage du problème est très difficile. F # a une excellente solution à ce problème.
Pas de macros . Ironiquement, quand il a écrit cet OCaml avait en fait un support complet pour les macros, mais ils ont maintenant décidé de retirer la fonctionnalité.
Emballages . C'était un vrai problème et il n'a pas été résolu. Il n'y a toujours pas de try ... finally
construction dans le langage OCaml et aucun wrapper l'implémentant dans stdlib.
Des lieux . Inchangé mais sans problème.
Enregistrer l'enfer de nommage sur le terrain . Structurez correctement votre code à l'aide de modules.
Syntaxe . Inchangé mais sans problème.
Pas de polymorphisme . C'était surtout un non-sens quand il l'a écrit et rien n'a changé.
Ensembles de fonctions incohérents . OCaml n'a toujours pas de cons
fonction. C'est très bien. Je ne veux pas de trucs Lisp dans ma langue, merci.
Pas de variables dynamiques . C'était une bonne chose à propos d'OCaml. C'est toujours une bonne chose à propos d'OCaml.
Les arguments facultatifs sont nulles . Arguments optionnels rock. J'ai harcelé Microsoft pour lui faire ajouter des arguments facultatifs à F #.
Incohérence partielle de l'application d'argument . Eh?
Lisibilité de l'arithmétique . Cela a changé depuis que j'ai cessé d'utiliser OCaml il y a environ 8 ans. Apparemment, vous pouvez maintenant le faire Int64.((q * n - s * s) / (n - 1L))
.
Résolution silencieuse des conflits de noms . Il essayait de faire un développement logiciel complet dans le REPL comme vous le feriez dans Lisp. Ne faites pas cela dans OCaml. Utilisez les fichiers et la compilation par lots ayant recours au REPL uniquement pour les tests, l'exécution de code jetable et l'informatique technique interactive.
Ordre d'évaluation . C'était mal quand il l'a écrit. L'ordre d'évaluation n'est pas défini dans OCaml.
Aucun objet entrée / sortie . Il a cité une bibliothèque tierce qui avait déjà résolu ce "problème".
Le compilateur s'arrête après la première erreur . Eh?
Aucune trace de pile pour les exécutables compilés en mode natif . Fixé.
Le débogueur craint . Je n'ai jamais utilisé le débogueur. La vérification de type statique attrape presque tous mes bogues.
GC craint . J'ai trouvé que le GC d'OCaml était superbe à l'exception d'un problème majeur: le verrouillage global empêche la programmation parallèle.
Pas de déclarations directes implicites . La récursion mutuelle est explicite par conception dans tous les ML. La seule bizarrerie est que les type
définitions sont récursives par défaut tandis que les let
liaisons sont non récursives par défaut.
La fonction ronde est absente . OCaml a toujours un stdlib simple mais des bibliothèques tierces comme Jane St's Core fournissent round
et amis.
Listes . List.map
n'est toujours pas récursif de queue. J'ai soumis des correctifs pour corriger de graves bogues comme celui-ci et j'ai dû attendre des années avant qu'ils n'apparaissent dans les versions. Les listes sont toujours immuables, bien sûr. Et ils devraient l'être.
La vitesse . Je crois que les temps de compilation pour les grandes variantes polymorphes ont été corrigés.
Correspondance de motif . Un triomphe d'espoir sur la réalité. La communauté Lisp n'a pas réussi à le faire. D'où ma 10ème règle: tout programme Lisp suffisamment compliqué contient une implémentation ad hoc, spécifiée de manière informelle et contenant des bogues de la moitié du compilateur de correspondance de modèle d'OCaml.
mais vous pouvez appeler la jolie imprimante du niveau supérieur en tant qu'appel de bibliothèque, en lui donnant les informations de type nécessaires. Et il y avait une macro que vous pouvez utiliser pour annoter les structures de données afin d'avoir de jolies imprimantes générées automatiquement.