Quel langage choisir ?
Deux visions principales s'affrontent : le typage statique (OCaml, Haskell, F#) et le typage dynamique (Scheme, Lisp). Le choix est souvent difficile, mais nous allons tenter de vous donner quelques pistes qui devraient vous éclairer :
typage inféré statiquement
- points forts:
- permet de détecter de nombreuses incohérences dès la compilation et, donc, des erreurs potentielles du développeur;
- ajoute une documentation implicite à l'aide des types de la fonction;
- assure, dans le cas de nombreux langages aux typages inférés statiquement, qu'une erreur de typage est impossible à l'exécution.
- points faibles:
- peut être particulièrement contraignant et peut nécessiter de développer des mécanismes peu élégant ou lourd pour que le programme soit accepté par le système de typage;
- certaines fonctions sont mathématiquement et sémantiquement correctes mais ne sont pas typables, bien qu'en général, elles ne soient pas vraiment utilisées en pratique et soient plutôt des cas d'école;
- de manière plus terre à terre, limite la possibilité d'utiliser la surcharge de fonction ou d'opérateur (le polymorphisme pouvant cependant largement compenser ce problème).
typage dynamique
- points forts :
- assure une grande souplesse dans le développement des fonctions, le domaine et l'image de la fonction n'ayant pas de contraintes.
- permet de développer et de tester des morceaux de code incomplets (très efficace pour le prototypage).
- ces langages excellent souvent dans la réflexivité et l'introspection, c'est-à-dire la capacité de se regarder et de s'auto-modifier.
- points faibles
- impose une conception sans faille au risque de ne jamais retrouver une erreur faite durant le développement;
- même si une erreur est détectée, le déverminage peut s'avérer très fastidieux.
En résumé, un système de typage inféré offre une fiabilité et une sécurité supplémentaire, en plus d'une documentation implicite. Cependant, ceci se fait au prix d'une certaine rigidité. Le jeu en vaut probablement la chandelle, surtout pour un débutant qui aura un guide pour développer. Un développeur expérimenté peut cependant trouver des avantages dans un système de type plus souple qui lui impose moins de contraintes et moins de
pirouettes pour obtenir le résultat. C'est particulièrement vrai lors d'une approche basée sur des prototypes où on ne sait pas encore tous les éléments constituants d'une fonction.
Partager