Notes de Cours 2: Preliminaires

publicité
Évaluation et Implémentation des
langages
• Les langages de programmation et le
processus de programmation
• Critères de conception et d’évaluation
des langages de programmation
• Implémentation des langages de
programmation
CSI 3525, Évaluation et Implémentation, page 1
Les langages de programmation et le
processus de programmation
Programmer, c’est plus que simplement
écrire du code.
Pourquoi étudier les langages de
programmation?
Les paradigmes et applications de la
programmation.
CSI 3525, Évaluation et Implémentation, page 2
Programmer, c’est plus que
simplement écrire du code.
• Avant d’écrire le code,le problème est analyse,
un algorithme est développé (ou emprunté), le
coût de la solution est évalué.
• Après avoir écrit le code, le programme doit
être maintenu.
• Les langages de programmation transmettent
des instructions aux ordinateurs.
– Qu’est-ce qu’un ordinateur comprend?
– Comment l’ordinateur nous répondra?
CSI 3525, Évaluation et Implémentation, page 3
Programmer, c’est plus que
simplement écrire du code (suite)
• Comment les langages de programmation
diffèrent-ils des langages naturels?
• Qu’est-ce qui fait de quelqu’un un bon
programmeur?
• Un programmeur devrait-il connaître plus
d’un langages de programmation?
CSI 3525, Évaluation et Implémentation, page 4
Pourquoi étudier les langages de
programmation?
• Pour mieux comprendre la relation entre les
algorithmes et les programmes.
• Pour apprendre à trouver des solutions
générales, indépendantes du langage choisi.
• Pour pouvoir mieux choisir les outils de
programmation les plus appropries.
CSI 3525, Évaluation et Implémentation, page 5
Pourquoi étudier les langages de
programmation? (suite)
• Pour apprécier le fonctionnement des ordinateurs
en sachant comment les langages sont
implémentés.
• Pour faciliter l’apprentissage de nouveaux
langages.
• Pour savoir développer de nouveaux langages
formels (pour l’entré de données par exemple).
• Pour constater comment les langages influencent
l’informatique en tant que discipline, et
encouragent les bonnes pratiques de
développement de logiciels.
CSI 3525, Évaluation et Implémentation, page 6
Les différent types de langages:
Paradigmes de programmation
• Différent langages permettent de
résoudre différent problèmes de façon
différentes.
• Une opération peut être exprimée dans
différent langages, puis exécuté sur la
même machine.
CSI 3525, Évaluation et Implémentation, page 7
Différent paradigmes de programmation
• Langages impératifs: Ces langages permettent au
programmeur d’attribuer des valeurs a des espaces
mémoire, afin de décrire explicitement comment
résoudre le problème. (Java, C++, Pascal)
• Langages déclaratifs: Ces langages permettent au
programmeur de déclarer diverse entités et relations.
Le programme pourra ensuite utiliser ces declarations
pour résoudre le problème. (Prolog, Lisp)
CSI 3525, Évaluation et Implémentation, page 8
Langages Déclaratifs
• Programmation fonctionnelle: Un programme consiste
en la déclaration de fonctions. Un appel a une fonction est
fait et retournera un élément qui dépendra de la valeur de
ses paramètres qui peuvent, eux même, être des appels
a des fonctions.(Lisp)
• Programmation logique: Un programme consiste en la
déclaration d’une série d ’axiomes et de règles de
déduction, et la présentation d’un théorème à prouver. Le
programme répond si le théorème peut être prouvé ou
non à partir des déclarations. (Prolog)
CSI 3525, Évaluation et Implémentation, page 9
Langages Impératifs
• Programmation procédurale: Le programme est divisé
en blocs pouvant contenir des variables locales, ainsi que
d’autres blocs. (C, Fortran, Pascal)
• Programmation orientée-objet: Des objets se raportant
au problème sont définis, avec leurs attributs et leur façon
de réagir à différent événements. Le problème est résolu
grâce a l’interaction entre ces objets. (Java, Smalltalk)
• Programmation concurrente: Langage permettant
l’utilisation de plusieurs CPU opérant en parallèle. Les
donnés peuvent être partagées entre les processeurs ou
restreintes a certain d’entre eux. (Ada 95, Java)
CSI 3525, Évaluation et Implémentation, page 10
Spécialisation d’un langage
• Langages a usage général: la plupart des
langages que vous connaissez.
• Langages spécialises:
ex: matlab (mathématiques), Cobol
(production de rapports), SQL (bases de
données), Perl (langage script).
CSI 3525, Évaluation et Implémentation, page 11
Niveau de complexité et d’abstraction
• Langages de bas niveau (langage machine,
assembleur).
• Langages de haut niveau (les langages les
plus utilisés).
• Langages de très haut niveau (Prolog, ainsi
que certain langages spécialises).
• Au delà des langages de programmation:
Environnements de programmation et outils de
développement logiciel (JBuilder, Visulal C++)
CSI 3525, Évaluation et Implémentation, page 12
Domaines d’application
• Traitement de données ("business applications").
Important dans le passé, maintenant largement
remplace par les bases de données, tableurs,
et logiciels spécialisés.
• Calcul scientifique (incluant l’ingénierie).
Aujourd’hui, largement influencé par la
conception de nouveau hardwares tel que les
superordinateurs ou les ordinateurs vectoriels.
CSI 3525, Évaluation et Implémentation, page 13
Domaines d’application (2)
• Intelligence artificielle et autres applications
en marge de l’informatique.
– Logiciel éducatifs, jeux…
– De nouveaux hardware sont proposés
(présentement surtout simulés) pour
l’intelligence artificielle: réseaux de
neurones, ordinateurs à connexion.
• Applications en interne
– compilateurs, systèmes d’exploitation,
GUI, API.
CSI 3525, Évaluation et Implémentation, page 14
Critères pour la conception et l’évaluation
de langages de programmation
Lisibilité
Aptitude à l’écriture
Fiabilité
Coût
CSI 3525, Évaluation et Implémentation, page 15
Lisibilité
• Ce critère est subjectif, mais important.
• La lisibilité d’un langage est rendu essentielle
par les usages courrant du génie logiciel, en
particulier, pour les fins d’évolution, de
maintenance, et de mise à jour des logiciels.
• Abstraction: permettre la généralité des
programmes, l’abstraction procédurale, et
l’abstraction des données.
• Absence d’ambiguïtés
• Absence d’une surabondance de choix: Par
exemple, certain langages permettent d’écrire
les boucles de plusieurs façon différentes.
CSI 3525, Évaluation et Implémentation, page 16
Lisibilité (2)
• Orthogonalité: l’absence de restrictions sur la
façon de combiner les primitives du langage.
(Il est plus facile de constater le manque
d’orthogonalité.)
– Exemple: Un tableau peut-il contenir des
éléments de n’importe quel type?
– Résulte en une diminution du nombre de
cas spéciaux.
– Peut être pousse trop loin (Algol 68).
CSI 3525, Évaluation et Implémentation, page 17
Lisibilité (3)
• Expressivité des structures de contrôle et de données.
– Qu’est-ce qui est plus facile a lire et maintenir:
un long programme bâtie à partir d’éléments simple?
-ouun programme bref bâtie à partir d’éléments
complexes et spécialises?
– Exemples d’expressivité: la récursivité, le retour arrière
incorporé de Prolog, la recherche dans les langages de
base de données.
– Exemple de peu d’expressivité: instructions d’assembleur.
• Apparence: syntaxe élégante, commentaires.
CSI 3525, Évaluation et Implémentation, page 18
Aptitude à l’écriture
• Encore subjectif.
• Abstraction: comme pour la lisibilité
• Simplicité:
– Basic et Pascal sont simple
– Prolog est conceptuellement simple, mais difficile en
pratique.
– C++ et Java?
• Expressivité (encore).
• Modularité: aussi la présence d’outils de modularisation et
la capacité d’être incorporé dans un environnement de
programmation intégré.
CSI 3525, Évaluation et Implémentation, page 19
Fiabilité et Coût
• Fiabilité: Vérification des types, traitement des exceptions
et erreurs, l’absence d’ambiguïtés (et en générale la
lisibilité et l’aptitude a l’écriture).
• Coût associées à l’utilisation du langage.
– Temps nécessaire au développement (facilité de
programmation, disponibilité de code, de librairies et de
documentation).
– Facilité d’implémentation: (affecte la disponibilité et le
coût des compilateurs) Algol 68 a échoué, Ada presque;
l’implémentation de Pascal, C, C++ et Java ont été de
grand succès.
– Temps nécessaire pour traduire, et l’efficacité du code
résultant.
– Portabilité et standardisation.
CSI 3525, Évaluation et Implémentation, page 20
L’implémentation de langages de
programmation
– Processeurs de langage
– machines virtuelles
– Modèles d’implémentation
– Compilation et exécution
CSI 3525, Évaluation et Implémentation, page 21
Processeurs de langage
• A processeur de langage est un dispositif (logiciel ou
matériel (hardware)) capable d’exécuter des instructions du
langage.
• La traduction est le processus qui transforme un programme
d’un langage à un autre, tout en préservant son sens et sa
fonctionnalité.
• Le langage cible peut être directement exécutable sur
l’ordinateur, ou (plus souvent) devra à nouveau être traduit
en un langage de niveau inférieur.
CSI 3525, Évaluation et Implémentation, page 22
Machines Virtuelles
• Une machine virtuelle est une réalisation logicielle
(simulation) d’un processeur de langage.
• Il est difficile de programmer directement pour le
hardware—le hardware est donc généralement
« enveloppé » de plusieurs couches logicielles.
• Une couche peut être partagé par plusieurs
processeurs de langage,chacun ayant sa propre
machine virtuelle au dessus de cette couche.
CSI 3525, Évaluation et Implémentation, page 23
Exemple de couches partagées
• Tout processeurs de langage nécessitent
une capacité d’entrées /sorties.
• Tout les processeurs de langage doivent
effectuer des calcules (utiliser le CPU).
CSI 3525, Évaluation et Implémentation, page 24
Machines virtuelles
• Il existe normalement une hiérarchie de machines
virtuelles:
– Au plus bas niveau: hardware.
– Au plus haut: des langages plus intuitifs pour le
programmeur.
– Chaque couche est exprimée uniquement en
terme de la précédente, ce qui assure une
abstraction approprié.
CSI 3525, Évaluation et Implémentation, page 25
Exemple de hiérarchie de
machines virtuelles
Layer 0:
hardware
Layer 1:
microcode
Layer 2:
langage machine
Layer 3:
appels système
Layer 4:
code indépendant de la machine
Layer 5:
langage de haut niveau (ou assembleur)
Layer 6:
programme d’application
Layer 7:
données d’entré [aussi un langage]
CSI 3525, Évaluation et Implémentation, page 26
Machines Virtuelles—exemples
Layer 0:
Layer 1:
Layer 2:
Layer 3:
Layer 4:
Layer 5:
Layer 6:
IBM Netvista avec Pentium 4 de Intel,
2GHz
Langage Machine IBM Intel
Windows XP
Java byte-code
Java 2.0 (code developé en JRE 1.4.0)
comparateur intelligent de programmes
C++, écrit en Java
deux programmes C++ à comparer afin
de trouver les similarités
CSI 3525, Évaluation et Implémentation, page 27
Machines Virtuelles—exemples (2)
Layer 0:
Layer 1:
Layer 2:
Layer 3:
Layer 4:
Layer 5:
Layer 6:
Layer 7:
Layer 8:
IBM Netvista avec Pentium 4 de Intel,
2GHz
Langage Machine IBM Intel
Windows NT 4.0
Java byte-code
JDK 1.2
Une implementation en Java de Prolog
Une implementation en Prolog de mySQL
Un patron de base de données defini et
créé
des enregistrements à inserer dans la
base de données
CSI 3525, Évaluation et Implémentation, page 28
Modèles d’implémentation
• Compilation:
– Traduit le programme en un langage d’une
machine virtuelle d’une couche plus basse.
– Le code résultant sera exécuté plus tard.
• Interprétation:
– Divise le programme en petit fragments
(représentant des éléments de syntaxe).
– Une boucle traduit et exécute immédiatement
les fragments.
CSI 3525, Évaluation et Implémentation, page 29
Modèles d’implémentation(2)
• La compilation pure et l’interprétation pure sont peu
utilisé. L’implémentation des langages de
programmation utilise souvent un mélange des
deux.
- exemple: Java est compilé en « bytecode », puis
celui-ci est interprété.
• On designer un processeur de langage comme
interpréteur si il ressemble plus à un interpréteur, et
comme compilateur, si il ressemble plus à un
compilateur.
CSI 3525, Évaluation et Implémentation, page 30
Modèles d’implémentation(3)
• Certain langages se prêtent mieux à
l’interprétation, par exemple Prolog et Lisp qui sont
utilisé de manière interactive.
• D’autre se prêtent mieux à la compilation, tel que
C++ et Java.
• Il existe des versions compilés de Prolog et Lisp:
– Une boucle d’interprétation de haut-niveau régît
l’interaction usagée.
– Les prédicats / fonctions sont compilées en un
format optimisé qui est interprété.
CSI 3525, Évaluation et Implémentation, page 31
Programme source
Compilation et exécution
compilateur
Analyse lexicale
(scaning)
Séquence d’unités
lexicales
Table de symboles
Optimisation
du code
Programme abstrait
(code intermédiaire)
Analyse syntaxique
(parsing)
Arbre syntaxique
Analyse
sémantique
Programme abstrait
(optimisé)
Génération
du code
Code exécutable
(object code)
Chargeur/Éditeur de liens
(Loader/Linker)
Programme résultant
Données d’entré
Ordinateur
Données de sortie
CSI 3525, Évaluation et Implémentation, page 32
Téléchargement