Title: CSI 3525,
1É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
2Les langages de programmation et le processus de
programmation
- Programmer, cest plus que simplement écrire du
code. - Pourquoi étudier les langages de programmation?
- Les paradigmes et applications de la
programmation.
3Programmer, cest 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. - Quest-ce quun ordinateur comprend?
- Comment lordinateur nous répondra?
4Programmer, cest plus que simplement écrire du
code (suite)
- Comment les langages de programmation
diffèrent-ils des langages naturels? - Quest-ce qui fait de quelquun un bon
programmeur? - Un programmeur devrait-il connaître plus dun
langages de programmation?
5Pourquoi é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.
6Pourquoi étudier les langages de programmation?
(suite)
- Pour apprécier le fonctionnement des ordinateurs
en sachant comment les langages sont implémentés. - Pour faciliter lapprentissage de nouveaux
langages. - Pour savoir développer de nouveaux langages
formels (pour lentré de données par exemple). - Pour constater comment les langages influencent
linformatique en tant que discipline, et
encouragent les bonnes pratiques de développement
de logiciels.
7Les différent types de langagesParadigmes 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.
8Différent paradigmes de programmation
- Langages impératifs Ces langages permettent au
programmeur dattribuer 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)
9Langages 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 dune série d axiomes et de
règles de déduction, et la présentation dun
théorème à prouver. Le programme répond si le
théorème peut être prouvé ou non à partir des
déclarations. (Prolog)
10Langages Impératifs
- Programmation procédurale Le programme est
divisé en blocs pouvant contenir des variables
locales, ainsi que dautres 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
linteraction entre ces objets. (Java, Smalltalk) - Programmation concurrente Langage permettant
lutilisation de plusieurs CPU opérant en
parallèle. Les donnés peuvent être partagées
entre les processeurs ou restreintes a certain
dentre eux. (Ada 95, Java)
11 Spécialisation dun 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).
12Niveau de complexité et dabstraction
- 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)
13Domaines dapplication
- 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 lingénierie).
- Aujourdhui, largement influencé par la
conception de nouveau hardwares tel que les
superordinateurs ou les ordinateurs vectoriels.
14Domaines dapplication (2)
- Intelligence artificielle et autres applications
en marge de linformatique. - Logiciel éducatifs, jeux
- De nouveaux hardware sont proposés (présentement
surtout simulés) pour lintelligence
artificielle réseaux de neurones, ordinateurs à
connexion. - Applications en interne
- compilateurs, systèmes dexploitation, GUI, API.
15Critères pour la conception et lévaluation de
langages de programmation
- Lisibilité
- Aptitude à lécriture
- Fiabilité
- Coût
16Lisibilité
- Ce critère est subjectif, mais important.
- La lisibilité dun 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, labstraction procédurale, et
labstraction des données. - Absence dambiguïtés
- Absence dune surabondance de choix Par exemple,
certain langages permettent décrire les boucles
de plusieurs façon différentes.
17Lisibilité (2)
- Orthogonalité labsence de restrictions sur la
façon de combiner les primitives du langage.(Il
est plus facile de constater le manque
dorthogonalité.) - Exemple Un tableau peut-il contenir des éléments
de nimporte quel type? - Résulte en une diminution du nombre de cas
spéciaux. - Peut être pousse trop loin (Algol 68).
18Lisibilité (3)
- Expressivité des structures de contrôle et de
données. - Quest-ce qui est plus facile a lire et
maintenir - un long programme bâtie à partir déléments
simple? - -ou-
- un programme bref bâtie à partir déléments
complexes et spécialises? - Exemples dexpressivité la récursivité, le
retour arrière incorporé de Prolog, la recherche
dans les langages de base de données. - Exemple de peu dexpressivité instructions
dassembleur. - Apparence syntaxe élégante, commentaires.
19Aptitude à 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 doutils de
modularisation et la capacité dêtre incorporé
dans un environnement de programmation intégré.
20Fiabilité et Coût
- Fiabilité Vérification des types, traitement des
exceptions et erreurs, labsence dambiguïtés (et
en générale la lisibilité et laptitude a
lécriture). - Coût associées à lutilisation du langage.
- Temps nécessaire au développement (facilité de
programmation, disponibilité de code, de
librairies et de documentation). - Facilité dimplémentation (affecte la
disponibilité et le coût des compilateurs) Algol
68 a échoué, Ada presque limplémentation de
Pascal, C, C et Java ont été de grand succès. - Temps nécessaire pour traduire, et lefficacité
du code résultant. - Portabilité et standardisation.
21Limplémentation de langages de programmation
- Processeurs de langage
- machines virtuelles
- Modèles dimplémentation
- Compilation et exécution
22Processeurs de langage
- A processeur de langage est un dispositif
(logiciel ou matériel (hardware)) capable
dexécuter des instructions du langage. - La traduction est le processus qui transforme un
programme dun langage à un autre, tout en
préservant son sens et sa fonctionnalité. - Le langage cible peut être directement exécutable
sur lordinateur, ou (plus souvent) devra à
nouveau être traduit en un langage de niveau
inférieur.
23Machines Virtuelles
- Une machine virtuelle est une réalisation
logicielle (simulation) dun processeur de
langage. - Il est difficile de programmer directement pour
le hardwarele 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.
24Exemple de couches partagées
- Tout processeurs de langage nécessitent une
capacité dentrées /sorties. - Tout les processeurs de langage doivent effectuer
des calcules (utiliser le CPU).
25Machines 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é.
26Exemple 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 dapplication
- Layer 7 données dentré aussi un langage
27Machines Virtuellesexemples
- Layer 0 IBM Netvista avec Pentium 4 de Intel,
2GHz - Layer 1 Langage Machine IBM Intel
- Layer 2 Windows XP
- Layer 3 Java byte-code
- Layer 4 Java 2.0 (code developé en JRE 1.4.0)
- Layer 5 comparateur intelligent de programmes
C, écrit en Java - Layer 6 deux programmes C à comparer afin
de trouver les similarités
28Machines Virtuellesexemples (2)
Layer 0 IBM Netvista avec Pentium 4 de Intel,
2GHz Layer 1 Langage Machine IBM Intel Layer
2 Windows NT 4.0 Layer 3 Java byte-code Layer
4 JDK 1.2 Layer 5 Une implementation en Java de
Prolog Layer 6 Une implementation en Prolog de
mySQL Layer 7 Un patron de base de données
defini et créé Layer 8 des enregistrements à
inserer dans la base de données
29Modèles dimplémentation
- Compilation
- Traduit le programme en un langage dune machine
virtuelle dune 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.
30Modèles dimplémentation(2)
- La compilation pure et linterprétation pure sont
peu utilisé. Limplé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.
31Modèles dimplémentation(3)
- Certain langages se prêtent mieux à
linterprétation, par exemple Prolog et Lisp qui
sont utilisé de manière interactive. - Dautre se prêtent mieux à la compilation, tel
que C et Java. - Il existe des versions compilés de Prolog et
Lisp - Une boucle dinterprétation de haut-niveau régît
linteraction usagée. - Les prédicats / fonctions sont compilées en un
format optimisé qui est interprété.
32Compilation et exécution
Programme source
compilateur
Séquence dunités lexicales
Analyse lexicale (scaning)
Analyse syntaxique(parsing)
Table de symboles
Arbre syntaxique
Optimisation du code
Analyse sémantique
Programme abstrait(code intermédiaire)
Programme abstrait(optimisé)
Chargeur/Éditeur de liens (Loader/Linker)
Génération du code
Code exécutable(object code)
Programme résultant
Données dentré
Ordinateur
Données de sortie