En fait il y a typage et typage, et derrière ce mot il n'y a pas forcément les même notion.
Le premier niveau, celui que tout le monde connaît, consiste à décrire la manière dont la donnée est représentée en mémoire. int, string, void etc. Sur ce sujet, je pense que tout le monde est d'accord on ne fait pas de test :)
Le deuxième niveau, consiste à ajouter de l'information supplémentaire. Par exemple en C, int et unsigned int ont la même représentation mémoire, mais le fait d'avoir deux types différents permet (ou devrait permettre...) les erreurs bêtes. Il y a quelques années, un journal sur les types fantômes avait été posté, mais on peut imaginer des usages variés : par exemple une chaîne de texte (type string) ne donne pas d'information sur son contenu (encodage local, UTF-8 etc). En précisant cette information dans son type, on évite les erreurs bêtes d'encoder un texte qui l'est déjà. Et comme l'information est précisée au niveau du typage, cela est fait sans surcoût en mémoire, ni perte de performance à l'exécution, c'est le compilateur qui s'occupe de contrôler que les données sont adéquates.
Je prend autre un exemple : dans un arbre rouge noir, il y a des propriétés à respecter pour garantir que l'arbre soit équilibré. Ces propriétés ne sont pas liées à la données contenue dans chaque nœud, et l'on pourrait penser que cela n'est pas lié à notre propos. Sauf qu'avec des notions de typage avancé, on peut laisser le compilateur garantir que le programme utilise notre arbre de façon appropriée. Cela veut dire que le programme ne compilera pas si un nœud rouge est inséré sous un autre nœud rouge. Le développeur n'a pas besoin de faire de test sur ces propriétés, elle sont garanties par le code.
Cela ajoute de la complexité au code écrit, mais avec l'habitude, ça n'est pas un problème supplémentaire.
[^] # Re: Performance
Posté par chimrod (site web personnel) . En réponse au journal Moi, expert C++, j'abandonne le C++. Évalué à 8.
En fait il y a typage et typage, et derrière ce mot il n'y a pas forcément les même notion.
Le premier niveau, celui que tout le monde connaît, consiste à décrire la manière dont la donnée est représentée en mémoire.
int,string,voidetc. Sur ce sujet, je pense que tout le monde est d'accord on ne fait pas de test :)Le deuxième niveau, consiste à ajouter de l'information supplémentaire. Par exemple en C,
intetunsigned intont la même représentation mémoire, mais le fait d'avoir deux types différents permet (ou devrait permettre...) les erreurs bêtes. Il y a quelques années, un journal sur les types fantômes avait été posté, mais on peut imaginer des usages variés : par exemple une chaîne de texte (typestring) ne donne pas d'information sur son contenu (encodage local, UTF-8 etc). En précisant cette information dans son type, on évite les erreurs bêtes d'encoder un texte qui l'est déjà. Et comme l'information est précisée au niveau du typage, cela est fait sans surcoût en mémoire, ni perte de performance à l'exécution, c'est le compilateur qui s'occupe de contrôler que les données sont adéquates.Je prend autre un exemple : dans un arbre rouge noir, il y a des propriétés à respecter pour garantir que l'arbre soit équilibré. Ces propriétés ne sont pas liées à la données contenue dans chaque nœud, et l'on pourrait penser que cela n'est pas lié à notre propos. Sauf qu'avec des notions de typage avancé, on peut laisser le compilateur garantir que le programme utilise notre arbre de façon appropriée. Cela veut dire que le programme ne compilera pas si un nœud rouge est inséré sous un autre nœud rouge. Le développeur n'a pas besoin de faire de test sur ces propriétés, elle sont garanties par le code.
Cela ajoute de la complexité au code écrit, mais avec l'habitude, ça n'est pas un problème supplémentaire.