Sémantique formelle des langages de programmation Université Kasdi Merbah Ouargla Département Mathématique et informatique Introduction et notions générales sur les langages de programmation et les logiciels Master informatique académique Février 2013 1
Chapitre 1 : Introduction et notions générales 1. Le logiciel Caractéristique d un logiciel Qualités exigées d un logiciel Approches nouvelles de programmation 2. Les langages de programmation La programmation Le langage de programmation comme application Description des langages de programmation Syntaxe formelle Sémantique formelle Approches de programmation paradigme de programmation 3. Compilation /Interprétation 2
1- Le logiciel Caractéristique d un logiciel Un logiciel : un ensemble de programmes et de règles relatives à un traitement de l information. un logiciel est considéré comme un produit manufacturé (cad astreint aux exigences de tout produit): qualité, coût et délai de réalisation. Génie logiciel (ingénierie de logiciel) : adopter une démarche qui consiste à étudier certaines contraintes «en particulier au niveau des langages de programmation» qui rendent la production du logiciel moins cher et plus fiable. 3
Qualités exigés d un logiciel I Elles sont liés aux éléments supportés par le langage de programmation : Facilité d expression, de lisibilité, et de compréhension Maintenance aisée et moins coûteuse «importance économique, coût de la maintenance 75%» Réutilisation «avec ou sans modification» Efficacité des codes obtenus : capacité des codes, rapidité d exécution, compilation séparée (module). 4
Qualités exigés d un logiciel II Utilisation de peu de ressources ( peu de place mémoire et du temps de calcul) Fiabilité : abstraction + encapsulation (protection de données), typage Robustesse : protection et gestion des anomalies, exécution sans faille pendant une certaine durée Portabilité : utilisation de langages universels, multiplateforme, langages intermédiaire pour les compilateurs (bytecode java) 5
Approches nouvelles de programmation Toutes ces exigences sont à l origine de l apparition de : Nouvelles approches de programmation Nouveaux paradigmes de programmation Des approches de sémantique formelle des programmes et des langages de programmation Concepts moderne de programmation 6
2- Les langages de programmation La programmation : un processus intellectuel complexe (une des branches les plus difficiles des mathématiques appliquées d après Dijsktra). Pour programmer on utilise des langages de programmation. Un langage de programmation : est une abstraction des opérations réalisable sur un ordinateur. Avant 1960 : la programmation est l étape la plus difficile du cycle de vie d un programme, programmer c est apprendre un langage de programmation. Après 1960 Crise de logiciel Enormes coûts associés à la programmation (manque d outils efficaces) Echecs spectaculaires dans de très grands projets Depuis Dijkstra, il y avait Wirth, Parnas, Liskov, Hoare qui n ont cessé de développer une théorie de programmation. 7
Le langage de programmation comme application Un langage de programmation est une application orientée vers un grand public de développeurs leur servant d outil pour : s exprimer facilement. structurer ses idées. apprendre de nouveaux langages de programmation. Elle est classifiée : selon le paradigme : (déclaratif, impératif, logique) selon la spécification : (bases de données, problèmes mathématiques). selon le champ d application : (Administration et application commerciale, ingénierie, calculs scientifiques). 8
Description des langages de programmation I Les langages de programmation sont décrits en termes de : i. Syntaxe formelle : elle concerne la «forme» et la structure des expressions pouvant être construites à l aide de langage ( exemple : Forme Normale de BACKUS). La syntaxe d un langage de programmation définit l ensemble des règles qui sont admissibles et elle est définie par une ii. grammaire. Sémantique formelle : la sémantique concerne l aspect sens et signification à attribuer aux constructions linguistiques qu offre le langage. Cet aspect souvent exprimé de manière informelle via le langage pose un problème d ambiguïté, d inconsistance et d incomplétude (problème de fiabilité ). 9
Sémantique formelle statique et dynamique sémantique : décrit ce qui se passe lorsqu'on compile et qu'on exécute un programme. En général de manière informelle mais également de manière formelle. Deux types de sémantique formelle statique et dynamique : La sémantique statique modélise les vérifications qui sont effectués à la compilation d'un programme. Par exemple : la vérification de types ou l'inférence de types (une expression représentant le test d'une instruction conditionnelle ou d'une boucle doit être de type booléen), un identificateur ne peut pas être déclaré deux fois, Un nombre entier ne commence par des zéros La sémantique dynamique modélise ce qui se passe à l'exécution des programmes. 10
Sémantique formelle dynamique La sémantique formelle dynamique comprend trois approches complémentaires : Sémantique opérationnelle. Sémantique dénotationnelle. Sémantique axiomatique 11
Sémantique opérationnelle exprime le comportement exact de la machine lors de l exécution d un programme, elle est orientée développeur de compilateur (ou interpréteur) Principe : elle est donnée de manière implicite ou explicite par référence à une machine spécifique «souvent virtuelle ou abstraite» - elle définit pour chaque construction du langage de programmation, comment cette construction est exécutée. - C est une sorte de machine abstraite qui manipule directement les termes du langages (plutôt que du code machine) - pour un langage impératif, une machine abstraite définit l'effet sur la mémoire de chaque type d'instruction. - pour un langage fonctionnel, une machine abstraite définit pour chaque type d'expression sa valeur. 12
Sémantique dénotationnelle c est une traduction des expressions du langage en un ensemble de dénotations sous forme de constantes ou des fonctions mathématiques, donc : Elle est orientée concepteurs de langages de programmation. Principe : une structure mathématique choisie comme formalisme. - elle utilise une fonction d évaluation qui est une correspondance entre le programme et les éléments du modèle (associe les éléments du langages à ces constantes et fonctions). - elle offre une vision plus abstraite - on s'intéresse à ce que calcule le programme, mais pas à comment il le calcule 13
Sémantique axiomatique un ensemble d axiomes qui expriment les propriétés du langage, donc : elle est orientée programmeurs : vérification de la correction des programmes écrits. Principe : souvent basée sur la logique ( FLOYD, HOARE). Dans le cas d'un langage impératif (comme FORTRAN), ce type de sémantique permettra de montrer des formules de la forme : {P} programme {Q} Cette formule veut dire que pour tout état de la mémoire qui vérifie la propriété P (appelée précondition), alors après l'exécution du programme programme, l état de la mémoire verifiera la propriete Q (appelée postcondition). La correction est ici partielle, car on ne dit rien sur le fait que le programme termine ou pas. 14
Approches de programmation I Approche impérative : basée sur le concept d affectation et du séquencement des instructions à l aide de structures de contrôle (notion d état modifiable) «Langages impératifs: Pascal, Fortran, C, ada, Java,...» L exécution d un programme : un ensemble d états Etats initiaux états finaux ou résultats On parle d un automate d états finis ou un système de transition d états Approche déclarative : absence de séquencement explicite et d affectation, le programme décrit ce qui doit être calculé sans décrire explicitement comment se fait cette résolution (dépendance des données). Langages fonctionnels (évaluation de fonctions) : Lisp, Caml, Scheme. Langages logiques (basé sur le calcul de prédicats) : Prolog. 15
Approches de programmation II Dirigée par les traitements : un programme = un algorithme + structure de données. Approche classique : découper le problème à résoudre en modules. Dirigée par les données : on commence par identifier les objets (regrouper les données et les opérations qui s appliquent sur ces données dans des entités). un programme = un ensemble d objets en interaction 16
paradigme de programmation I un paradigme est une façon d aborder un problème de programmation à l aide d un type de langage qui supporte bien certains mécanismes d abstraction. Exemples de paradigme des langages de programmation : 1. Impératifs (axés sur l affectation) : le programme est constitué d une suite d énoncés exécutés séquentiellement qui décrivent comment réaliser l objectif. Exemple : Ada, Pascal, ALGOL, FORTRAN, COBOL, MODULA, C. 2. fonctionnels : le programme est vu comme une transformation de données à fin d obtenir la sortie désirée. Exemple: Lisp, ML, HOPE, MIRANDA, Haskell, KP. 17
paradigme de programmation II 3. logiques (basés sur la preuve des formules) : le programme décrit les propriétés de la solution recherchée, et un mécanisme d inférence propose des solutions. Exemple : Prolog, Godel. 4. orienté objet (basés sur l héritage) : le programme se décompose en un ensemble d objets inter agissants entre eux par l échange de messages. Exemple : SIMULA, Smaltalk, C++, Eiffel, Java. 5. Concurrent : le programme autorise la répartition des tâches à accomplir en un ensemble de plusieurs processus asynchrones pouvant s exécuter en parallèle. Exemple : Ada 95 ; les données peuvent être partagées ou non. 18
3- Compilation /Interprétation Compilation : Traduit un programme écrit dans un langage L1 en programme écrit en L2 (C vers langage machine ou assembleur par exemple) Exécution : assembleurs, chargeur éditeur de lien, lanceur. Un programme compilé s exécute plus rapidement, surtout si il y a prise en compte des spécificités matérielles. La compilation (statique) peut consacrer du temps à l analyse de code et à l optimisation. Les langages compilés (pour réaliser des logiciels comme produits finis) sont des langages évolués comme Pascal, C++, Les langages machines (code fastidieux) Les langages d assemblage (très proche des langages machines) ou symbolique - exécution rapide + maintenant approche fausse (moins utilisée) 19
3- Compilation /Interprétation Interprétation : combinaison de la traduction et de l exécution Les programmes interprétés sont généralement plus petits en taille, Les programmes interprétés sont plus portables, L interpréteur peut avoir accès à des informations "à l exécution" (run time). Les langages interprétés facilitent le protypage et la mise au point. Compilation dynamique : JIT (Just In Time) combine l interprétation et la compilation. 20