Typage

De Haskell.fr.
Aller à : Navigation, rechercher

Sommaire

Absence de typage, typage faible, typage fort

On peut classer le degré de typage des langages dans trois catégories :

Absence de typage

Le langage n'a pas de notion de type, ou n'admet qu'un unique type. Ces langages sont généralement de très bas niveau (assembleur) ou spécifiques à un domaine.

Typage faible

Un langage est dit faiblement typé s'il n'admet que peu de types différents qu'il autorise parfois à traiter l'un comme l'autre et/ou s'il autorise des conversions implicites entre ces types.

Dans des langages comme C, un caractère peut par exemple être traité comme un entier sans conversion nécessaire. Dans des langages comme Perl ou JavaScript, le langage se charge d'effectuer les conversions nécessaires de manière implicite.

Un typage faible peut ainsi faciliter la manipulation de valeurs dont les types ne correspondent pas exactement, mais ceci se fait au détriment de la sûreté des types, résultant possiblement en des erreurs potentiellement détectées à l'exécution, ou complètement ignorées.

Typage fort

Le typage fort interdit les conversions implicites : si le type d'un élément ne correspond pas au type attendu, c'est une erreur. Ceci permet de détecter de manière beaucoup plus fiable les erreurs, mais peut avoir l'inconvénient de rejeter des programmes qui devraient pouvoir être exécutés. Cependant, en pratique cela ne pose pas de problèmes.

Il faut également noter que le typage fort n'interdit en rien le polymorphisme, et les types polymorphes sont traités avec la même rigueur que les types concrets monomorphes.

Typage dynamique, typage statique

Ce deuxième critère de distinction des systèmes de types est orthogonal au premier.

Typage dynamique

Un typage dynamique associe des types aux valeurs à l'exécution. Ainsi, les vérifications de sécurité des types ne peuvent être effectuées que durant l'exécution du programme. Ainsi, un même élément syntaxique du code peut avoir plusieurs types différents à différents instants de l'exécution.

Pour les langages orientés objets, on parle également de typage canard pour désigner un système de typage où la sémantique dynamique d'un objet est définie par ses méthodes et attributs courants. Ces langages permettent donc de rajouter on d'enlever des méthodes ou attributs à un objet dynamiquement, et autorisent une utilisation polymorphe de ces objets à la condition qu'ils aient la méthode ou l'attribut désiré à l'instant de l'appel. Le nom de typage canard se réfère au fait que si un objet se déplace comme un canard et cancane comme un canard, alors on peut considérer que c'est un canard.

Il est à noter qu'Haskell inclue un module Data.Dynamic offrant un support au typage dynamique. Cela n'est nécessaire que si les types ne peuvent pas être connus à la compilation.

Des exemples de langages à typage dynamique sont Perl, PHP, Python ou Ruby.

Typage statique

Un système de types statique résout le type des valeurs avant l'exécution, généralement à la compilation.

Cette catégorie peut aussi être sous-divisée selon que le langage requiert des annotations de types explicites, comme en C++, C# ou Java, ou bien s'il dispose d'un système d'inférence de types lui permettant de trouver le type d'une valeur à partir du code, comme en Haskell ou dans les variantes de ML.

Outils personnels
Espaces de noms
Variantes
Actions
Navigation
Boîte à outils