Typage fort

Un article de Wikipédia, l'encyclopédie libre.

En informatique, un langage de programmation est dit fortement typé lorsqu'il garantit que les types de données employés décrivent correctement les données manipulées. Par opposition, un langage sans typage fort est dit faiblement typé.

Depuis son invention, le terme de typage fort a été employé avec de nombreux sens contradictoires, ce qui lui a enlevé presque toute signification. La liste qui suit rassemble quelques affirmations possibles sur le typage fort, avec des exemples de langages fortement typés et respectant le critère et des contre-exemple de langages tout aussi fortement typés mais ne respectant pas le critère :

  1. Un langage est fortement typé si le type de donnée est associé au nom de la variable, plutôt qu'à sa valeur. Si le type est attaché à la valeur, le langage est faiblement typé. Exemple : Java. Contre-exemple : OCaml, qui est généralement considéré comme encore plus fortement typé que Java.
  2. Un langage est fortement typé si le compilateur est capable de déceler des erreurs de typage. Si les erreurs de typage ne sont reconnues qu'à l'exécution, le langage est faiblement typé. Exemple : OCaml. Contre-exemple : Scheme.
  3. Un langage est fortement typé si la compilation ou l'exécution peuvent détecter des erreurs de typage. Si ces erreurs ne sont jamais reconnues, le langage est faiblement typé.
  4. Un langage est fortement typé si les conversions implicites de types sont formellement interdites. Si de telles conversions sont possibles, le langage est faiblement typé. Exemple : OCaml. Contre-exemple : Haskell, qui est généralement considéré comme encore plus fortement typé que OCaml.
  5. Un langage est fortement typé si les conversions entre types doivent être explicitement décrites. Si des conversions implicites sont utilisées, le langage est faiblement typé. Exemple : OCaml.
  6. Un langage est fortement typé si aucun mécanisme du langage ne permet de passer outre les interdits de trans-typage. Si ces mécanismes existent, comme le transtypage (appelé cast en anglais) en langage C, le langage est faiblement typé. Exemple : Haskell.
  7. Un langage est fortement typé s'il possède un typage complet, alliant des types simples et des types composés. S’il n'a que quelques types, ou seulement des types simples ou scalaires, le langage est faiblement typé.
  8. Un langage est fortement typé si le type de ses données est fixe et ne peut varier pendant la durée de la vie de l'objet. Si le type d'une donnée peut changer, le langage est faiblement typé. On appelle cela le typage dynamique.
  9. Un langage est fortement typé si le système de typage fournit de fortes garanties sur le comportement à l'exécution du programme avant cette exécution. Si les garanties fournies par le système de typage ne sont pas fortes, ce langage est au mieux faiblement typé.

Quelques unes de ces définitions sont contradictoires.

Parce qu'il n'y a pas de définition claire de ce qui est fortement typé ou non, il est possible de trouver des instructions dans un langage qui le rendent tour à tour fortement typé ou faiblement typé. Ainsi dans les définitions 1, 7 et 8, le langage C est fortement typé, tandis que selon les définitions 4, 5, et 6, il est faiblement typé — en laissant le débat ouvert pour les points 2 et 3 puisque C permet des vérifications pour les types composés, mais pas pour les listes ou les types scalaires. Il est donc facile de trouver des gens convaincus que le 'C' est fortement typé, et tout aussi facile d'en trouver qui affirmeront qu'il est faiblement typé.

Ainsi, un expert en langages de programmation, Benjamin C. Pierce, raconte :

« J'ai passé quelques semaines à essayer de clarifier les terminologies "fortement typé", "statiquement typé", "sûr", etc., et j'ai trouvé cela extraordinairement difficile... L'utilisation de ces termes est si diverse qu'elle les rend presque inutiles. »