Définition
Un cadre de classification formel qui attribue des types aux expressions et spécifie des règles pour la combinaison des entités typées, visant à faire respecter des invariants, détecter des erreurs et guider la construction de programmes, statiquement ou dynamiquement.
Principe
Principe
Restreindre la composition : les types forment une discipline syntaxique et sémantique qui limite les opérations autorisées sur les valeurs, permettant de raisonner sur la correction et d'effectuer des vérifications automatiques (contrôle ou inférence de types).
Démonstration
Démonstration
Une règle de typage de fonction simple : de Γ ⊢ f : A → B et Γ ⊢ x : A infère Γ ⊢ f x : B ; un exemple est le typage map : (A → B) → Liste A → Liste B dans un système polymorphe.
Mauvaise application
Mauvaise application
Trop faire confiance au système de types pour garantir des propriétés sémantiques qu'il n'exprime pas (par ex. présumer qu'un type assure la terminaison ou la sécurité) ou concevoir des types excessivement restrictifs qui rejettent des programmes valides sans gain de sécurité proportionnel.
Conséquence
Conséquence
Lorsqu'il est bien choisi, un système de types fournit des garanties à la compilation (empêchant certaines classes d'erreurs à l'exécution), une documentation de l'intention, des opportunités d'optimisation et une base pour la vérification de programmes.
Inversion
Inversion
Approches non typées ou dynamiquement typées qui reportent la classification aux vérifications à l'exécution ou à la discipline du programmeur, offrant plus de flexibilité mais déplaçant certaines responsabilités de correction au moment de l'exécution.
Limite
Limite
Couvre la classification syntaxique et le contrôle statique/dynamique ; il ne détermine pas à lui seul la sémantique complète du programme, le comportement à l'exécution ou la décidabilité des tâches de vérification — cela dépend du choix de la discipline de typage et des règles associées.
Tension sémantique
Tension sémantique
Tension entre typage statique et dynamique, typage nominal et structurel, et entre systèmes de types expressifs (dépendants, sensibles aux effets) et systèmes plus simples et décidables favorisant l'inférence et le contrôle de types tractables.
Synthèse
Synthèse
Un système de types est un ensemble structuré de règles attribuant des types aux constructions de programme pour restreindre les compositions permises et capturer des invariants ; il cherche un équilibre entre expressivité, décidabilité et sécurité pratique pour offrir une détection précoce d'erreurs et guider l'assemblage correct du programme.