Présentation
EnglishRÉSUMÉ
Le typage dans les langages de programmation garantit l’absence de calculs erronés qui seraient dus à des opérations manipulant des données non-conformes. Cette vérification peut s’effectuer à l’exécution (typage dynamique) ou à la compilation (typage statique) et accroît la sûreté d’exécution des programmes. Le typage permet aussi de s’abstraire de la représentation des données pour faciliter la composition des éléments d’un programme tout en apportant un bon niveau de flexibilité grâce aux différentes classes de polymorphisme (paramétrique, ad hoc, sous-typage). Chaque langage de programmation possède sa propre discipline de typage afin d’assurer sûreté, abstraction et flexibilité des programmes.
Lire cet article issu d'une ressource documentaire complète, actualisée et validée par des comités scientifiques.
Lire l’articleAuteur(s)
-
Emmanuel CHAILLOUX : Professeur, Sorbonne Université
-
Romain DEMANGEON : Maître de conférences, Sorbonne Université
-
Michel MAUNY : Directeur de recherche, Inria
INTRODUCTION
En programmation, un type de données ou, plus simplement, un type, est un ensemble de données partageant des propriétés et des opérations. Par exemple, dans le langage C, le type int des entiers contient les nombres positifs ou négatifs représentables sur un nombre fixe de bits, qui peut dépendre de l’architecture du processeur (souvent 32 ou 64). Ces entiers peuvent être arguments ou résultats d’opérations arithmétiques. Le langage OCaml fournit un type bool ne contenant que les deux valeurs de vérité true et false, qui peuvent être testées (par une construction conditionnelle if−then−else), ou être résultats de fonctions à valeurs booléennes.
MOTS-CLÉS
DOI (Digital Object Identifier)
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Présentation
2. Sûreté d’exécution
2.1 Erreurs d’exécution
Certains programmes dont l’algorithme est correct peuvent entraîner des comportements non voulus au moment de l’exécution. Dans un langage permissif, en l’absence totale de typage, ces comportements peuvent résulter en une erreur matérielle : ces erreurs, déclenchées au niveau du processeur, signalent une mauvaise utilisation de celui-ci. Par exemple, considérons le code C suivant qui réalise une allocation mémoire à l’adresse p2, puis cherche à accéder à l’adresse mémoire p1 suivant directement celle de p2 ; exécutée sur certains processeurs (par exemple sur les architectures ARM, MIPS, IBM System/360, qui sont exigeantes sur l’alignement mémoire, contrairement aux architectures x86), cette action provoque une erreur matérielle (bus error) d’accès à une adresse « non-alignée », car le bus qui relie le processeur à la mémoire ne peut lire ou écrire directement des adresses qui ne sont pas multiples de 4 octets.
int alignement(){
int *p1;
char *p2;
p2 = malloc(sizeof(int) + 1); // p2 est alignée
p1 = (int *) ++p2; // p1 est non alignée
*p1 = 42;
return 0;
}
Une autre erreur matérielle est l’accès à une adresse mémoire qui ne correspond pas à une zone autorisée. Cette erreur peut avoir des causes variées.
Par exemple, la fonction boucle du programme C ci-dessous commence par s’appeler elle-même : les appels successifs vont inonder la pile jusqu’à son débordement (Stack Overflow), conduisant finalement à une lecture en dehors de la mémoire autorisée pour cette zone, conduisant le processeur à déclencher une erreur de segmentation (Segmentation Fault).
int boucle(){
boucle();
return 0;
}
Enfin, un autre exemple d’erreur matérielle est la manipulation, par des opérations arithmétiques, de valeurs qui ne sont pas des nombres.
Par exemple, le code C suivant stocke en mémoire le résultat...
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive
Sûreté d’exécution
BIBLIOGRAPHIE
-
(1) - MILNER (R.) - A theory of type polymorphism in programming. - J. Comput. Syst. Sci (1978).
-
(2) - WRIGHT (A.K.) - Polymorphism for imperative languages without imperative types. - Technical Report TR93-200, Rice University Dept. of Computer Science (1993).
-
(3) - PIERCE (B.) - Types and Programming Languages MIT Press. - (2002).
DANS NOS BASES DOCUMENTAIRES
ANNEXES
-
Type abstrait (Wikipedia) : https://fr.wikipedia.org/wiki/Type_abstrait
-
Polymorphisme (Wikipedia) : https://fr.wikipedia.org/wiki/Polymorphisme_(informatique)
-
Sûreté du typage (Wikipedia en anglais) : https://en.wikipedia.org/wiki/Type_safety
-
Langages des exemples :
-
OCaml : https://ocaml.org/
-
Swift : https://swift.org/
-
Java : https://www.java.com/
-
JavaScript : https://fr.wikipedia.org/wiki/JavaScript
-
C (Wikipedia) : https://fr.wikipedia.org/wiki/C_(langage)
-
Cet article fait partie de l’offre
Technologies logicielles Architectures des systèmes
(240 articles en ce moment)
Cette offre vous donne accès à :
Une base complète d’articles
Actualisée et enrichie d’articles validés par nos comités scientifiques
Des services
Un ensemble d'outils exclusifs en complément des ressources
Un Parcours Pratique
Opérationnel et didactique, pour garantir l'acquisition des compétences transverses
Doc & Quiz
Des articles interactifs avec des quiz, pour une lecture constructive